การกำหนดจุดหยุดของอัลกอริทึมพันธุกรรมเอาชนะวัตถุประสงค์ของอัลกอริทึมหรือไม่


11

Wikipedia กำหนดจุดสิ้นสุดของ GA ตาม:

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

ทีนี้ถ้ามันจบลงเมื่อระดับการออกกำลังกายที่น่าพอใจและคุณเป็นผู้กำหนดระดับความฟิตนั้นทำไมคุณจะไม่สามารถสร้างจีโนม "สมบูรณ์แบบ" ตั้งแต่แรกด้วยตัวคุณเองเพราะคุณรู้ลักษณะแล้ว ของจีโนมที่สมบูรณ์แบบนี้หรือไม่?

ฉันคิดว่าฉันสับสนเล็กน้อยที่นี่ ฉันคิดว่าจุดประสงค์ของ GA คือการพัฒนาอย่างต่อเนื่องและแสดงให้เราเห็นว่าอาจเป็นทางออกที่ดีกว่าที่เราคิดไว้และฟังก์ชั่นการออกกำลังกายของเราเป็นเพียงสิ่งที่ช่วยให้มันไปตามทางไม่ใช่สิ่งที่เราวางบนแท่น รัฐที่สมบูรณ์แบบ นั่นไม่ทำลายจุดหรือไม่


1
น่าจะเป็นแบบที่ดีกว่าสำหรับ cstheory
Karl Bielefeldt

ไม่ว่าจะมี :) :)
slandau

1
@Karl: คำถามเป็นบิตอ่อนสำหรับ cstheory มันน่าจะถูกปิดที่นั่น
Robert Harvey

2
ขอบคุณ @Robert ตอนนี้ฉันจำได้ว่าทำไมฉันไม่ไปที่นั่น ฉันเดาว่านี่เป็นหนึ่งในคำถาม "ระหว่างรอยแตก"
Karl Bielefeldt

1
คุณรู้แล้วถึงลักษณะของ "คู่ที่สมบูรณ์แบบ" ของคุณเช่นกัน: พวกเขาจะทำให้คุณมีความสุขอย่างสมบูรณ์! แต่นั่นยังไม่เพียงพอที่จะค้นหาพวกเขา (นับประสาสร้างพวกเขาจากศูนย์ ... ) การทดลองเป็นสิ่งที่จำเป็นเช่นกัน
Kilian Foth

คำตอบ:


17

ฟังก์ชั่นการออกกำลังกายประเมินผลลัพธ์ของอัลกอริทึม เป็นไปได้ทีเดียวที่จะจดจำเอาต์พุตที่ดีที่สุดเมื่อคุณเห็น แต่ไม่ทราบขั้นตอนในการสร้างเอาต์พุตนั้นจากอินพุตใด ๆ นั่นคือสิ่งที่อัลกอริทึมทางพันธุกรรมมีประโยชน์มากที่สุด

ตัวอย่างเช่นแอปพลิเคชั่นสนุก ๆ ทั่วไปของ GA คือการสร้างภาพเคลื่อนไหวที่สามารถเคลื่อนย้ายสิ่งมีชีวิตเสมือนได้อย่างมีประสิทธิภาพ เป็นเรื่องง่ายที่จะบอกได้ว่าสิ่งมีชีวิตเคลื่อนไหวด้วยความเร็วที่แน่นอนในแนวเส้นตรงหรือไม่ นั่นคือฟังก์ชั่นการออกกำลังกายของคุณ เป็นการยากมากที่จะบอกลำดับที่แน่นอนของการเคลื่อนไหว "กล้ามเนื้อ" เพื่อให้มันทำเช่นนั้น


3
ควรสังเกตว่าคุณมักจะหยุดหลังจากรุ่น x เพราะ GA สามารถหมุนไปเรื่อย ๆ เพราะมัน 'ติด' บน minima / maxima ท้องถิ่นซึ่งไม่ตรงกับคะแนนการออกกำลังกายที่ดีที่สุดของคุณ สิ่งนี้อาจเกิดขึ้นได้หากฟังก์ชันการเลือก / ครอสโอเวอร์ / การกลายพันธุ์ของคุณไม่ได้รับการปรับจูนอย่างดีพอสำหรับชุดปัญหา
Steven Evers

@Karl ผมจำได้ว่าวิธีการแก้ปัญหาขั้นตอนวิธีการแอนดรูของ Cooke ทางพันธุกรรมเพื่อการผลิตครั้งแรก Malbolge "Hello World" และหายไปแล้วทางออกที่ดีกว่าส่งไปยังเขาstackoverflow.com/questions/5338627/...
pageman

8

บ่อยครั้งที่คุณสามารถระบุความเหมาะสมของโซลูชัน แต่ไม่สามารถระบุโซลูชันได้โดยตรง สมมติว่าคุณกำลังพยายามพัฒนากระต่ายอย่างรวดเร็วและมียีนจำนวนหนึ่งที่ส่งผลต่อความเร็วของกระต่าย คุณสามารถทดสอบความเร็วของกระต่าย แต่การระบุการรวมกันทั้งหมดของยีนที่เกี่ยวข้องกับความเร็วนั้นจะไม่สามารถทำได้ ในกรณีเช่นนี้คุณอาจมี GA ที่แข่งกับกระต่ายและสายพันธุ์ที่เร็วที่สุด คุณสามารถทำได้ตลอดไป แต่คุณอาจต้องการหยุดเมื่อ:

  • คุณพบกระต่ายที่เร็วกว่า X หรือ
  • การปรับปรุงที่เพิ่มขึ้นของคนรุ่น n ลดลงต่ำกว่าเกณฑ์หรือ
  • คุณผสมพันธุ์กระต่ายมาหลายชั่วอายุคนแล้ว

5

จุดทั้งหมดของ GA คือการแก้ปัญหาที่มีระดับความฟิตนั้น วิธีนี้จะหายากมากโดยใช้อัลกอริธึมการค้นหาทั่วไปมากกว่าปกติซึ่งเป็นสาเหตุแรกที่คุณใช้ GA ในตอนแรก

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

ไม่ว่าเงื่อนไขการหยุดของคุณจะเป็นระดับความฟิตที่ยอมรับได้หรือมีข้อ จำกัด ด้านเวลา (การรัน GA สำหรับช่วงเวลาสูงสุดหรือจำนวนรุ่นที่ จำกัด สำหรับแอปพลิเคชันที่มีความสำคัญต่อเวลาเช่นการหาเส้นทางหรือแอปพลิเคชัน AI) โดเมน.


3

โดยสังหรณ์ใจวัตถุประสงค์ของอัลกอริทึมทางพันธุกรรมคือการกำหนดวิธีการแก้ปัญหาอัลกอริทึมสำหรับปัญหาที่ไม่ให้ยืมตัวเองเพื่อการวิเคราะห์เชิงตรรกะที่ตรงไปตรงมา เมื่อบรรลุเป้าหมายดังกล่าวแล้ว GA ไม่จำเป็นต้องดำเนินการใด ๆ เพิ่มเติม

แน่นอนถ้าต้องการ "ความเหมาะสม" ที่ดีกว่าอัลกอริธึมทางพันธุกรรมสามารถถูกปล่อยให้ทำงานเพื่อดูว่ามันสามารถหาคำตอบที่เหมาะสมที่สุดได้หรือไม่


2

อัลกอริทึมทางพันธุกรรมต้องการวิธีการตอบแทนยีนที่ดีด้วยการเผยแพร่ที่มากขึ้น ถ้าคุณไม่มีวิธีบอกยีนที่ดีจากยีนที่ไม่ดีคุณไม่สามารถใช้อัลกอริทึมทางพันธุกรรมได้เลย

เพื่อให้อัลกอริทึมทางพันธุกรรมทำงานได้คุณจะต้องอนุญาตให้ใช้โซลูชันที่เหมาะสมยิ่งขึ้นเพื่อทำซ้ำตามความต้องการของโซลูชันที่ไม่พอดี มิฉะนั้นคุณจะลองใช้วิธีแก้ปัญหาแบบสุ่ม

นี่เป็นตัวอย่างทั่วไปจากประสบการณ์ของฉัน: การพัฒนาหนึ่งในระบบโทรออกด้วยเสียงแรกเรามีเวลาหาอัลกอริทึมเพื่อจับคู่ชื่อพูดกับสำเนาที่เก็บไว้ของชื่อเดียวกันนั้นได้ยาก เราได้รับแจ้งว่าความถูกต้อง 95% การเลือกชื่อหนึ่งจาก 25 นั้นเพียงพอ เรามีคลังเก็บของคนที่บอกว่า 25 ชื่อ 10 ครั้งในแต่ละครั้ง

ก่อนอื่นเราพัฒนาระบบอินพุตที่วัดความยาวของคำพูดและพลังงานความถี่ในชิ้นส่วนต่างๆ จากนั้นเราพัฒนาอัลกอริทึมที่กำหนดน้ำหนักให้กับการจับคู่ของพารามิเตอร์เหล่านั้นและเปรียบเทียบพารามิเตอร์สองชุดผ่านน้ำหนักเหล่านั้น

ตอนนี้เรามีขั้นตอนสุดท้ายแล้ว - คุณค่าของน้ำหนักเหล่านั้นควรเป็นอย่างไร

เราสร้างตุ้มน้ำหนัก 1,000 ชุดและทดสอบกับคลังข้อมูล เราโยน 500 รายการที่แย่ที่สุดออกไป สำหรับส่วนที่เหลืออีก 500 เราได้ทำซ้ำแต่ละรายการและหนึ่งในนั้นทำการสุ่มยกหรือลดน้ำหนักอย่างใดอย่างหนึ่ง

เราทำซ้ำกระบวนการนี้บนคอมพิวเตอร์เป็นเวลาประมาณสองสัปดาห์จนกระทั่งในที่สุดมันก็มีชุดน้ำหนักที่ตรงตามเกณฑ์ความแม่นยำ 95% จากนั้นเราทำการทดสอบกับข้อมูลที่ไม่ได้อยู่ในคลังข้อมูล มันแม่นยำประมาณ 92% ดังนั้นเราจึงวิ่งไปอีกนานเพื่อให้ได้ความแม่นยำ 98% ในคลังข้อมูลและชุดของน้ำหนักนั้นสร้างความแม่นยำ 95% สำหรับข้อมูลที่ไม่ได้อยู่ในคลังข้อมูล

ดังนั้นประเด็นคือคุณต้องมีฟังก์ชั่นการออกกำลังกายเพื่อใช้อัลกอริทึมทางพันธุกรรม หากคุณไม่มีวิธีที่จะบอกยีนที่ดีจากยีนที่ไม่ดีคุณจะแน่ใจได้อย่างไรว่ายีนที่ดีนั้นจะผลิตซ้ำและยีนที่ไม่ดีจะทำไม่ได้?


0

ทำซ้ำจนกระทั่งการแก้ปัญหาไม่ได้แตกต่างจากการทำซ้ำก่อนหน้าอย่างมาก เป็นอย่างมากโปรดเข้าใจความอดทนที่แน่นอน

Solution in iteration n-6: 600
Solution in iteration n-5: 800
Solution in iteration n-4: 768
Solution in iteration n-3: 780 
Solution in iteration n-2: 778
Solution in iteration n-1: 778.23
Solution in iteration n: 780.18
Solution in iteration n+1: 780.1815

ในตัวอย่างนี้หากค่าเผื่อความคลาดเคลื่อนคงที่ของคุณคือ 0.01 ดังนั้น (n + 1) บอกให้คุณหยุดเพราะ abs (สารละลาย (n + 1) - การแก้ไข (n)) <0.01

กลับมาทำงานอีกครั้งเมื่ออัลกอริทึมของคุณพูดได้ว่า: สิ่งนี้จะไม่ดีไปกว่านี้!


0

สำหรับคำตอบที่รวดเร็วสำหรับคุณคำถามหลัก: มีความแตกต่างอย่างมากระหว่างการรู้ว่าคุณต้องการบรรลุถึงอะไรและรู้วิธีเดินทางไปที่นั่น

ในรายละเอียดเพิ่มเติมตัวอย่างเช่นปัญหาที่ได้รับความนิยมมากที่สุดปัญหาหนึ่งถูกแก้ไขโดยใช้อัลกอริธึมทางพันธุกรรม / วิวัฒนาการมักจะเป็นกรณีศึกษาในชั้นเรียนเพื่อค้นหาเส้นทางที่เหมาะสมในกราฟ มักใช้ในเครือข่ายเพื่อค้นหาเส้นทางที่ถูกที่สุดจากปลายด้านหนึ่งไปอีกด้านหนึ่ง ในขณะที่คุณกำหนดค่าใช้จ่าย (# ของฮ็อพ, ค่าใช้จ่ายจากการกระโดดแต่ละครั้ง, ฯลฯ ... ) คุณยังกำหนดค่าเป้าหมาย (ระดับความฟิต) ที่คุณพอใจกับผลลัพธ์ อัลกอริทึมของคุณอาจไม่พบสิ่งที่ดีที่สุด แต่จะพบว่าวิธีการที่เหมาะสมเป็นที่ยอมรับได้ โดยสิ่งนี้ฉันหมายความว่าความสัมพันธ์ต้นทุน / ผลประโยชน์ในการค้นหาคำตอบที่ดีกว่าคือการห้าม

ด้วย GA / EA คุณจะพบว่ามันเป็นพฤติกรรมปกติที่คุณจะพบคำตอบที่เหมาะสมที่สุด 95% + แต่การ จำกัด ให้แคบลงว่า 5% สุดท้ายนั้นมีค่าใช้จ่ายสูงกว่ามาก ดังนั้นทฤษฎีก็คือคุณต้องกำหนดค่าที่ยอมรับได้เพื่อให้ได้ผลลัพธ์ที่ดีที่สุดในเวลาที่น้อยที่สุด เนื่องจากค่าใช้จ่ายในการค้นหาให้พูดว่า 1% แรกอาจมีผลประโยชน์เกินกว่า 5% สูงสุดคุณจึงกำหนดความเหมาะสมที่คุณยอมรับได้

โดยสรุปแล้วคุณไม่ได้รับคำตอบสำหรับปัญหาเฉพาะใด ๆ คุณเพียงกำหนดต่อปัญหาความเหมาะสมที่ยอมรับได้ของคุณจุดที่การหาคำตอบที่ดีกว่านั้นไม่ใช่การปฏิบัติจริง


0

มีงานวิจัยเกี่ยวกับการแก้ไขข้อบกพร่องใน C ด้วยอัลกอริธึมทางพันธุกรรมโดยการจัดหากรณีทดสอบเชิงลบและบวกเป็นฟังก์ชั่นการออกกำลังกายพร้อมกับรหัสเสียเป็นอินพุต นี่เป็นตัวอย่างของปัญหาที่มนุษย์สามารถแก้ไขได้ แต่จะง่ายกว่าสำหรับขั้นตอนวิธีพันธุกรรม สิ่งสำคัญที่ควรทราบ:

แม้ว่าวิธีการที่อธิบายไว้ในบทความนี้ไม่ได้พัฒนาโปรแกรมใหม่ตั้งแต่เริ่มต้น แต่พวกเขาจะแสดงวิธีการพัฒนาซอฟต์แวร์แบบดั้งเดิมเพื่อซ่อมแซมข้อบกพร่องที่มีอยู่

อย่างไรก็ตามโปรแกรมใหม่ได้รับการพัฒนาตั้งแต่เริ่มต้น - ไม่ใช่ในค. โปรแกรมที่ไม่เขียนเล็ก ๆ น้อย ๆ ที่เขียนด้วยภาษาโปรแกรมMalbolge esoteric มีทั้งหมด (เป็นความรู้ของฉัน) ได้รับการพัฒนาไม่ใช่เขียน ภาษานั้นซับซ้อนเกินกว่าที่โปรแกรมเมอร์จะใช้และซับซ้อนเกินกว่าที่จะอนุมานโปรแกรมได้อย่างมีประสิทธิภาพจากตรรกะเพียงอย่างเดียวดังนั้นโปรแกรมส่วนใหญ่ที่เขียนในภาษานั้นถูกสร้างขึ้นโดยอัลกอริธึมทางพันธุกรรม ฟังก์ชั่นการออกกำลังกายโดยทั่วไปคือระยะแก้ไขสำหรับการส่งออกที่คาดหวัง

นี่เป็นวงกลมอย่างหนึ่ง โดยการสังเกตว่ารหัสพันธุกรรมที่ซับซ้อนนั้นเขียนขึ้นโดยกระบวนการวิวัฒนาการเราสามารถจำลองกระบวนการวิวัฒนาการเพื่อสร้างรหัสในภาษาที่ซับซ้อนที่แตกต่างกันโดยไม่ต้องรู้ว่ามันทำงานอย่างไร!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.