ขั้นตอนวิธีฝูงมด


13

ฉันเป็นนักเรียนที่ทำงานเกี่ยวกับการจำลองฝูงมดสำหรับโครงการหลักสูตร อัลกอริทึมสำหรับมันคือ (เห็นได้ชัด) อัลกอริทึมมดอาณานิคม ฉันรู้ว่ามีอัลกอริทึมหลากหลายรูปแบบ แต่ทั้งหมดนั้นมีรายละเอียดทางคณิตศาสตร์มากเกินไปสำหรับเราดังนั้นเราจึงใช้วิธีการที่เรามี:

  • มดเกิดที่อาณานิคมและต้องรวบรวมอาหารจากแหล่งต่าง ๆ เพื่อรักษาอาณานิคม
  • มดทุกตัวมีความคล้ายคลึงกัน
  • พื้นที่ที่มดเคลื่อนที่นั้นเป็นกริด 1,000x1000 ดังนั้นจุดกริดทุกจุดจะทำหน้าที่เป็นจุดที่ถูกต้องสำหรับมดที่จะเข้าครอบครอง ตอนนี้อัลกอริทึมทั้งหมดที่ฉันเจอเกี่ยวข้องกับการรักษาจุดยอดและขอบแยกต่างหาก แต่เนื่องจากเรา จำกัด การเคลื่อนไหวของมดเพียงสี่ทิศทาง (ขึ้น, ลง, ซ้าย, ขวา) ฉันคิดว่ามันไม่สำคัญว่าเราจะวางฟีโรโมนไว้ที่ไหน
  • จุดกริดดังกล่าวข้างต้นเก็บฟีโรโมน
  • มดจะปล่อยฟีโรโมนเฉพาะในกรณีที่ถืออาหาร
  • สำหรับมดที่ตำแหน่ง (i, j) มันจะตัดสินใจว่าจะเคลื่อนที่ไปในขั้นตอนต่อไปโดยการรับฟีโรโมนในสี่โหนดที่อยู่ติดกันในบัญชีสูตรง่าย ๆ นั่นคือความน่าจะเป็นของการเดินทางไปยังโหนดโดย (จำนวนฟีโรโมนที่โหนดติดกันโดยเฉพาะ) / (จำนวนฟีโรโมนในจำนวน 4 โหนดติดกัน)
  • มดไม่สามารถเดินทางกลับไปยังตำแหน่งที่เพิ่งมา มันสามารถทำได้ถ้ามันอยู่ในสถานที่ที่มีอาหารหรืออยู่ในอาณานิคม

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

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

ดังนั้นคำถามของฉันคือ

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

1
หากฉันกำลังสร้างฝูงมดฉันจะมีเครื่องหมายฟีโรโมนสองประเภท: "ปกติ" มักจะออกจากที่ซึ่งมดเดินทางไปและ "อาหาร" ทิ้งไว้โดยมดที่ถืออาหาร มดเคลื่อนไปสู่ฟีโรโมน "ปกติ" ที่มีความเข้มข้นมากขึ้นหากถืออาหารอยู่มิฉะนั้นจะมีเครื่องหมาย "อาหาร" ฉันก็จะทำให้มด "หิว" และ "อิ่ม" มดผู้หิวโหยเดินทางไปยังเครื่องหมาย "อาหาร" แต่อยู่ห่างจากเครื่องหมาย "ปกติ" เพื่อค้นหาแหล่งอาหารใหม่ (ฉันจะสร้างกริดหกเหลี่ยม แต่ไม่ใช่ประเด็น)
9000

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

เคยเล่นsimantไหม?

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

@ Doval: เราแค่ต้องทำโครงการที่เราเลือก เราไม่ได้ถูก จำกัด ให้อยู่ในเขตข้อมูลในลักษณะใด ๆ หลักสูตรนี้เป็นหลักสูตรเบื้องต้นใน C ++ อาจารย์ของเราต้องการให้เรามีประสบการณ์ในการพัฒนาซอฟต์แวร์
ทรานซิสเตอร์

คำตอบ:


6

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

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

ฟีโรโมนจะไม่ลดลงในแต่ละครั้งที่พวกเขาลดลงหลังจากที่พวกเขาย้ายทุกที่และมีการประเมินบางสิ่งบางอย่างเพื่อตรวจสอบว่ามดที่ดีกว่า มดที่ดีกว่าแล้วปล่อยฟีโรโมน (อาจเป็นมดที่มีประสิทธิภาพ 25% ที่ดีที่สุด)


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

1

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

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

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