การสุ่มแบบวงล้อรูเล็ต(roulette wheel selection) (ตอนที่2)

จาก บทความตอนที่ 1 ผมได้กล่าวถึงที่มาที่ไปของคำว่า roulette  ในบทความนี้ผมจะได้กล่าวถึง การสุ่มในคอมพิวเตอร์ ที่ใช้หลักการของ roulette wheel โดยใช้ภาษา java ในการอธิบายครับ

ก่อนอื่นผมขอยกตัวอย่างการสุ่มเลือกข้อมูลแบบธรรมดาก่อน จากตัวอย่างโค๊ดต่อไปนี้ครับ

 //NormalRandom.java

 int[] data = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
 int randomIndex ;
 for (int i = 0; i < 100; i++) {
    //สุ่มตำแหน่งข้อมูล
    randomIndex = (int) Math.floor( Math.random() * data.length);
    //พิมพ์ผลลัพธ์โดยกำหนดความกว้างขนาด 4 ตัวอักษรในแต่ละตัว
    System.out.printf("%4d", data[randomIndex]);
    if ((i + 1) % 10 == 0)
      System.out.println();

 }

บรรทัดที่ห้า เป็นการสุ่มโดยใช้เมธอด random( )  จากคลาส java.lang.Math  จะได้ค่าเป็นจำนวนจริงอยู่ระหว่าง 0 – 1  จากนั้นนำไปคูณกับขนาดของ array (data.length)  ได้ผลลัพธ์ เป็นจำนวนจริง อยู่ระหว่าง 0-10    แล้วส่งต่อให้เมธอด Math.floor ที่รีเทิร์นค่าเป็นจำนวนเต็ม ที่ต่ำที่สุด(ตัดเศษทศนิยมออก)ครับ ในที่นี้ผมแปลงผลลัพธ์ที่ได้เป็น integer เพื่อนำไปใช้เป็น index ในการเลือกครับ ผลลัพธ์สุดท้ายที่ตัวแปร randomIndex เก็บค่าจะเป็นจำนวนเต็มมีค่า ตั้งแต่ 0-9 ซึ่งก็คือตำแหน่งของข้อมูลในอาเรย์นั่นเอง

 

เมื่อรันโปรแกรมนี้ ผลลัพธ์ที่ได้จะมีลักษณะดังนี้ครับ

Random1

ตามทฤษฏีแล้ว โอกาสที่ แต่ละตำแหน่งจะถูกสุ่มเจอ จะมีโอกาสเท่าๆ กันครับ

หากเราคิดค่าความน่าจะเป็นออกมาแต่ละช่องจะมีโอกาสถูกเลือกเท่าเป็น

p  =  1/n  = 1/10 = 0.1  หรือ 10% ครับ

นั่นคือเราให้ความสำคัญในการสุ่มของแต่ละช่องมีค่าเท่ากัน โอกาสที่ข้อมูลแต่ละตัวจะถูกสุ่มเจอมีความยุติธรรม ผมขอเรียกว่าเป็นการสุ่มแบบ   fair random นะครับ

ส่วนการสุ่มแบบ rulette wheel จะเป็นลักษณะการสุ่มแบบ unfair random ครับ  ผมขอยกตัวอย่างโดยใช้แผนภูมิแบบ pie chart เพื่อใช้ในการอธิบายดังนี้ครับ

fair_prob_pieunfair_prob_pie

แผนภูมิด้านซ้ายมือ เป็นการสุ่มแบบ fair random ส่วนด้านซ้ายเป็นการสุ่มแบบ unfair random ซึ่งโอกาสที่จะเกิดขึ้นไม่เท่ากันครับ ขึ้นอยู่กับว่าเราให้น้ำหนักที่ข้อมูลตัวไหนมากกว่ากัน

การสุ่มแบบ roulette wheel จะเป็นแบบรูปที่สองครับ

สำหรับวิธีการสุ่มแบบ Roulette wheel จะมีศัพท์แสงเข้ามาเกี่ยวข้องอีกคำหนึ่งครับ นั่นคือคำ ว่า fitness  ซึ่งในที่นี้ก็คือความน่าจะเป็นที่มีโอกาสในการสุ่มนั่นเอง โดยข้อมูลที่มีความสำคัญมากเราจะให้ค่า fitness มาก ข้อมูลที่มีความสำคัญน้อย ก็จะมี fitness น้อยตามลำดับครับ

 

 

 

 

 

 

 

Advertisements

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

Up ↑

%d bloggers like this: