我想找到一个给出排序列表的方法(例如,在python中),选择带有错误epsilon的顶部元素。
一种方法是选择概率p <1的顶部元素,然后选择p'
理想情况下,尽管我希望使用一种方法,该方法考虑到顶部元素的获胜余量并带有一些噪音。即:
给出一个列表[a,b,c,d,e,....],其中a是最大的元素,b是第二大的元素,依此类推,
以概率p <1选取顶部元素,其中p取决于a-b的值,p'取决于b-c的值,依此类推。
答案 0 :(得分:0)
您不能完全做到这一点,因为如果您有 n 个元素,则连续元素之间只会有 n-1 个区别。做类似事情的标准方法是fitness proportionate selection(链接提供了Java和ruby的代码,应该相当容易翻译成其他语言)。
对于该想法的其他变体,请查找选择运算符以查找遗传算法(有多种选择)。
答案 1 :(得分:0)
一种方法是选择元素k
,其概率与exp(-(x[k] - x[0])/T)
成比例,其中x[0]
是最小元素,T
是自由参数,类似于温度。这是通过对热力学的类比得出的,在这种情况下,低能量(小x[k]
状态)的可能性更大,而高能量(大x[k]
)状态的可能性更大,但可能性较小;温度的影响是仅关注最可能的状态(T
接近零)或从所有元素中选择具有几乎相等概率(大T
)。
基于这种类比的模拟退火方法,也许您可以从中得到一些启发。
编辑:请注意,此方法使具有几乎相等值的元素具有几乎相等的概率;根据您的描述,听起来这就是您想要的。
第二编辑:我把它倒退了;我在上面写的内容使较小的值更有可能出现。与exp(-(x[n - 1] - x[k])/T)
成正比的概率,其中x[n - 1]
是最大值,取而代之的是更大的值。