(English) PHP Weighted Random by

31
May
0

ข้อมูลบางค่าที่จะนำมาตัดสินเรื่องต่างๆ ในเกมส์ หลายครั้งที่หนีไม่พ้นการสุ่ม หรือ Random
และโลกนี้ไม่ยุติธรรมเสมอไป จึงจำเป็นต้องมีการใช้การสุ่มแบบถ่วงน้ำหนัก หรือ weighted random
โดยส่วนใหญ่ทาง Server จะต้องเป็นผู้ตัดสินเรื่องนี้ จึงแสดงตัวอย่างวิธีการสร้างการสุ่มประเภทนี้ด้วยภาษา PHP
เริ่มด้วยการสร้าง Weighted Array ของตัวแปลขึ้นมาก่อน โดยให้ key เป็นผล value เป็นน้ำหนัก
$weight = array(
'a'=>1,
'b'=>3,
'c'=>5,
'd'=>7);

เนื่องจาก function ที่เราจะใช้สุ่มตัวเลขออกมาคือ rand ซึ่งจะให้ค่าเป็น int เท่านั้น หากมีค่าใดในน้ำหนักเป็นทศนิยม
ให้ทำการคุณทั้งหมดเพื่อเลื่อนทศนิยมทิ้งไปให้หมดก่อน ตัวอย่างเช่น ‘a’=>1.5, ‘b’=> 2 ให้คุณออกมาเป็น ‘a’=>15, ‘b’=>20 เสียก่อน
ต่อไปก็จะเป็นการสุ่มผลดังนี้
$roll = rand(1,array_sum($weight);
จากนั้นทำการหาผลของการสุ่มโดยไล่วัดตาม array
foreach($weight as $key=>$value){
if($roll > $value){
$roll = $roll - $value;
}else{
return $key;
}}

ซึ่งสามารถนำคำสั่งเหล่านี้ไปสร้างเป็น function ที่รับเพียง weight array ที่แตกต่างกันเพียงอย่างเดียวก็ได้

Enjoy this article?

Consider subscribing to our RSS feed!

ไม่มีความเห็น

ยังไม่มีความเห็น

ใส่ความเห็น

RSS feed for comments on this post

 เราชนะรอบ 4 | ยืมเงิน 3000 ด่วน | แอพกู้เงิน | แอพเงินด่วน | สินเชื่อออนไลน์อนุมัติทันที | Site Map | กู้เงินก้อน | กระเป๋าตัง | thisshop และ ยืมเงินฉุกเฉิน 5000 ด่วน