在遗传算法中,对于非排序群体,应该如何组织轮盘选择
How should roulette wheel selection be organized for non-sorted population in genetic algorithm?
我的问题与此有关:遗传算法中的轮盘选择。人口需要先分类吗?如果我们不对人口进行排序,那么组织轮盘赌选择的方法是什么?当然,我们现在必须以线性方式搜索。在这种情况下,您是否在 C++ 或 Java 中有任何代码片段?
种群根本不
需要排序 - 轮盘赌选择的关键是给定个体被选中进行繁殖的概率与其适应性成正比。
假设您有一个未分类的人口,其健康状况如下:
[12, 45, 76, 32, 54, 21]
要执行轮盘赌选择,您只需选择 0 到 240(总体适应度之和(范围内的随机数。然后,从列表中的第一个元素开始,减去每个人的适应度,直到随机数小于或等于零。因此,在上述情况下,如果我们随机选择 112,我们将执行以下操作:
Step 1: 112 - 12 = 100. This is > 0, so continue.
Step 2: 100 - 45 = 55. This is > 0, so continue.
Step 3: 55 - 76 = -21. This is <= 0, so stop.
因此,我们选择单个#3进行繁殖。请注意,这根本不需要对总体进行排序。
因此,在伪代码中,它归结为:
let s = sum of population fitness
let r = random number in range [0, s].
let i = 0.
while r > 0 do:
r = r - fitness of individual #i
increment i
select individual #i - 1 for reproduction.
请注意,最后一行中的- 1
是抵消在循环的最后一次迭代中完成的increment i
(因为即使我们找到了我们想要的个人,它无论如何都会递增(。
相关文章:
- 如何使用默认参数等选择模板专业化
- 如何(从固定列表中)选择一个数字序列,该序列将与目标数字相加
- 选择要调用的构造函数
- C++选择排序算法中的逻辑错误
- QTreeView幻灯片多选后无法使用单击选择
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 无法获取菜单选择以运行函数.C++
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- Python中的for循环与C++有何不同
- 在C++中,如何通过几种类型从元组中选择多个元素
- 讨论 - 创建矩阵时的数组与向量的向量 - 什么是最实用的选择
- 对可变参数使用声明.如何选择正确的功能
- 选择选举获胜者的程序
- 如何选择在 csv 文件中输出的位置
- 根据用户回答声明"Players"。用户选择玩家数量。播放器是结构体
- 程序在尝试猜测它选择的随机数时进入无限循环?
- 选择和修改嵌套向量中的条目的最佳实践
- 在PostgreSQL中根据它们的ID选择大量行的最快方法是什么?
- 在遗传算法中,对于非排序群体,应该如何组织轮盘选择
- 组织一个C++游戏的最佳方式是什么?该游戏涉及用户在路径之间进行选择,以便在旅程中前进