【问题标题】:Different variable output from same method JAVA genetic algorithm相同方法JAVA遗传算法的不同变量输出
【发布时间】:2016-11-26 04:03:32
【问题描述】:

所以我试图在我坚持得到的 java 上构建一个遗传算法 我的人口的健康状况来自我的项目的 3 个班级:

个人班级

public class Individu {

int Popsize=4;
int Health[]= new int[Popsize];   
int Attack[]= new int[Popsize];
int Atspeed[]= new int[Popsize];    
int Move[]= new int[Popsize];

int health,attack,lifetime,dmgdone,attspeed,range,move;
double fitness;
double Pitness[]= new double[20];
    
Random random = new Random();

public int setHealth(){
   
health = random.nextInt(150 - 75) + 75;
    
return health;
}
public int setAttack(){
attack = random.nextInt(10 - 5) + 10;
    
return attack;
}
public int setAttspeed(){
attspeed = random.nextInt(3 - 1) + 3;
    
return attspeed;
}
public int setMoveSpeed(){
move = random.nextInt(8 - 4) + 1;
    
return move;
}
      
public int getGeneHealth(int index) {
          
return Health[index];
}
public int getGeneAttack(int index) {
          
return Attack[index];
}
public int getGeneAtspedd(int index) {
          
return Atspeed[index];
}
public int getGeneMove(int index) {
          
return Move[index];
}

public void setGene(int index, int value) {
Health[index]=value;
Attack[index]=value;
Atspeed[index]=value;
Move[index]=value;
    
fitness = 0;
}
public int size() {
return Popsize;
}
      

      
public double[] GenerateIndividual(){
for (int i = 0; i <Popsize; i++) {
Health[i]=setHealth();
Attack[i]=setAttack();
Atspeed[i]=setAttspeed();
Move[i]=setMoveSpeed();
       

}
return Pitness;   
}
 

班级健身

 public class Fitness {
 Individu individu= new Individu();

 double fitness;
 double Pitness[]= new double[20];
 public double getFitness(){
 individu.GenerateIndividual();
 for (int i = 0; i <=3; i++) {
 fitness=
 individu.getGeneHealth(i)+individu.getGeneAtspedd(i)+
 individu.getGeneAttack(i)+
 individu.getGeneMove(i));
 fitness=fitness/171;
 Pitness[i]=fitness;
 System.out.println("Health from class
 fitness"+individu.Health[i]);
 }
 return fitness;
 }

 }

主类

public class main {
public static void main(String[] args) {
Individu aaa=new Individu();
Fitness bbb= new Fitness();
bbb.getFitness();
aaa.GenerateIndividual();
    


DecimalFormat df = new DecimalFormat();
df.setMaximumFractionDigits(3);

for (int i=0; i<=3; i++){
//System.out.println("Fitness         ");
System.out.println("Generasi ke         :"+i+1);
System.out.println("Health          "+aaa.getGeneHealth(i));
System.out.println("Attackspeed     "+aaa.getGeneAtspedd(i));
System.out.println("Attack          "+aaa.getGeneAttack(i));
System.out.println("movementSpeed   "+aaa.getGeneMove(i));
}     
}
}

我挣扎的是,当我运行这个脚本时,我从 1 个变量中获得了 2 个双精度值,第一个值来自我在此处打印的 Fitness 类

 System.out.println("Health from class fitness"+individu.Health[i]);

第二个变量是我从主类中打印出来的

 System.out.println("Health "+aaa.getGeneHealth(i));

这 2 个变量总是具有不同的值,导致我的适应度和我的一代彼此不相关。 我的问题是如何让这 2 个变量打印相同的值?

【问题讨论】:

    标签: java oop artificial-intelligence genetic-algorithm


    【解决方案1】:

    嗯,除了我可以检测到的关于遗传算法基本要素的许多问题之外,我看到“individu”和“aaa”是两个不同的 Java 对象。

    Individu aaa=new Individu();
    aaa.GenerateIndividual();
    

    Individu individu= new Individu();
    individu.GenerateIndividual();
    

    由于您的 Health 和 Fitness 是在 GenerateIndividual() 上随机生成的,因此 'aaa' 和 'individu' 将获得不同的 Health 值。

    我强烈建议您查看 GA 要点,因为我可以在您的系统中看到许多概念错误。

    【讨论】:

    • 我意识到我的编码很混乱,但我想从头开始构建这段代码,因为我是新手,有没有什么建议可以在我打印 2 个不同的类时将它们打印为 1 个值?感谢您的回复
    • 只使用一个变量。 aaa 或个人
    • 这个建议有用吗?
    猜你喜欢
    • 2016-08-03
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多