# อัลกอริทึมเชิงพันธุกรรม ## [แบบทดสอบก่อนเรียน](https://ff-quizzes.netlify.app/en/ai/quiz/41) **อัลกอริทึมเชิงพันธุกรรม** (Genetic Algorithms หรือ GA) มีพื้นฐานมาจาก **แนวทางวิวัฒนาการ** ใน AI ซึ่งใช้วิธีการวิวัฒนาการของประชากรเพื่อหาคำตอบที่เหมาะสมที่สุดสำหรับปัญหาที่กำหนดไว้ อัลกอริทึมนี้ถูกเสนอขึ้นในปี 1975 โดย [John Henry Holland](https://wikipedia.org/wiki/John_Henry_Holland) อัลกอริทึมเชิงพันธุกรรมมีแนวคิดดังนี้: * คำตอบที่ถูกต้องสำหรับปัญหาสามารถแสดงเป็น **ยีน** * **Crossover** ช่วยให้เราสามารถรวมคำตอบสองคำตอบเข้าด้วยกันเพื่อสร้างคำตอบใหม่ที่ถูกต้อง * **Selection** ใช้เพื่อเลือกคำตอบที่เหมาะสมมากขึ้นโดยใช้ **ฟังก์ชันความเหมาะสม** (fitness function) * **Mutation** ถูกนำมาใช้เพื่อทำให้การปรับแต่งไม่เสถียรและช่วยให้หลุดออกจากค่าต่ำสุดในพื้นที่เฉพาะ หากคุณต้องการสร้างอัลกอริทึมเชิงพันธุกรรม คุณต้องมีสิ่งต่อไปนี้: * หาวิธีการเข้ารหัสคำตอบของปัญหาโดยใช้ **ยีน** g∈Γ * ในเซตของยีน Γ คุณต้องกำหนด **ฟังก์ชันความเหมาะสม** fit: Γ→**R** โดยค่าฟังก์ชันที่น้อยกว่าจะหมายถึงคำตอบที่ดีกว่า * กำหนดกลไก **Crossover** เพื่อรวมยีนสองตัวเข้าด้วยกันเพื่อสร้างคำตอบใหม่ crossover: Γ2→Γ * กำหนดกลไก **Mutation** mutate: Γ→Γ ในหลายกรณี กลไก crossover และ mutation เป็นอัลกอริทึมที่ค่อนข้างง่ายในการจัดการยีนที่เป็นลำดับตัวเลขหรือเวกเตอร์บิต การนำอัลกอริทึมเชิงพันธุกรรมไปใช้จริงอาจแตกต่างกันไปในแต่ละกรณี แต่โครงสร้างโดยรวมมีดังนี้: 1. เลือกประชากรเริ่มต้น G⊂Γ 2. เลือกแบบสุ่มหนึ่งในกระบวนการที่จะดำเนินการในขั้นตอนนี้: crossover หรือ mutation 3. **Crossover**: * เลือกยีนสองตัวแบบสุ่ม g1, g2 ∈ G * คำนวณ crossover g=crossover(g1,g2) * หาก fit(g)1) หรือ fit(g)2) - แทนที่ยีนที่เกี่ยวข้องในประชากรด้วย g 4. **Mutation** - เลือกยีนแบบสุ่ม g∈G และแทนที่ด้วย mutate(g) 5. ทำซ้ำตั้งแต่ขั้นตอนที่ 2 จนกว่าจะได้ค่าของ fit ที่เล็กพอ หรือจนกว่าจะถึงขีดจำกัดของจำนวนขั้นตอน ## งานที่พบบ่อย งานที่มักแก้ไขด้วยอัลกอริทึมเชิงพันธุกรรม ได้แก่: 1. การปรับตารางเวลาให้เหมาะสม 1. การจัดวางสิ่งของให้เหมาะสมที่สุด 1. การตัดวัสดุให้เหมาะสมที่สุด 1. การเร่งการค้นหาแบบครบถ้วน ## ✍️ แบบฝึกหัด: อัลกอริทึมเชิงพันธุกรรม เรียนรู้เพิ่มเติมในโน้ตบุ๊กต่อไปนี้: ไปที่ [โน้ตบุ๊กนี้](Genetic.ipynb) เพื่อดูตัวอย่างสองตัวอย่างของการใช้อัลกอริทึมเชิงพันธุกรรม: 1. การแบ่งสมบัติอย่างยุติธรรม 1. ปัญหา 8 Queens ## สรุป อัลกอริทึมเชิงพันธุกรรมถูกใช้ในการแก้ปัญหาหลายประเภท รวมถึงปัญหาด้านโลจิสติกส์และการค้นหา สาขานี้ได้รับแรงบันดาลใจจากการวิจัยที่ผสมผสานหัวข้อในจิตวิทยาและวิทยาการคอมพิวเตอร์ ## 🚀 ความท้าทาย "อัลกอริทึมเชิงพันธุกรรมง่ายต่อการนำไปใช้ แต่พฤติกรรมของมันยากที่จะเข้าใจ" [source](https://wikipedia.org/wiki/Genetic_algorithm) ลองค้นคว้าเพื่อหาอัลกอริทึมเชิงพันธุกรรมที่ใช้แก้ปัญหา เช่น การแก้ปริศนา Sudoku และอธิบายวิธีการทำงานของมันในรูปแบบร่างหรือแผนภาพการไหล ## [แบบทดสอบหลังเรียน](https://ff-quizzes.netlify.app/en/ai/quiz/42) ## ทบทวนและศึกษาด้วยตัวเอง ดู [วิดีโอที่ยอดเยี่ยมนี้](https://www.youtube.com/watch?v=qv6UVOQ0F44) ที่พูดถึงวิธีที่คอมพิวเตอร์เรียนรู้การเล่นเกม Super Mario โดยใช้เครือข่ายประสาทที่ฝึกด้วยอัลกอริทึมเชิงพันธุกรรม เราจะเรียนรู้เพิ่มเติมเกี่ยวกับการที่คอมพิวเตอร์เรียนรู้การเล่นเกมแบบนี้ [ในส่วนถัดไป](../22-DeepRL/README.md) ## [การบ้าน: สมการไดโอแฟนไทน์](Diophantine.ipynb) เป้าหมายของคุณคือการแก้ **สมการไดโอแฟนไทน์** - สมการที่มีรากเป็นจำนวนเต็ม ตัวอย่างเช่น พิจารณาสมการ a+2b+3c+4d=30 คุณต้องหาค่ารากที่เป็นจำนวนเต็มที่ทำให้สมการนี้เป็นจริง *การบ้านนี้ได้รับแรงบันดาลใจจาก [โพสต์นี้](https://habr.com/post/128704/)* คำแนะนำ: 1. คุณสามารถพิจารณารากให้อยู่ในช่วง [0;30] 1. ใช้รายการค่ารากเป็นยีน ใช้ [Diophantine.ipynb](Diophantine.ipynb) เป็นจุดเริ่มต้น ---