简而言之,我该怎么做:
- 从头到尾
double
, - 然后做交叉(一点,两点),
- 然后回到
double
我可以开发轮盘赌选择。我看不清楚的是混合两个双打如何给我一个“更好”的双打。这是完全随机的吗?如果我的“最适者”doubles
和我的“最弱者”结合起来,他们不会产生一个中点double
吗?
详细说明: 从一点到这条曲线的最短距离
编辑 1:不减慢程序太多。
编辑 2:我考虑使用 a byte[]
,但我不知道这是否会违背遗传算法部分。
简而言之,我该怎么做:
double
,double
我可以开发轮盘赌选择。我看不清楚的是混合两个双打如何给我一个“更好”的双打。这是完全随机的吗?如果我的“最适者”doubles
和我的“最弱者”结合起来,他们不会产生一个中点double
吗?
详细说明: 从一点到这条曲线的最短距离
编辑 1:不减慢程序太多。
编辑 2:我考虑使用 a byte[]
,但我不知道这是否会违背遗传算法部分。
这对我有用:
BitArray BAA1 = new BitArray(BitConverter.GetBytes(a1));
BitArray BAA2 = new BitArray(BitConverter.GetBytes(a2));
for (int i = r.Next(0, 64); i > 0; i--)
{
temp = BAA1.Get(i);
temp2 = BAA2.Get(i);
BAA1.Set(i, temp2);
BAA2.Set(i, temp);
temp = BAB1.Get(i);
temp2 = BAB2.Get(i);
BAB1.Set(i, temp2);
BAB2.Set(i, temp);
}
byte[] tempbytes = new byte[BAA1.Length];
BAA1.CopyTo(tempbytes, 0);
double baa1 = BitConverter.ToDouble(tempbytes, 0);
BAA2.CopyTo(tempbytes, 0);
double baa2 = BitConverter.ToDouble(tempbytes, 0);
这里最好的方法确实取决于双重“意味着”什么以及每个双重代表的基因组部分有多大。通常,最好的方法是将双打视为离散的,并一次跨越整个双打。
所以,如果你的父母是 {0.1 0.2 0.3 0.4 0.5} 和 {0.6 0.7 0.8 0.9 1.0} 那么他们可能会产生(例子):
我认为执行稍微不同的双打交叉可能会更好,例如。如果你有1.0和2.0,为什么不:
混合两个双打的位可能会产生一个与两个父母中的任何一个都不同的孩子双打。