ฉันจะจำแนกปัญหาการเพิ่มประสิทธิภาพของตัวจำลองข้อมูลได้อย่างไรและฉันควรเข้าใกล้อัลกอริทึมใด


10

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

มีวิธีการใดบ้างในการค้นหาสิ่งที่ดีที่สุดในพื้นที่บนพื้นที่การค้นหาเชิงผสมที่มีขนาดใหญ่มาก?

พื้นหลัง

ในชุมชน superplay ที่ได้รับการช่วยเหลือจากเครื่องมือเราพยายามจัดหาอินพุตที่สร้างขึ้นมาเป็นพิเศษ (ไม่ได้สร้างขึ้นตามเวลาจริง) ไปยังคอนโซลวิดีโอเกมหรืออีมูเลเตอร์เพื่อลดค่าใช้จ่ายบางส่วน วิธีที่ทำได้ในขณะนี้คือการเล่นเกมแบบเฟรมต่อเฟรมและระบุอินพุตสำหรับแต่ละเฟรมมักจะทำซ้ำส่วนของการวิ่งหลายครั้ง (ตัวอย่างเช่นการรันที่เผยแพร่ล่าสุดสำหรับThe Legend of Zelda: Ocarina of Timeได้ รวมการลองใหม่ทั้งหมด 198,590 ครั้ง)

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

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

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

เป้าหมายของฉันตอนนี้คือการพยายามที่จะทำให้กระบวนการสำรวจเส้นทางโดยทั่วไปสำหรับระบบนินเทน 64 พื้นที่ค้นหาปัญหานี้คือไกลขนาดใหญ่เกินไปที่จะถูกโจมตีด้วยวิธีแรงเดรัจฉาน เซ็กเมนต์ n-frame ของการรัน N64 มีอินพุตที่เป็นไปได้ 2 30nซึ่งหมายถึงอินพุตเพียง 30 เฟรม (วินาทีที่ 30FPS) มีอินพุตที่เป็นไปได้ 2 900ตัว มันจะเป็นไปไม่ได้ที่จะทดสอบวิธีแก้ปัญหาที่อาจเกิดขึ้นเหล่านี้ให้ใช้เวลาสองชั่วโมงเต็ม

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

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

สถานะปัจจุบัน

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

โปรดทราบว่าส่วนที่ช้าที่สุดของโปรแกรมนี้จะไกลโดยการประเมินผลของสตรีมใส่นั้น นี่เป็นเพราะสิ่งนี้เกี่ยวข้องกับการจำลองเกมสำหรับn frames (ถ้าฉันมีเวลาฉันจะเขียนอีมูเลเตอร์ของตัวเองที่ให้ hooks ลงในสิ่งของประเภทนี้ แต่ตอนนี้ฉันเหลือไว้กับการสังเคราะห์ข้อความและดัดแปลงหน่วยความจำสำหรับอีมูเลเตอร์ที่มีอยู่จากกระบวนการอื่น) บนคอมพิวเตอร์หลักของฉัน ค่อนข้างทันสมัยการประเมิน 200 เฟรมใช้เวลาประมาณ 14 วินาที ดังนั้นฉันต้องการอัลกอริทึม (ให้ตัวเลือก) ที่ลดจำนวนการประเมินฟังก์ชั่น

ฉันได้สร้างระบบในกรอบที่จัดการ emulators พร้อมกัน ด้วยเหตุนี้ฉันสามารถประเมินสตรีมจำนวนหนึ่งได้พร้อมกันด้วยสเกลประสิทธิภาพเชิงเส้น แต่ในทางปฏิบัติที่จริงแล้วหากพูดถึงจำนวนอีมูเลเตอร์ที่ทำงานอยู่สามารถเป็น 8 ถึง 32 เท่านั้น (และ 32 ก็ผลักดันมันจริง ๆ ) ก่อนประสิทธิภาพของระบบจะลดลง ซึ่งหมายความว่า (ให้ตัวเลือก) อัลกอริทึมที่สามารถทำการประมวลผลในขณะที่การประเมินผลเกิดขึ้นจะเป็นประโยชน์อย่างมากเนื่องจากเครื่องมือเพิ่มประสิทธิภาพสามารถทำการยกที่หนักในขณะที่รอการประเมิน

ในการทดสอบฟังก์ชั่นการประเมินของฉัน (สำหรับเกมBanjo Kazooie ) คือหาผลรวมตามระยะทางจากผู้เล่นไปยังจุดเป้าหมาย นี่หมายถึงทางออกที่ดีที่สุดคือเข้าใกล้จุดนั้นให้เร็วที่สุด การ จำกัด การกลายพันธุ์ของอะนาล็อกสติ๊กเท่านั้นใช้เวลาหนึ่งวันจึงจะได้คำตอบที่ถูกต้อง (นี่คือก่อนที่ฉันจะใช้งานพร้อมกัน)

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

ปัญหา

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

จากสิ่งที่ฉันสามารถบอกได้ว่าฉันมีปัญหาเกี่ยวกับ combinatorial ที่มีขนาดใหญ่มาก ด้านบนของที่, ฟังก์ชั่นการประเมินผลคือไม่ต่อเนื่องมากไม่มีการไล่ระดับสีและมีที่ราบจำนวนมาก นอกจากนี้ยังมีข้อ จำกัด ไม่มากนักแม้ว่าฉันจะเพิ่มความสามารถในการแสดงความยินดีหากมันช่วยแก้ปัญหาได้ ฉันต้องการอนุญาตให้ระบุว่าไม่ควรใช้ปุ่มเริ่มตัวอย่างเช่นนี่ไม่ใช่กรณีทั่วไป

คำถาม

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

สังหรณ์ใจอัลกอริทึมทางพันธุกรรมไม่สามารถที่ดีที่สุดเพราะมันดูเหมือนจะไม่ได้เรียนรู้ ตัวอย่างเช่นหากการกดเริ่มดูเหมือนจะทำให้การประเมินแย่ลงเสมอ (เพราะหยุดเกมชั่วคราว) ควรมีนักออกแบบหรือสมองบางประเภทที่เรียนรู้: "การกดเริ่มที่จุดใดก็ไร้ประโยชน์" แต่ถึงแม้เป้าหมายนี้จะไม่สำคัญเท่าที่ฟังเพราะบางครั้งการกดปุ่มเริ่มต้นก็เป็นสิ่งที่ดีที่สุดเช่นในสิ่งที่เรียกว่า "หยุดการกระโดดถอยหลังแบบยาวไปข้างหลัง" ในSuper Mario 64 ! ที่นี่สมองจะต้องเรียนรู้รูปแบบที่ซับซ้อนมากขึ้น: "การกดเริ่มไม่มีประโยชน์ยกเว้นเมื่อผู้เล่นอยู่ในสถานะที่เฉพาะเจาะจงมากและจะดำเนินการต่อด้วยการกดปุ่ม "

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

ขณะนี้ฉันกำลังอ่านเกี่ยวกับ (ตอบโต้) การค้นหา Tabu การค้นหาพื้นที่ใกล้เคียงขนาดใหญ่มากการเพิ่มประสิทธิภาพจากการเรียนการสอนและการเพิ่มประสิทธิภาพ Ant Colony

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


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

@Kaveh: ฉันเข้าใจว่ามันมีความยาว แต่เนื่องจากลักษณะของคำถามมันค่อนข้างยากที่จะทำให้แคบลงเนื่องจากฉันค่อนข้างถามว่าจะ จำกัด ให้แคบลงได้อย่างไร :(

คำตอบ:


6

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

  • พื้นที่วัตถุ
  • ฟังก์ชั่นเป้าหมายและ
  • พารามิเตอร์ของอัลกอริทึมทางพันธุกรรมของคุณ

ดังนั้นให้ฉันทำอย่างละเอียด

คุณมีวัตถุอะไร

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

ฟังก์ชันเป้าหมายของคุณคืออะไร

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

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

ป้อนคำอธิบายรูปภาพที่นี่
[ แหล่งที่มา ]

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

11+final distance to goal+11+time to goal

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

ดังนั้นคุณจะวัดระยะทางได้อย่างไร ระยะทางเชิงเส้นอาจดูน่าดึงดูด แต่มีปัญหา อีกครั้งอาจส่งสัญญาณผิด พิจารณาสถานการณ์ง่าย ๆ นี้:

ป้อนคำอธิบายรูปภาพที่นี่
[ แหล่งที่มา ]

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

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

GA ของคุณทำงานอย่างไร

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

ประชากร

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

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

การเลือก

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

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

การสืบพันธุ์และการกลายพันธุ์

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

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

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

การสิ้นสุด

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


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

หมายเหตุ: ให้ดูที่BoxCar 2Dท่ามกลางแสงด้านบน พวกเขาทำสิ่งต่าง ๆ ได้ค่อนข้างดี (อย่างอื่นไม่ใช่เช่นนั้น) และคุณสามารถได้รับสัญชาตญาณว่าพารามิเตอร์ของ GA สามารถส่งผลต่อประสิทธิภาพได้อย่างไร


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

1
ดี! คำถามสองข้อ อะไรทำให้คุณพูดว่าไม่มี (ปกติ) ไม่มี optima ใน MOO ประเด็นคือพาเรโต้ที่ดีที่สุดนั่นคือคุณไม่สามารถปรับปรุงบางสิ่งได้โดยไม่ต้องเสียสละอย่างอื่น การมอบคุณค่าให้แก่พวกเขานั้นขึ้นอยู่กับผู้สร้างโมเดลแล้ว นอกจากนี้ยังไม่กลายพันธุ์เกี่ยวกับการเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ที่มีโอกาสน้อย ด้วยความน่าจะเป็นของการกลายพันธุ์ที่มีขนาดใหญ่การค้นหามีแนวโน้มที่จะทำการย้ายแบบสุ่มและไม่มีการชี้นำซึ่งมักจะกระทบประสิทธิภาพ ฉันคิดว่ามันถูกตั้งข้อสังเกตว่าความน่าจะเป็นที่เกิดจากการกลายพันธุ์เล็ก ๆ นั้นดีที่สุด
Juho

@Juho: 1) ใช่ Pareto ที่ดีที่สุด! = ที่ดีที่สุด ไม่ต้องการที่จะลงรายละเอียดเกี่ยวกับสิ่งนั้น 2) ฉันเห็นว่าฉันเข้าใจผิดได้อย่างไร ฉันหมายถึงว่ามีความน่าจะเป็นสูงควรมีการเปลี่ยนแปลงเล็กน้อย 3) ฉันคิดว่า "ความน่าจะเป็นการกลายพันธุ์ที่มีขนาดเล็กทำงานได้ดีที่สุด" หมายถึงรูปแบบที่แต่ละบิตจะถูกเปลี่ยนเป็นอิสระของคนอื่น ๆ ที่มีบางส่วนเล็ก) น่าจะเป็น (มักจะ (ความยาวตามลำดับ) น่าจะเป็นของการกลายพันธุ์โดยรวมอยู่ในระดับสูงและจำนวนที่คาดหวังของการเปลี่ยนแปลงคือ11/nn1
กราฟิลส์

โอเคเข้าใจแล้ว. เกี่ยวกับประเด็นที่สามใช่ฉันหมายถึงอะไรบางอย่างเช่นนั้น ขอบคุณ!
Juho

ขอบคุณสำหรับข้อมูลทั้งหมด.! คำตอบที่วางไว้อย่างชัดเจนจริงๆที่อธิบายความเข้าใจของฉัน
GManNickG

1

สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการเพิ่มประสิทธิภาพการเรียนการสอน (TLBO) และรหัสของมันให้ดูเอกสารต่อไปนี้:

อัลกอริทึมการเพิ่มประสิทธิภาพการเรียนการสอนการเรียนรู้ชั้นสูงสำหรับการแก้ปัญหาการเพิ่มประสิทธิภาพที่มีข้อ จำกัด ที่ซับซ้อนโดย R. Venkata Rao และ V. Patel; วารสารการคำนวณวิศวกรรมอุตสาหการระหว่างประเทศ 3 (4): 535–560 (2012)

สำหรับการอ่านเพิ่มเติม:


1
ยินดีต้อนรับสู่ cs.SE และขอบคุณสำหรับคำตอบของคุณ! โปรดทราบว่าคุณสามารถใช้ Markdown เพื่อจัดรูปแบบโพสต์ของคุณ ฉันแนะนำให้คุณตรวจสอบการแก้ไขของฉัน เกี่ยวกับเนื้อหาฉันไม่คิดว่าสิ่งนี้จะช่วยให้ OP ที่ดูเหมือนจะต้องการรู้วิธีจำลองปัญหาของเขาไม่ใช่รายละเอียดเกี่ยวกับเทคนิคเฉพาะ นอกจากนี้มีเพียงคนเดียวที่ทำงานกับ TLBO นี้หรือไม่?
Raphael
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.