wxPython

Genetic Algorithm for Traveling Salesman Problem

กำลังศึกษาขั้นตอนการทำงานของ Genetic Algorithm ว่ามีขึ้นตอนและการทำงานอย่างไรอยู่ในตอนนี้

เลยลองหา Case Study มาศึกษาเพื่อให้เข้าใจ และเห็นการทำงานของ GA ได้ดียิ่งขึ้น สำหรับกรณีศึกษาที่ง่ายที่สุดเท่าที่จะนึกออกสำหรับปัญหาประเภท Combinatorial Optimization Problem ก็คงหนีไม่พ้น Traveling Salesman Problem (TSP)

ทดลองเขียนโปรแกรมเล็กขึ้นมา เพื่อทดลองและศึกษาขึ้นตอนการทำงานของ GA ก่อนสำหรับรายละเอียดของการทดลงคงมีดังนี้
ี้

1. Chromosome Encoding ใช้แบบ Permutation Encoding

2. Selection ใช้แบบ Tournament คือสุ่ม Chromosome ขึ้นมา 10 ตัวเลือกเอา 2 ตัวที่ดีที่สุดมาดำเนินการต่อไป

3. Crossover ใช้การ Crossover ในแบบที่กระทำกับข้อมูลที่อยู่ในรูปแบบ Permutation Encoding

4. Population Size ตั้งขนาดไว้ที่ 50 ประชากรต่อรุ่น

5. Stop Condition เมื่อค่าคำตอบที่เป็นค่าที่ดีที่สุดของแต่ละรุ่นไม่มีการเปลี่ยนแปลง (มีลักษณะเร่ิมลู่เข้าสู่คำตอบ) ติดต่อกัน 100 Generations

6. การสร้างเมืองใช้การสุ่มจุดขึ้นตามจำนวนเมืองที่เป็น Input ของโปรแกรม และจุดตั้งต้นสำหรับการเดินทางจะเร่ิมจากจุดที่ 1 เสนอ การเดินทางจะคิดขาไปอย่างเดียว ดั้งนั้นเส้นทางจะไม่เป็นวงรอบ

7. พัฒนาด้วย Python 2.4

8. ต้องการ Module wxPython, Numeric














Source Code : Genetic Algorithm for TSP

Python : การสร้าง menu แบบง่ายๆ และง่ายๆ มากๆ

รู้สึกประทับใจมากๆ ในเรื่องของการสร้างเมนูของภาษา Python ว่ามันทำได้ง่ายมากและค่อนข้างจะทำงานได้ดีมากๆ เลย (อ้อ....อันนี้ใช้ GUI Framework เป็น wxPython นะ)

#Define Key ID
ABOUT_ID = 1001
EXIT_ID = 1002
        .
        menu = wx.Menu()
        menu.Append(ABOUT_ID,"&About\tCTRL-A", "Hello Show About me")
        menu.Append(EXIT_ID,"&Quit\tCTRL-Q", "Press to exit Program")
        .
เพียงเท่านี้เราก็จะได้เมนูที่พร้อมจะทำงานได้แล้ว ไม่ว่าจะเป็น platform ใดๆ ที่ทดลองทดสอบดูก็จะเป็น Mac OS X กับ Linux

ความหมายของ Code คือ

"&About\tCTRL-A" คือ เราสามารถเรียกใช้เมนู About ได้เลยโดยการใช้ hot key คือสามารถกด Command A ได้เลยถ้าอยูใน Mac OS X หรือ สามารถกด ctrl-A ได้เลยถ้าอยู่ใน linux

"Hello Show About me" มีไว้เพื่อที่ว่าถ้าหากเรานำเมาส์ไปวางบนเมนูไอเท็มนั้น ข้อความที่กำหนดนี้จะไปปรากฏบน Status Bar ถ้าหากว่าสร้าง status bar ไว้

กำหนดค่าแค่นี้ง่ายๆ ไม่ต้องไปเสียเวลากำหนด Action อะไรให้มันวุ่นวายเข้าตัว Python มันก็จัดการให้เรียบร้อยเลย

Python : About Dialog Prototype

สำหรับการสร้าง GUI ในภาษา Python ต้องยอมรับว่าตอนนี้ยังไม่ค่อยมีความเข้าในในเรื่องการทำงาน หรือการจัดการ Layout ของมันมากนัก แต่ยังไงก็ต้องพยายามหาวิธีที่จะศึกษาให้รวดเร็วที่สุดเนื่องจากจะต้องรีบนำไปใช้งานแล้ว

ดังนั้นเพื่อให้สามารถที่จะสามารถนำ Python ไปใช้ปฏิบัติงานจริงได้อย่างรวดเร็วนั้นคงต้องยึดคติที่ว่า "เราคงไม่ต้องเข้าใจไปหมดทุกเรื่องก็ได้นะ" (คตินี้คิดเองหน่ะ ไม่มีใครสอนมาหรอก) คตินี้คงต้องนำมาใช้ก่อนกับเรื่องการสร้าง GUI ใน Python คิดถึงเมื่อก่อนตอนที่ทำ Java สร้าง Application ก็ยอมรับว่าไม่ค่อยจะรู้เรื่องเกี่ยวกับ Layout หรือพวก Container ของตัว GUI ซักเท่าไหร่หรอก รู้แค่ว่าอยากได้อะไร ก็ใช้ NetBaens ลากวางเอาเลย ตอนหลังเวลาเขียน GUI โดย Java เลยกลายเป็นการเขียนแบบ Visual ไปเลย และมันก็ง่ายจนลืมศึกษาอะไรไปหลายๆ อย่างเลย

ตอนนี้มาหัดทำ Python ยังหาตัวที่ช่วยวาด GUI ที่ใช้งานง่ายๆ ไม่ได้เลย ก็เลยต้องลงมือทำ Code เองเลย ยังดีนะใน Mac OS X 10.4.8 มันมีตัวอย่าง Code Python มาให้ ก็เลยพยายามไล่ๆ Code จากตัวอย่างดูเอา

คงต้องวางแผนไว้ว่า ลอก Code จากตัวอย่างนี่แหล่ะ เอามาแก้ไขให้มันอ่านง่ายๆ และก็ปรับให้มันตรงกับความต้องการแบบกลางๆ ตั้งใจว่าจะทำเป็น Prototype และว่าจะ Code Libray ของตัวเองเก็บไว้ ถึงเวลาต้องใช้จริงๆ ก็มา copy เอาไปใช้ได้เลย แค่แก้ไขนิดๆ หน่อยก็น่าจะใช้ได้

My first frame in Python

งงกับ Python อยู่หลายวันพยายามจะเขียนอะไรเล่นในรูปแบบของ GUI ก็ลองหาวิธํีสร้าง Frame หรือสร้าง Window ในภาษา Python ว่ามันทำยังไงหว่า

พยายามอ่านข้อมูลจากทาง Internet เพราะว่าตอนนี้ยังไม่ได้ซื่อหนังสือ Python มาอ่านเลยซักเล่มหาในห้องสมุดก็ไม่มีเลย ก็เลยพยายามเริ่มต้นศึกษาด้วยตัวเองไปเรื่อยก่อน รอเก็บตังซื้อหนังสือก่อน

อ่านไปอ่านมา ก็มาถึงบางอ้อว่า เจ้าตัวภาษา Python นี่่ด้วยตัวของมันเองมันไม่สามารถที่จะสร้างหน้าจอแบบ GUI ได้ไม่เหมือนกับภาษา Java ซึ่งมีพวก API มาให้พร้อมเลยกับตัวภาษา

แต่สำหรับเจ้าตัวภาษา Python นั้นมันจะต้องพึ่งพา Framework จากข้างนอกมาช่วย สำหรับ Framework ที่ช่วยสร้างโปรแกรมแบบ GUI นั้นก็มีหลายตัวสำหรับ Python แต่ตอนนี้ติดสินใจเลือก wxPython

ที่ตัดสินใจเลือก wxPython เพราะเหตุผลง่ายๆ เลยคือใน Mac OS X 10.4.8 ถ้าลง Developer tool และมันก็จะติดตั้ง wxPhython มาให้เลย และที่สำคัญอีกประการหนึ่งคือ มันรองรับได้ Mutiplatform

ความจริงก็ยังไม่ค่อยเข้าในเรื่องการสร้าง GUI ของ Python มากนักยังหาเอกสารที่พอจะยึดไว้อ้างอิงไม่ค่อยได้เลย ก็เลย copy source code ชาวบ้านมาแก้ไล่ๆ แล้วลองแก้ดูให้พออ่านเองเข้าใจได้ ตั้งใจว่าจะใช้เป็น Prototype เผื่อว่าต้องการจะสร้าง Frame อะไรก็จะได้เอามาใช้ได้เลย
Syndicate content