【发布时间】:2014-08-12 22:25:28
【问题描述】:
我有一个人口为 X 的 GA。
在我运行基因并得到每个基因的结果后,我对基因进行一些加权乘法(因此排名更好的基因得到的乘法最多)
我得到 x*2 或 x*2+(x*100/10) 基因。这 10% 是随机的新基因,它可能会触发也可能不会触发,具体取决于突变率。
问题是,我不知道将人口再次减少到 X 的最佳方法是什么。
如果基因是一个列表,我应该只使用 list[::2] (或从列表中获取每个偶数索引项)
基因杂交的常见做法是什么?
编辑:
我的 GA 示例,人口为 100;
- 运行适应度函数中的100个基因,得到结果。当前人口:100
- 添加 10% 的新随机基因。当前人口:110
- 复制前 10% 的基因。当前人口:121
- 去除 10% 最差的基因。目前人口:108
- 结合所有可能的基因(无重复)。目前人口:5778
- 从基因库中删除基因,直到人口 = 100。当前人口:100
- 重启适应度函数
我想知道的是:最后一步应该怎么做?目前我有一个包含 5778 个项目的列表,我每 '58' 取一个或表示为 len(list)/startpopulation-1
或者我应该使用带有 random.delete 的 'while True' 直到 len(list) == 100?
新的随机基因应该在交叉之前还是之后添加?
有没有办法对评分从高到低的项目进行高斯乘法?
例如:评分最高的乘以 n,第二好的乘以 (n-1),第三的乘以 (n-2) ...,评分最差的乘以 (n-n)。
【问题讨论】:
-
你能去掉上一次迭代中适应度最低的基因吗?
标签: machine-learning artificial-intelligence genetic-algorithm