我正在编写一个应用程序,它使用某个位大小的binaryNumber对象和包含这些binaryNumber对象数组的对象。
代码看起来有些正确,但即使我尝试使用甚至1000次迭代的mutate函数,在某些情况下根本没有任何位被翻转....这很奇怪,因为根据正态分布不应该和1位平均值翻转?
我基本上想要做的是,有一段代码可以确定是否基于低概率翻转二进制字符串的单个位(例如,我想要概率为0.001 - 这是1000中的1 - 或 - 0.1%概率)
注意:必须单独检查每个位的概率(每个位应有0.1%的机会被翻转/反转。
现在我的功能如下: 提前谢谢。
void Organism::mutate()
{
// this function forces chance mutation based on a predetermined probability: 0.001 chance, which is 0.1 % = 1 in a thousand
// iterate through the bits, generate a random number between 0-1000 and if it is 1, then perform a mutation/flip.
for (int i = 0; i < chromosomeLength; i++)
for (int k = 0; k < chromosome[0].numBits; k++)
{
srand(time(NULL)); // seed based on time.
//check the probability:
bool doMut = (rand() % 1000) <= 1;
if (doMut == 1) //if the generated number is within probability
{
chromosome[i][k] = !chromosome[i][k];
cout << "A MUTATION OCCURED!!!" << endl;
exit(EXIT_FAILURE);
}
}
}