2010-03-28 3 views
0

Я использую ECJ с Java. У меня есть группа людей, которые все хотят иметь один и тот же мозг.Вместо того, чтобы отправлять цифры, передавая код человеку в генетическое программирование? ECJ

В принципе, я бы хотел развить мозги с помощью GP. Мне нужны такие вещи, как «if-on-enemy-territory» и «if-sense-target» для утверждений «go-home» или «move-randomly» или «shoot» для терминалов.

Однако эти утверждения должны быть полными исполняемыми Java-кодами. Как я могу это сделать с ECJ?

НАПРИМЕР:

Я хочу, чтобы терминал под названием "moveRandom". Если бы я закодировать это в моем классе солдата, он будет выглядеть так:

private void moveRandomly(SoldierWorld world) 
{ 
    //..snip. 

    int newX = (int)(this.getLocation().x + speed * Math.cos(this.getDirection() * Math.PI/180.0)); 
    int newY = (int)(this.getLocation().y - speed * Math.sin(this.getDirection() * Math.PI/180.0)); 

    Point newPoint = new Point(newX, newY); 
    this.setLocation(newPoint); 
} 

Теперь, как я могу сделать вывод, который будет выполнять этот код?

ответ

1

Я хотел бы перечислить все функции, которые вы имеете, а затем сделать функцию набора класс, который выполняет функцию, связанную с перечислением:

public class FunctionSet 
{ 
    public enum FuncName 
    { 
     MOVE_RANDOM, 
     SHOOT, 
     GO_HOME, 
     ... 
    } 

    public FunctionSet() 
    { 

    } 

    public void Execute(FuncName funcName, Soldier soldier, SoldierWorld world) 
    { 
     switch(funcName) 
     { 
      case FuncName.MOVE_RANDOM: 
       soldier.moveRandom(world); 
       break; 
      case FuncName.SHOOT: 
       soldier.shoot(...); 
       break; 
      case FuncName.GO_HOME: 
       soldier.goHome(...); 
       break; 
      default: 
       break; 
     } 
    } 
} 

Таким образом, узлы в вашем дереве выражения, не будет содержать фактические теперь, но только FuncName перечисляет ... вам, возможно, придется выполнить дополнительную работу, например, следить за тем, сколько параметров связано с каждой функцией и разместить ее на карте хэша.

В качестве альтернативы вы можете использовать отражение, чтобы получить все применимые имена функций из класса Soldier, а затем поместить их на карту с соответствующим количеством параметров.

 Смежные вопросы

  • Нет связанных вопросов^_^