Python - 加权选择+调整权重

时间:2018-03-21 13:44:05

标签: python

我正在做类似于Weighted choice short and simple的事情,但是,我还需要根据情况调整权重。

我尝试做一些简单的算术,即weight *= 2,但累积总和必须等于1(显然),我不知道如何调整一个重量,并且其他权重也调整了..那里必须是我正在监督的一些简单的解决方案。

方案

mylist = ['a', 'b', 'c', 'd']
myweights = [0.25, 0.25, 0.25, 0.25]

mylist中选择一个项目并通过一个功能运行后,我想调整与该项目相关的权重(向上或向下),然后根据调整后的权重选择另一个项目,等等。 / p>

2 个答案:

答案 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])