我正在研究一种使用三角形重建绘画的遗传算法。目前,我用来填充孩子的方法正在改变父母的价值观,我无法弄清楚原因。
public void populate()
{
System.out.println("pre: " + Arrays.toString(triangles[0][0]));
for(int drawNum = 2; drawNum < 12; drawNum ++)
{
for(int triNum = 0; triNum < numTriangles; triNum ++)
{
double pChooser = Math.random();
if(pChooser < .45)
{
triangles[drawNum][triNum] = triangles[0][triNum];
}
else if(pChooser < .9)
{
triangles[drawNum][triNum] = triangles[1][triNum];
}
else
{
triangles[drawNum][triNum] = randomTriangle();
}
}
}
genNum ++;
System.out.println("pst: " + Arrays.toString(triangles[0][0]));
}
private int[] randomTriangle()
{
int[] result = new int[9];
for(int i = 0; i < 9; i++)
{
result[i] = (int) (Math.random() * 256);
}
return result;
}
triangles
是一个3维int数组,它包含每个图形,图形中的每个三角形,以及triangles[drawingNumber][triangleNumber][values]
形式的三角形的端点和颜色的每个值。 triangles[0]
和triangles[1]
是两个父母。 print语句在子元素形成之前和之后打印第一个父元素中第一个三角形的值。但是,前后打印语句返回不同的结果,这意味着triangles[0][0]
在代码中的某处发生了变化,但我无法弄清楚它在哪里。