|
|
||
|---|---|---|
| .. | ||
| Diophantine.ipynb | ||
| Genetic.ipynb | ||
| README.md | ||
README.md
อัลกอริทึมเชิงพันธุกรรม
แบบทดสอบก่อนเรียน
อัลกอริทึมเชิงพันธุกรรม (Genetic Algorithms หรือ GA) มีพื้นฐานมาจาก แนวทางวิวัฒนาการ ใน AI ซึ่งใช้วิธีการวิวัฒนาการของประชากรเพื่อหาคำตอบที่เหมาะสมที่สุดสำหรับปัญหาที่กำหนดไว้ อัลกอริทึมนี้ถูกเสนอขึ้นในปี 1975 โดย John Henry Holland
อัลกอริทึมเชิงพันธุกรรมมีแนวคิดดังนี้:
- คำตอบที่ถูกต้องสำหรับปัญหาสามารถแสดงเป็น ยีน
- Crossover ช่วยให้เราสามารถรวมคำตอบสองคำตอบเข้าด้วยกันเพื่อสร้างคำตอบใหม่ที่ถูกต้อง
- Selection ใช้เพื่อเลือกคำตอบที่เหมาะสมมากขึ้นโดยใช้ ฟังก์ชันความเหมาะสม (fitness function)
- Mutation ถูกนำมาใช้เพื่อทำให้การปรับแต่งไม่เสถียรและช่วยให้หลุดออกจากค่าต่ำสุดในพื้นที่เฉพาะ
หากคุณต้องการสร้างอัลกอริทึมเชิงพันธุกรรม คุณต้องมีสิ่งต่อไปนี้:
- หาวิธีการเข้ารหัสคำตอบของปัญหาโดยใช้ ยีน g∈Γ
- ในเซตของยีน Γ คุณต้องกำหนด ฟังก์ชันความเหมาะสม fit: Γ→R โดยค่าฟังก์ชันที่น้อยกว่าจะหมายถึงคำตอบที่ดีกว่า
- กำหนดกลไก Crossover เพื่อรวมยีนสองตัวเข้าด้วยกันเพื่อสร้างคำตอบใหม่ crossover: Γ2→Γ
- กำหนดกลไก Mutation mutate: Γ→Γ
ในหลายกรณี กลไก crossover และ mutation เป็นอัลกอริทึมที่ค่อนข้างง่ายในการจัดการยีนที่เป็นลำดับตัวเลขหรือเวกเตอร์บิต
การนำอัลกอริทึมเชิงพันธุกรรมไปใช้จริงอาจแตกต่างกันไปในแต่ละกรณี แต่โครงสร้างโดยรวมมีดังนี้:
- เลือกประชากรเริ่มต้น G⊂Γ
- เลือกแบบสุ่มหนึ่งในกระบวนการที่จะดำเนินการในขั้นตอนนี้: crossover หรือ mutation
- Crossover:
- เลือกยีนสองตัวแบบสุ่ม g1, g2 ∈ G
- คำนวณ crossover g=crossover(g1,g2)
- หาก fit(g)<fit(g1) หรือ fit(g)<fit(g2) - แทนที่ยีนที่เกี่ยวข้องในประชากรด้วย g
- Mutation - เลือกยีนแบบสุ่ม g∈G และแทนที่ด้วย mutate(g)
- ทำซ้ำตั้งแต่ขั้นตอนที่ 2 จนกว่าจะได้ค่าของ fit ที่เล็กพอ หรือจนกว่าจะถึงขีดจำกัดของจำนวนขั้นตอน
งานที่พบบ่อย
งานที่มักแก้ไขด้วยอัลกอริทึมเชิงพันธุกรรม ได้แก่:
- การปรับตารางเวลาให้เหมาะสม
- การจัดวางสิ่งของให้เหมาะสมที่สุด
- การตัดวัสดุให้เหมาะสมที่สุด
- การเร่งการค้นหาแบบครบถ้วน
✍️ แบบฝึกหัด: อัลกอริทึมเชิงพันธุกรรม
เรียนรู้เพิ่มเติมในโน้ตบุ๊กต่อไปนี้:
ไปที่ โน้ตบุ๊กนี้ เพื่อดูตัวอย่างสองตัวอย่างของการใช้อัลกอริทึมเชิงพันธุกรรม:
- การแบ่งสมบัติอย่างยุติธรรม
- ปัญหา 8 Queens
สรุป
อัลกอริทึมเชิงพันธุกรรมถูกใช้ในการแก้ปัญหาหลายประเภท รวมถึงปัญหาด้านโลจิสติกส์และการค้นหา สาขานี้ได้รับแรงบันดาลใจจากการวิจัยที่ผสมผสานหัวข้อในจิตวิทยาและวิทยาการคอมพิวเตอร์
🚀 ความท้าทาย
"อัลกอริทึมเชิงพันธุกรรมง่ายต่อการนำไปใช้ แต่พฤติกรรมของมันยากที่จะเข้าใจ" source ลองค้นคว้าเพื่อหาอัลกอริทึมเชิงพันธุกรรมที่ใช้แก้ปัญหา เช่น การแก้ปริศนา Sudoku และอธิบายวิธีการทำงานของมันในรูปแบบร่างหรือแผนภาพการไหล
แบบทดสอบหลังเรียน
ทบทวนและศึกษาด้วยตัวเอง
ดู วิดีโอที่ยอดเยี่ยมนี้ ที่พูดถึงวิธีที่คอมพิวเตอร์เรียนรู้การเล่นเกม Super Mario โดยใช้เครือข่ายประสาทที่ฝึกด้วยอัลกอริทึมเชิงพันธุกรรม เราจะเรียนรู้เพิ่มเติมเกี่ยวกับการที่คอมพิวเตอร์เรียนรู้การเล่นเกมแบบนี้ ในส่วนถัดไป
การบ้าน: สมการไดโอแฟนไทน์
เป้าหมายของคุณคือการแก้ สมการไดโอแฟนไทน์ - สมการที่มีรากเป็นจำนวนเต็ม ตัวอย่างเช่น พิจารณาสมการ a+2b+3c+4d=30 คุณต้องหาค่ารากที่เป็นจำนวนเต็มที่ทำให้สมการนี้เป็นจริง
การบ้านนี้ได้รับแรงบันดาลใจจาก โพสต์นี้
คำแนะนำ:
- คุณสามารถพิจารณารากให้อยู่ในช่วง [0;30]
- ใช้รายการค่ารากเป็นยีน
ใช้ Diophantine.ipynb เป็นจุดเริ่มต้น