根据概率做某事

时间:2013-09-20 22:18:54

标签: c++ random numbers probability genetic-algorithm

我正在编写一个应用程序,它使用某个位大小的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);
            }

        }


}

0 个答案:

没有答案