在我看来,使用随机数选择parents
之类的gambling roulette
可能是可行的。让我用find the max value of function
中的示例进行说明。示例如下所示:
n
随机individual
并计算了它们的function value
。我们命名了单个'j'Xj
,其函数值名称为f(Xj)
。然后找到并命名最大函数值maxValue
。fitness of individual j
是f(Xj)/maxValue
。我们可以将其命名为g(Xj)
。然后,我们将计算个人的所有适应度。parents
。(我们放弃适合度值小于0的个人)。一种分类方式是gambling roulette
。选择{{1}的机会},而Xj
是Xk
。我的想法是
g(Xj)*g(Xk)/[g(X1)+g(X2)+...+g(Xn)]^2
和Xj
Xk
。rn
小于rn
和g(Xj)
(g(Xk)
和fitness
的{{1}}),则他们能够进行复制。然后进行交叉和变异。Xj
。选择Xk
和1-3
的机会为Xj
,与Xk
相似。考虑两个机会的两个分母都是常数,它们在某种方式。
g(Xj)*g(Xk)/n^2
我在Java代码中以此方式进行测试。函数为gambling roulette
。我生成了100代,而一代中的个体数为1000。
其结果是正确的。
在某个执行中,在第100代中,我发现最佳个体是 double randomNumToJudge=Math.random();//generate a random number to judge with the fitness
int randomMother=(int)(Math.random()*1000);
int randomFather=(int)(Math.random()*1000);//random generate parents
if((randomNumToJudge<=individualArray[generation][randomFather].fitnessValue)
&&(randomNumToJudge<=individualArray[generation][randomMother].fitnessValue))
//if the number is less than both fitness of parents,they are permited to reproduce.
{
Individual childIndividual=individualArray[generation][randomFather].crossOverAndMutate(individualArray[generation][randomFather], individualArray[generation][randomMother]);
//Crossover and mutate and generate child individual
individualArray[generation+1][counter]=childIndividual;//add childIndividual to tha Array.
counter++;//the count of individual number in child generation
}
,最佳函数值是x + 10sin(5x) + 7cos(4x), x∈[0,10)
。
我已经测试了10次,每个结果在第100代中都精确到小数点后10位。
这种方法可行吗?其他人是否已经考虑过这种方法?
任何评论都值得赞赏^ @ ^
PS:请原谅我可怜的英语-_-
答案 0 :(得分:1)
请注意,我已经编辑了此答案。
从第2点开始,我假设您的目标适应度为1。您的算法可能永远不会完全收敛(找到局部最小值)。这是因为即使您的健康状况也不会改变随机值范围(0〜> 1)。
请注意,这并不意味着不会创造出更好的适应性;他们会。但是,由于您正在检查健身状况(随机0〜> 1),因此创建更好健身状况的速度将急剧下降。
请考虑以下示例,其中所有适应性都已达到很高:
[0.95555, 0.98888, 0.92345, 0.92366]
在这里,所有值都很可能满足randomNumToJudge<=fitness
。这意味着任何个值均可能被选择为父级。您不希望这样-您希望最佳值被选择的可能性更高。
如果您将randomNumToJudge
设置为具有一定范围(人口中位数适中性〜> 1),则可以对算法进行修正以使其收敛,尽管这仍然不是最佳选择。
替代方法
我建议实现经典的roulette wheel方法。
轮盘赌法根据每个人的“适合度”为他们分配被选为父母的概率。本质上,适应度越高,个人将占据的车轮部分越大,随机数选择车轮上此位置的机会就越大。