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