public override void Crossover(IChromosome pair)
{
BinaryChromosome p = (BinaryChromosome)pair;
// check for correct pair
if ((p != null) && (p.length == length))
{
int crossOverPoint = 63 - Generator.Random.Next(length - 1);
ulong mask1 = 0xFFFFFFFFFFFFFFFF >> crossOverPoint;
ulong mask2 = ~mask1;
ulong v1 = val;
ulong v2 = p.val;
// calculate new values
val = (v1 & mask1) | (v2 & mask2);
p.val = (v2 & mask1) | (v1 & mask2);
}
}
}