///
/// 交叉操作;
///
private static void CrossOperate()
{
/** bit[0]~bit[5] fit
* 4 000 110 12
* 3 001 010 9
* child1 000 010 14
* child2 001 110 5
*/
int rand1 = random.Next(0, 6);//0-5;
int rand2 = random.Next(0, 6);//0-5;
if (rand1 > rand2)
{
var t = rand1;
rand1 = rand2;
rand2 = t;
}
Console.WriteLine("交叉的rand " + rand1 + " - " + rand2);
for (int j = 0; j < chromosomes.Count; j = j + 2)
{
for (int i = rand1; i <= rand2; i++)
{
//将第0个给第2个;
var t = chromosomes[j].bits[i];
chromosomes[j].bits[i] = chromosomes[j + 1].bits[i];//第一条和第三条交叉;
chromosomes[j + 1].bits[i] = t;
}
chromosomes[j].fitValue = GetFitValue(DeCode(chromosomes[j].bits));
chromosomes[j + 1].fitValue = GetFitValue(DeCode(chromosomes[j + 1].bits));
}
}
交叉操作
最新推荐文章于 2023-02-17 20:13:40 发布