我正在做类似于Weighted choice short and simple的事情,但是,我还需要根据情况调整权重。
我尝试做一些简单的算术,即weight *= 2
,但累积总和必须等于1(显然),我不知道如何调整一个重量,并且其他权重也调整了..那里必须是我正在监督的一些简单的解决方案。
方案
mylist = ['a', 'b', 'c', 'd']
myweights = [0.25, 0.25, 0.25, 0.25]
从mylist
中选择一个项目并通过一个功能运行后,我想调整与该项目相关的权重(向上或向下),然后根据调整后的权重选择另一个项目,等等。 / p>
答案 0 :(得分:0)
如何在权重更新后添加此内容:
s = sum(myweights)
myweights = [w/s for w in myweights]
答案 1 :(得分:0)
这是使用numpy
的一种方式,假设您要修复更新并线性分配差异以确保总和(权重)等于1.
import numpy as np
def weight_updater(lst, oldweights, item, new):
newweights = oldweights.copy()
idx = lst.index(item)
newweights += (oldweights[idx] - new)/(len(newweights)-1)
newweights[idx] = new
return newweights
mylist = ['a', 'b', 'c', 'd']
myweights = np.array([0.25, 0.25, 0.25, 0.25])
res = weight_updater(mylist, myweights, 'c', 0.5)
# array([ 0.16666667, 0.16666667, 0.5 , 0.16666667])