สิ่งแรกที่ต้องกังวลเกี่ยวกับปัญหานี้คือข้อมูลที่ต้องการในทุกที่และทุกเวลา หากต้องการทำเช่นนั้นฉันมักจะเริ่มต้นด้วยปัญหารุ่นที่โง่และอนุกรม
ค้นหาพัสดุทั้งหมดที่มีมูลค่ามากกว่า x $ / เอเคอร์ที่อยู่ในระยะ y ฟุตของพัสดุอื่นที่มีมูลค่าน้อยกว่า z $ / เอเคอร์
foreach p in parcels {
if value(p) > x {
foreach q in parcels {
if (dist(p,q) <= y) and (value(q) < z) {
emit(p)
}
}
}
}
แม้ว่าอัลกอริทึมนี้จะไม่ได้รับการปรับปรุง แต่ก็จะช่วยแก้ปัญหา
ฉันแก้ไขปัญหาที่คล้ายกันสำหรับวิทยานิพนธ์ปริญญาโทของฉันซึ่งพบพัสดุใกล้ที่สุดสำหรับทุกจุดในชุดข้อมูล ผมดำเนินการแก้ปัญหาในPostGIS , Hadoop
และMPI วิทยานิพนธ์ฉบับเต็มของฉันอยู่ที่นี่แต่ฉันจะสรุปประเด็นสำคัญที่เกี่ยวข้องกับปัญหานี้
MapReduceไม่ใช่แพลตฟอร์มที่ดีในการแก้ปัญหานี้เพราะต้องเข้าถึงชุดข้อมูลทั้งหมด (หรือชุดย่อยที่เลือกอย่างระมัดระวัง) เพื่อประมวลผลพัสดุไปรษณีย์บาป MapReduce ไม่รองรับชุดข้อมูลรองได้ดี
อย่างไรก็ตาม MPI สามารถแก้ปัญหานี้ได้อย่างคล่องแคล่ว ส่วนที่ยากที่สุดคือการกำหนดวิธีการแยกข้อมูล การแบ่งนี้ขึ้นอยู่กับจำนวนข้อมูลที่มีอยู่จำนวนโปรเซสเซอร์ที่คุณต้องรันและจำนวนหน่วยความจำที่คุณมีต่อโปรเซสเซอร์ เพื่อการปรับขนาดที่ดีที่สุด (และประสิทธิภาพ) คุณจะต้องมีชุดข้อมูลพัสดุหลายชุดในหน่วยความจำ (ในคอมพิวเตอร์ทุกเครื่องของคุณ) ในครั้งเดียว
เพื่ออธิบายวิธีการทำงานนี้ฉันจะสมมติว่าคอมพิวเตอร์ 50 เครื่องของคุณแต่ละเครื่องมีโปรเซสเซอร์ 8 ตัว ฉันจะมอบหมายให้คอมพิวเตอร์แต่ละเครื่องมีหน้าที่ตรวจสอบ 1/50 ของพัสดุ การตรวจสอบนี้จะดำเนินการโดย 8 กระบวนการในคอมพิวเตอร์ซึ่งแต่ละชุดมีสำเนา 1/50 ส่วนเดียวกันของพัสดุและ 1/8 ของชุดข้อมูลพัสดุ โปรดทราบว่ากลุ่มไม่ จำกัด เพียงเครื่องเดียว แต่สามารถข้ามขอบเขตของเครื่องได้
กระบวนการจะดำเนินการอัลกอริทึมรับพัสดุสำหรับ p จากชุดที่ 1 / 50th และพัสดุสำหรับ q จากชุดที่ 1 / 8th หลังจากวนรอบด้านในกระบวนการทั้งหมดในคอมพิวเตอร์เครื่องเดียวกันจะพูดคุยกันเพื่อตรวจสอบว่าควรปล่อยพัสดุหรือไม่
ฉันใช้อัลกอริทึมที่คล้ายกันกับปัญหานี้ คุณสามารถค้นหาแหล่งที่มาที่นี่
แม้จะมีอัลกอริธึมที่ไม่ได้รับการเพิ่มประสิทธิภาพเช่นนี้ฉันก็ยังสามารถรับผลลัพธ์ที่น่าประทับใจซึ่งได้รับการปรับให้เหมาะสมอย่างมากสำหรับเวลาโปรแกรมเมอร์ จุดต่อไปในการปรับให้เหมาะสม (ถ้าคุณต้องการจริงๆ) คือการตั้งค่าดัชนีควอดทรีของชุดข้อมูลที่สอง (ซึ่งคุณได้รับ q จาก) สำหรับแต่ละกระบวนการ
เพื่อตอบคำถามเดิม มีสถาปัตยกรรม: MPI + GEOS โยนความช่วยเหลือเล็กน้อยจากการติดตั้ง ClusterGIS ของฉันและสามารถทำได้ค่อนข้างมาก ซอฟต์แวร์ทั้งหมดนี้สามารถพบได้ในฐานะโอเพ่นซอร์สดังนั้นจึงไม่มีค่าธรรมเนียมใบอนุญาต ฉันไม่แน่ใจว่าอุปกรณ์พกพาสำหรับ Windows เป็นอย่างไร (อาจใช้กับ Cygwin) ในขณะที่ฉันทำงานบน linux โซลูชันนี้สามารถปรับใช้บน EC2, Rackspace หรือคลาวด์ที่พร้อมใช้งาน เมื่อฉันพัฒนามันฉันใช้กลุ่มการคำนวณเฉพาะที่มหาวิทยาลัย