- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我一直在研究一种算法,我需要从大小为 k 的种群中选择 n 个个体,其中 k 远大于 n。所有个体都有适应度值,因此选择应该有利于更高的适应度值。但是,我不想简单地选择最好的n个人,最差的也应该有机会。 (自然选择)
因此,我决定找出种群中的最小和最大适应度值。所以,任何人都会有
p =(当前 - 最小值)/(最大 - 最小值)
被选中的概率,但我不能只是遍历所有的人,掷骰子并在概率成立时选择一个,因为那样我最终会得到超过 n 个人。我可以打乱列表并从前面开始迭代,直到我获得最多 n 个个体,但这可能会错过列表末尾的优秀个体。
我也可以执行不止一次通过,直到剩余种群规模达到 n。但这可能会更倾向于更好的选择,并收敛到我提到的朴素选择方法。
对这样的选择过程有什么建议或引用吗?如果您可以引用,我可以阅读一些相关的统计方法。
谢谢。
最佳答案
使用Roulette-wheel selection .基本思想是根据概率大小分配轮盘赌的区域:
然后您只需旋转它 n
次即可选择您想要的人。
ruby 中的示例实现:
def roulette(population, n)
probs = population.map { |gene| gene.probability } # TODO: Implement this
selected = []
n.times do
r, inc = rand * probs.max, 0 # pick a random number and select the individual
# corresponding to that roulette-wheel area
population.each_index do |i|
if r < (inc += probs[i])
selected << population[i]
# make selection not pick sample twice
population.delete_at i
probs.delete_at i
break
end
end
end
return selected
end
注意:如果您是 Ruby 黑客,您会发现代码可以更短,但我希望算法尽可能清晰。
关于algorithm - 通过适应度函数从种群中选择个体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5243688/
我有这个 Mongoose 模式 var ItemSchema = new Schema({ "name":String, "review": [{ type: Schema.Type
我有一个引用其他文档的模型。我希望该模型中有一种方法可以处理引用模型中使用的数据。 'use strict'; var mongoose = require('mongoose') , Schem
在 Node.js/Mongoose/Mongo 上是 SomeModel.findOne({_id: id}, callback).populate('ref') 相当于 SomeModel.fin
我是开发新手。我正在尝试绘制一个包含 2 个单元格的行,每个单元格都包含一个类别 我得到的结果很明显,两个单元格中的类别相同。我有大约 20 个类别,
我是一名优秀的程序员,十分优秀!