简而言之,我该怎么做:
double
转到位,double
我可以开发轮盘赌选择。我没有看清楚的是如何混合两个双打可能会给我一个“更好”的双倍。这完全是随机的吗?如果我的doubles
和我的“最弱”的“最适合”,它们不会产生中点double
吗?
详细说明: Shortest distance from a point to this curve
编辑1:不会减慢程序太多。
编辑2:我考虑使用byte[]
,但我不知道这是否会违反遗传算法部分。
答案 0 :(得分:1)
这里最好的确实取决于双重“意味着什么”以及每个双重代表的基因组部分有多大。通常情况下,最好的方法就是将双打视为离散的,并且一次跨越整个双打。
所以,如果你的父母是{0.1 0.2 0.3 0.4 0.5}和{0.6 0.7 0.8 0.9 1.0}那么他们可能会产生(例子):
答案 1 :(得分:1)
这对我有用:
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);
答案 2 :(得分:0)
我认为执行稍微不同的双倍交叉可能会更好,例如。如果你有 1.0 和 2.0 ,为什么不:
混合两个双打的比特可以产生一个与父母双方都不同的儿童双倍。