[英]How can I guarantee pick a weighted element?
有人可以幫我嗎,我正在嘗試制作一個簡單的 javascript 游戲,讓用戶根據其重量選擇一個隨機元素。 問題是,我很難獲得數組中權重最低的元素,所以,我意識到為什么不進行最大數量的選擇,然后達到最大數量,您將保證獲得最低權重元素。 (我很抱歉我的英語,因為它不是我的第一語言)。 我也是 javascript 的初學者。 >///<
這是代碼:
var firstPrize =
[
"200k Yen Cash",
"High End Computer Set"
]; //first prize with 0.5% chance of getting picked
var secondPrize =
[
"Xbox",
"PS5",
"Nintendo Switch"
]; //second prize with 25.3% chance of getting picked
var thirdPrize =
[
"10k Yen Cash",
"10k Yen Amazon Voucher",
"Airpods",
"Customized Keyboard",
"1-Yr Nitro Boost",
"Shoes"
]; //third prize with 74.2% chance of getting picked
var randFirstPrize = firstPrize[Math.floor(Math.random() * firstPrize.length)]; // random pick
var randSecondPrize = secondPrize[Math.floor(Math.random() * secondPrize.length)]; // random pick
var randThirdPrize = thirdPrize[Math.floor(Math.random() * thirdPrize.length)]; // random pick
const prizes =
[
randFirstPrize,
randSecondPrize,
randThirdPrize
]; // prizes as variables
const weights =
[
0.5,
25.3,
74.2
]; //prize percent chance
function userPrize(prizes, weights) {
var i;
for (i = 0; i < weights.length; i++)
weights[i] += weights[i - 1] || 0;
var random = Math.random() * weights[weights.length - 1];
for (i = 0; i < weights.length; i++)
if (weights[i] > random)
break;
return prizes[i];
}; //pick random weighted elements
console.log(userPrize(prizes, weights));
由於權重高於其他獎項,預計thirdPrize
將主要是三等獎。 所以我的目標是,當玩家達到 150 次選擇/累積時,他將保證選擇firstPrize
。 希望我能很好地解釋我的問題。
我假設您發布的代碼當前按預期工作,並且您想添加 function “當玩家達到 150 次選擇/累積時,他將保證選擇 randFirstPrize”。
為此,您將需要一個變量來跟蹤他們選擇了多少次:
let pickTimes = 0;
每次用戶選擇時,您都需要添加它:
// ...
pickTimes++;
return prizes[i];
現在,顯然您可以在每次選擇隨機獎品時檢查pickTimes
變量。 這取決於您如何處理它,但這是一個建議:
var random = Math.random() * weights[weights.length - 1];
if (pickTimes == 150) {
random = 100; // So your weight for first prize always meets the first prize condition
pickTimes = 0; // You may want to reset the pick times so 150 times later users can still get guaranteed first prize.
}
ps經過更徹底的閱讀,我不明白你的取重代碼。 我可能錯了,但是如果出現問題,您應該在修復代碼后從我上面解釋的邏輯中了解如何應用它的原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.