在我的python程序中,我有三个变量a
,b
和c
。它们都是浮动的,可能是正面的或负面的,没有上下限。负重随机选择
我如何去制定一个函数,这些变量作为权数,并随机选择一个相应的动作(A
,B
& C
)?
例:
a = 10
b = -2
c = 7
的功能应该执行A
大部分时间,C
一些时间和B
最少的方式。
我在这个网站上找到的'加权随机函数'不处理负权重。
在我的python程序中,我有三个变量a
,b
和c
。它们都是浮动的,可能是正面的或负面的,没有上下限。负重随机选择
我如何去制定一个函数,这些变量作为权数,并随机选择一个相应的动作(A
,B
& C
)?
例:
a = 10
b = -2
c = 7
的功能应该执行A
大部分时间,C
一些时间和B
最少的方式。
我在这个网站上找到的'加权随机函数'不处理负权重。
weights = [10, -2, 7]
offset = min(weights)
positiveweights = [z - offset + 1 for z in weights]
现在您可以使用任何需要正权重的加权随机函数。
您可以将负数转换为数字。到[0; 1]段中的数字。这样
def chance(a):
if a>0:
return a
else:
return 1/abs(a)
,你也应该在0
-1将被视为100%。另外-2和+0.5最终会有相同的机会 – medakk 2014-10-09 11:35:30
那么返回的东西,一个简单的方法是假设你的变量的值来自与mean
等于最大值正态分布(*)和一个任意的标准偏差(例如sd=1
)。
然后,您需要做的仅仅是找到看到诸如-2
一个特定的值,可以通过概率分布函数(PDF )来解决的可能性。然后你可以使用概率作为权重。
这种方法的好处是你也可以有负值。
解决方案:
import scipy.stats
variables = [10, -2, 7]
maximum = max(variables)
probabilities = scipy.stats.norm(maximum, 1).pdf([variables])
结果: 阵列([[3.98942280e-01,2.14638374e-32,4.43184841e-03]])
其余的,就可以弄清楚你自己。
(*)将mean
设置为最大值的原因是为了获得最大的概率(权重)。
我想“任意”(大声笑?真的?)标准差对结果概率有一个*大*的影响,所以你可能:)必须玩直到你对结果满意为止。 'e-32'肯定听起来不对。 – 2014-10-09 13:31:35
什么*是负重量? (在这种情况下)是没有意义的。 – 2014-10-09 07:50:33
-2是负重 – 2014-10-09 07:50:51
@VincentBeltman:不,这是一个*示例*。 – 2014-10-09 07:51:16