มีอัลกอริธึมการกำหนดเส้นทางที่ใหม่กว่า (มากกว่า Dijkstra, A *) ในฐานข้อมูล GIS หรือไม่


46

มีผลงานเช่นมีการเข้าถึงสำหรับ A *จากนักวิจัยของ Microsoft และทางหลวงหมายเลขลำดับชั้นโดยแซนเดอและ Schtolz (ถ้าฉันสะกดชื่ออย่างถูกต้อง) จากคาร์ล Uni ทั้งคู่ลดลำดับการคำนวณลงมากและเร่งความเร็วเป็นพันเท่าของกราฟขนาดใหญ่ (ดูผลลัพธ์ในเอกสารที่เชื่อมโยง) งานหลังนำไปสู่Open Source Routing Machineซึ่งน่าเสียดายที่ไม่ได้รับความนิยมมากพอและไม่ได้ดัดแปลง (ฉันไม่สามารถคอมไพล์มันได้แม้ว่าจะพยายามอย่างหนัก)

ในเวลาเดียวกัน dbs ที่ฉันพยายาม Spatialite และ PgRouting ตามเอกสารของพวกเขามีเพียง Dijkstra และA *อัลกอริทึม ฉันไม่เคยเห็นแม้แต่การค้นหาแบบสองทิศทางซึ่งช่วยประหยัดเวลาในการคำนวณสองครั้งในประสบการณ์ของฉัน

มีอัลกอริทึมที่ดีกว่าสำหรับฐานข้อมูลหรือแอปพลิเคชันอื่น ๆ หรือไม่


1
คุณโพสต์คำถามของคุณไปยังรายชื่อผู้ใช้ pgRouting หรือนักพัฒนาซอฟต์แวร์? คุณอาจได้รับการตอบสนองที่ดีขึ้นโดยตรงจากชุมชนนั้น รายชื่อผู้ใช้: ( lists.osgeo.org/mailman/listinfo/pgrouting-users ) รายชื่อผู้พัฒนา: ( lists.osgeo.org/mailman/listman/listinfo/pgrouting-dev )
RyanDalton

+1 คำถามที่ยอดเยี่ยม ฉันสงสัยว่า Google ใช้อัลกอริทึมเพื่อรับเส้นทางอย่างไร คำถามที่เกี่ยวข้องที่นี่
Kirk Kuykendall

1
เนื่องจาก Google สนับสนุนทีม Karlsruhe ( algo2.iti.uni-karlsruhe.de/english/index.php ) ฉันคิดว่าพวกเขาใช้ซอฟต์แวร์ของพวกเขาซึ่งเป็น Open Source Routing Machine
culebrón

คำตอบ:


23

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

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

อย่างไรก็ตามมันขึ้นอยู่กับขนาดและประเภทของปัญหาที่คุณพยายามแก้ไขและการกำหนดเส้นทางเป็นปัญหากราฟ

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

"คนใหญ่" ไม่เก็บข้อมูลของพวกเขาในฐานข้อมูลดั้งเดิมต่อพวกเขาใช้กราฟที่คำนวณล่วงหน้า (ยินดีต้อนรับกลุ่ม hadoop / mapreduce!) อย่างที่คุณสามารถจินตนาการได้กราฟเหล่านี้มีขนาดใหญ่มากดังนั้นการรู้วิธีเชื่อมขอบของกราฟที่อยู่ติดกันอาจเป็นเรื่องที่ท้าทาย

อย่างไรก็ตามฉันขอแนะนำให้คุณดูโครงการกราฟการเราติ้งแบบหลาย modal:

Graphserverอยู่ในใจ ไม่ใช่เอกสารจำนวนมาก แต่มีการเข้ารหัสที่ยอดเยี่ยม (AFAIK ฉันเชื่อว่า MapQuest ใช้รูปแบบของโครงการนี้สำหรับผลิตภัณฑ์เส้นทางของพวกเขา)

ตัวเลือกอื่นจะเป็นOpenTripPlannerซึ่งมีคนฉลาดอยู่เบื้องหลัง (รวมถึงคนจากกราฟเซิร์ฟเวอร์)


15

ไม่แน่ใจว่ามันใหม่กว่าหรือไม่แต่ pgRouting มีอัลกอริทึม Shooting-Star :

อัลกอริทึม Shooting-Star เป็น pgRouting อัลกอริทึมเส้นทางที่สั้นที่สุดล่าสุด ความพิเศษของมันคือมันเชื่อมโยงจากลิงก์ไปยังลิงก์ไม่ใช่จากจุดสุดยอดถึงจุดสุดยอดเช่นเดียวกับอัลกอริธึม Dijkstra และ A-Star สิ่งนี้ทำให้เป็นไปได้ที่จะกำหนดความสัมพันธ์ระหว่างลิงก์เช่นและสามารถแก้ปัญหาอัลกอริธึมที่อิงกับจุดสุดยอดอื่น ๆ เช่น "ลิงค์เชื่อมโยงคู่ขนาน" ซึ่งมีแหล่งที่มาและเป้าหมายเดียวกัน แต่มีค่าใช้จ่ายต่างกัน

ส่วนขยายนักวิเคราะห์เครือข่ายของ ESRI ใช้วิธีการลำดับชั้นที่คุณกล่าวถึงเพื่อ จำกัด เวลาแก้ไข:

การค้นหาเส้นทางที่สั้นที่สุดที่แน่นอนบนชุดข้อมูลเครือข่ายทั่วประเทศนั้นต้องใช้เวลานานเนื่องจากต้องใช้การค้นหาจำนวนมาก เพื่อปรับปรุงประสิทธิภาพชุดข้อมูลเครือข่ายสามารถจำลองลำดับชั้นตามธรรมชาติในระบบการขนส่งที่การขับขี่บนทางหลวงระหว่างรัฐนั้นเป็นที่นิยมมากกว่าในการขับขี่บนถนนในท้องถิ่น เมื่อมีการสร้างเครือข่ายแบบลำดับชั้นการปรับเปลี่ยนแบบสองทิศทาง Dijkstra จะใช้ในการคำนวณเส้นทางระหว่างต้นทางและปลายทาง

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


11

ลำดับขั้นของการหดตัวเป็นอัลกอริทึมที่รวดเร็วมาก:

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

มีอัลกอริธึมอื่น ๆ - รวมถึงขั้นตอนการแก้ปัญหาการขนส่งสาธารณะ:

Microsoft กำลังทำการวิจัย:

(เช่นกัน Daniel Delling ก็มาจาก Karlsruhe ด้วย)

คุณจะได้รับการแนะนำที่ดีและภาพรวมของอัลกอริทึมที่มีอยู่:

คำเตือน: การบรรยายภาษาเยอรมัน (!) แต่อย่างน้อยส่วนหัวสามารถช่วยให้คุณรับข้อมูลเพิ่มเติม (ALT, Arc-Flags, CHASE, ... ) หรือวรรณกรรมต่อท้าย!

ปรับปรุง

ตอนนี้GraphHopperใช้ลำดับชั้นการหดตัวและอัลกอริธึมอื่น ๆ คุณสามารถลองสาธิตได้

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