การสุ่มแบบวงล้อรูเล็ต(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 ซึ่งก็คือตำแหน่งของข้อมูลในอาเรย์นั่นเอง

 

Read more

Advertisements

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

การสุ่มแบบวงล้อรูเล็ต เป็นกระบวนการสุ่มจากกลุ่มคำตอบที่มี โดยใช้การถ่วงน้ำหนัก(weight) มาเป็นนัยยะ  โดยคำตอบที่มีค่าน้ำหนักสูงสุด(เป็นคำตอบเริ่มต้นที่ดีที่สุด) มีโอกาสที่จะถูกเลือกมากที่สุด (มีความน่าจะเป็นสูงสุดที่จะถูกสุ่มเจอ) และคำตอบที่มีค่าน้ำหนักต่ำสุด มีโอกาสถูกเลือกน้อยสุด(ความน่าจะเป็นต่ำสุดที่จะถูกสุ่มเจอ)

แนวคิดนี้เป็นการจำลองการพนันชนิดหนึ่งในคาสิโน รูเล็ต หรือ วงล้อรูเล็ต ซึ่งเกมจะมีลักษณะเป็นจานวงกลมหมุน ผู้เล่นจะทำการลงเดิมพันในจานกลม โดยเลือกเลขเฉพาะ(1,2,3,4..)  สี (ดำ,แดง)   หรืออื่นๆ แล้วแต่คาสิโนเป็นผู้กำหนด  การสุ่มจะทำโดยการเหวี่ยงลูกบอลทรงกลมให้หมุนไปในรางเมื่อลูกบอลตกจากรางลงไปในจานช่องใด การสุ่มจะสิ้นสุด ถ้าตกลงที่ช่องที่ผู้เล่นเลือก ก็ถือว่าผู้เล่นชนะ และได้เงินจากการเดิมพัน ถ้าตกที่อื่นถือว่าเจ้ามือชนะและริบเงินจากผู้เล่น

 

ขอบคุณภาพ roulette wheel จาก wikipedia

Read more

การสร้าง user ใหม่ให้กับ cygwin

โดยปกติเมื่อเราทำการติดตั้ง cygwin เรียบร้อย เมื่อเปิด cygwin terminal ขึ้นมาจะพบว่าชื่อผู้ใช้เป็นชื่อเดียวกันกับ user ที่ล็อกอินเข้าสู่หน้าจอ window นั่นเอง ซึ่งถ้าเราต้องการเพิ่มผู้ใช้ใหม่ ให้กับ cygwin เราจะต้องทำการเพิ่มผู้ใช้ใหม่ใน windows ด้วยครับ จากนั้นเราค่อยมาแมปให้เข้ากับระบบ cygwin

ในที่นี้ผมสรุปขั้นตอนในการสร้าง user ไว้คร่าวๆ ดังนี้ครับ

  1. สร้างชื่อผู้ใช้งานใหม่ในระบบ windows -> control panel -> Add or remove user accounts (ในที่นี้ผมจะใช้ชื่อว่า soowoi นะครับ)
  2. เปิด cygwin terminal ขึ้นมา จากนั้นพิมพ์คำสั่งต่อไปนี้
    mkpasswd -l -u soowoi >> /etc/passwd
  3. สร้าง home directory สำหรับผู้ใช้
    mkdir  -p /home/soowoi
  4. เปลี่ยน owner ให้กับ home directory สำหรับผู้ใช้ใหม่
    chown -R soowoi  /home/soowoi
  5. ทดสอบ ssh เครื่องตัวเอง โดยใช้ชื่อผู้ใช้เดิม (อ่านบทความติดตั้ง ssh server เพิ่มเติม )
    ssh  soowoi@localhost

ถ้า login ในข้อที่ 5 ผ่านก็แสดงว่า user ดังกล่าวใช้งานได้เป็นปกติครับ

การติดตั้ง Secure Shell Server เป็น windows service(windows 7) บน Cygwin

ก่อนที่จะติดตั้ง secure shell server (sshd) เป็น windows service ได้นั้น จะต้องติดตั้ง package ต่อไปนี้บน cygwin  เสียก่อน

  • cygrunsrv
  • openssh

เมื่อติดตั้งเสร็จเรียบร้อยแล้ว ให้รันคำสั่งต่อไปนี้บน cyg terminal

ssh-host-config  -y

โปรแกรมจะแสดงข้อมูลในการคอนฟิก sshd ดังรูป

Untitled

Read more

การติดตั้ง apt-cyg เป็น package manager สำหรับ cygwin

เปิด cygwin terminal ขึ้นมา พิมพ์คำสั่งต่อนี้ลงไปใน terminal

wget raw.github.com/transcode-open/apt-cyg/master/apt-cyg
chmod +x apt-cyg
mv apt-cyg /usr/local/bin

สำหรับผู้ที่ไม่มี wget ให้ติดตั้งผ่านโปรแกรมติดตั้งของ cygwin (setup-x86.exe ) โดยที่หน้าจอ select package ให้ search คำว่า wget คลิ๊กที่ -> Web จากนั้นคลิ๊กกากบาทที่คอลัมน์ bin จากนั้นคลิ๊ก Next ไปเรื่อย ๆ จะเป็นการติดตั้งคำสั่ง wget จากนั้นค่อยพิมพ์คำสั่งด้านบน

Read more