在我的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