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

ในสถานการณ์นี้ และสำหรับคำขอที่ใช้เฉพาะต้นทุนต่อชั่วโมงและต้นทุนต่อกิโลเมตร เส้นทางที่เพิ่มประสิทธิภาพอาจมี A และ B ที่จัดการในตอนเช้า และ C ที่จัดการในตอนเย็น และต้นทุนของโซลูชันจะเท่ากับว่าทั้ง 3 รายการได้รับการจัดการพร้อมกัน
ต้นทุนต่อกิโลเมตรที่มีเกณฑ์
หากต้องการจัดกลุ่มการเข้าชมที่อยู่ใกล้เคียง คุณต้องเลือกระยะทางเกณฑ์ก่อน นี่คือระยะทางสูงสุดระหว่างการเข้าชม 2 ครั้งที่คุณพิจารณาว่าอยู่ใกล้กัน ตัวอย่างนี้ใช้เกณฑ์ 100 เมตรซึ่งสอดคล้องกับ 1 บล็อกในเขตเมืองโดยประมาณ คุณสามารถเพิ่มหรือลดเกณฑ์เพื่อให้ตรงกับความต้องการทางธุรกิจและความต้องการของคนขับรถได้
หากต้องการจัดกลุ่มการเข้าชมที่อยู่ใกล้กันภายในระยะ 100 เมตร คุณต้องตั้งค่าต้นทุนสูงสำหรับระยะ 100 เมตรแรกของการเปลี่ยนแต่ละครั้ง และตั้งค่าต้นทุนต่ำลงสำหรับระยะทางที่เพิ่มขึ้นของการเปลี่ยน เนื่องจาก 100 เมตรแรกมีค่าใช้จ่ายสูงที่สุด เครื่องมือเพิ่มประสิทธิภาพจึงประหยัดค่าใช้จ่ายได้มากที่สุดโดยใช้การเปลี่ยนผ่านที่สั้นกว่าเกณฑ์ 100 เมตร แม้ว่าจะหมายถึงการขยายความยาวโดยรวมของเส้นทางก็ตาม
หากต้องการตั้งค่าต้นทุน ให้เพิ่มรายการใหม่ลงใน ShipmentModel.transition_attributes โดยมีพร็อพเพอร์ตี้ต่อไปนี้
- หากต้องการจับคู่การเปลี่ยนสถานะที่เป็นไปได้ทั้งหมด ให้เลือกแท็กที่ไม่ได้ใช้ที่ใดเลยในโมเดล เช่น
UNUSED_TAGตั้งค่าTransitionAttributes.excluded_src_tagและTransitionAttributes.excluded_dst_tagให้กับแท็กนี้ - ตั้งค่า
TransitionAttributes.distance_limitด้วยระยะทางและค่าใช้จ่ายตามเกณฑ์ดังนี้- ตั้งค่า
DistanceLimit.soft_max_metersเป็นเกณฑ์ที่เลือก - ตั้งค่า
DistanceLimit.cost_per_kilometer_below_soft_maxเป็นต้นทุนต่อกิโลเมตรที่ต่ำกว่าเกณฑ์ - ตั้งค่า
DistanceLimit.cost_per_kilometer_above_soft_maxเป็นต้นทุนต่อกิโลเมตรที่สูงกว่าเกณฑ์
- ตั้งค่า
{
"model": {
"transitionAttributes": [
{
"excluded_dst_tag": "UNUSED_TAG",
"excluded_src_tag": "UNUSED_TAG",
"distanceLimit": {
"softMaxMeters": 100,
"costPerKilometerBelowSoftMax": 50,
"costPerKilometerAboveSoftMax": 1,
}
}
]
}
}
การจัดส่งหรือยานพาหนะต้องไม่ใช้แท็ก #unused_tag# เพื่อให้ตรงกับการเปลี่ยนผ่านที่เป็นไปได้ทั้งหมด ดูข้อมูลเพิ่มเติมได้ที่วิธีจับคู่คำขอเข้าชมทั้งหมด
วิธีการทำงานของต้นทุนสูงที่ต่ำกว่าเกณฑ์
ส่วนนี้แสดงให้เห็นว่าค่าใช้จ่ายที่ต่ำกว่าและสูงกว่าเกณฑ์ส่งผลต่อค่าใช้จ่ายโดยรวมของโซลูชันต่างๆ ในสถานการณ์ตัวอย่างอย่างไร
โซลูชันที่ 1: ดำเนินการ A, B ระหว่างทางไป และ C ระหว่างทางกลับ
ในโซลูชันนี้ การจัดส่งจะแบ่งออกเป็นการเดินทาง 2 ครั้งบนถนนสายนี้ โดย 2 รายการจะแสดงในการเข้าชมครั้งแรก และรายการที่เหลือจะแสดงในการเข้าชมครั้งที่ 2 การเปลี่ยนผ่านมี 5 แบบดังนี้
| ทรานซิชัน | ระยะทาง | ต่ำกว่าเกณฑ์ | สูงกว่าเกณฑ์ | ||
|---|---|---|---|---|---|
| ระยะทาง | ค่าใช้จ่าย | ระยะทาง | ค่าใช้จ่าย | ||
| depot →A | 1,000 ม. | 100 ม. | 5 | 900 ม. | 0.9 |
| A→B | 50 ม. | 50 ม. | 2.5 | 0 ม. | 0 |
| B→other | 1030 ม. | 100 ม. | 5 | 930 ม. | 0.93 |
| other→C | 1,000 ม. | 100 ม. | 5 | 900 ม. | 0.9 |
| C→depot | 1080 ม. | 100 ม. | 5 | 980 ม. | 0.98 |
| รวม | 450 ม. | 22.5 | 3710 ม. | 3.71 | |
ต้นทุนโดยรวมจะคำนวณจากผลรวมของต้นทุน 2 รายการต่อกิโลเมตร ดังนี้
- ต้นทุนต่อกิโลเมตรที่ต่ำกว่าเกณฑ์ (50) คูณด้วยระยะทางรวมที่เดินทางซึ่งต่ำกว่าเกณฑ์ (450 ม. = 0.45 กม.)
- ค่าใช้จ่ายต่อกิโลเมตรที่เกินเกณฑ์ (1) คูณด้วยระยะทางรวมที่เดินทางเกินเกณฑ์ (3,710 ม. = 3.71 กม.)
ดังนั้น ต้นทุนโดยรวมคือ 0.45 * 50 + 3.71 * 1 = 22.5 + 3.71 = 26.21
โซลูชันที่ 2: ดำเนินการ A, B, C ระหว่างทางไป และไม่ต้องดำเนินการใดๆ ระหว่างทางกลับ
ในโซลูชันนี้ การจัดส่งทั้ง 3 รายการจะจัดส่ง "เป็นกลุ่ม" ในระหว่างการเดินทางผ่านถนน 1 ครั้ง ซึ่งแตกต่างจากโซลูชันที่ 1 ส่วนในการเดินทางอีกครั้ง ยานพาหนะไม่ได้หยุดเลย โดยมี 5 ทรานซิชันเช่นกัน แต่ความยาวและองค์ประกอบจะแตกต่างกัน ดังนี้
| ทรานซิชัน | ระยะทาง | ต่ำกว่าเกณฑ์ | สูงกว่าเกณฑ์ | ||
|---|---|---|---|---|---|
| ระยะทาง | ค่าใช้จ่าย | ระยะทาง | ค่าใช้จ่าย | ||
| depot →A | 1,000 ม. | 100 ม. | 5 | 900 ม. | 0.9 |
| A→B | 50 ม. | 50 ม. | 2.5 | 0 ม. | 0 |
| B→C | 30 ม. | 30 ม. | 1.5 | 0 ม. | 0 |
| C→อื่นๆ | 1,000 ม. | 100 ม. | 5 | 900 ม. | 0.9 |
| other→depot | 2080 ม. | 100 ม. | 5 | 1,980 ม. | 1.98 |
| รวม | 380 ม. | 19 | 3,780 ม. | 3.78 | |
เมื่อใช้การคำนวณเดียวกันกับในโซลูชันที่ 1 ต้นทุนโดยรวมคือ 0.38 * 50 + 3.78 * 1 = 19 + 3.78 = 22.78 และการเข้าชมทั้งหมดในบล็อกเวลาเดียวมีต้นทุนต่ำกว่าการเข้าชมใน 2 กลุ่ม คุณสามารถเสริมผลลัพธ์นี้ได้โดยเพิ่ม DistanceLimit.cost_per_kilometer_below_soft_max
เหตุใดต้นทุนต่อกิโลเมตรที่ต่ำกว่าเกณฑ์จึงใช้ไม่ได้
เนื่องจากคุณต้องการให้ความสำคัญกับการเปลี่ยนผ่านระยะสั้นมากกว่าการเปลี่ยนผ่านระยะยาว คุณจึงอาจต้องการกำหนดต้นทุนต่อกิโลเมตรที่สูงให้กับการเปลี่ยนผ่านระยะยาว และกำหนดต้นทุนต่อกิโลเมตรที่ต่ำให้กับการเปลี่ยนผ่านระยะสั้น แต่ในความเป็นจริงแล้ว วิธีนี้ให้ผลลัพธ์ตรงกันข้าม เนื่องจากช่วง 100 เมตรแรกของการเปลี่ยนผ่านมีค่าใช้จ่ายต่ำที่สุด เครื่องมือเพิ่มประสิทธิภาพจึงใช้ระยะทาง "ราคาถูก" เหล่านี้ให้เกิดผลลัพธ์สูงสุดโดยเลือกการเปลี่ยนผ่านที่มีระยะทางใกล้เคียงหรือมากกว่า 100 เมตร
คุณจะเห็นผลลัพธ์นี้ในโซลูชันตัวอย่าง 2 รายการ หากคุณสลับต้นทุนต่อกิโลเมตรที่ต่ำกว่าและสูงกว่าเกณฑ์ ต้นทุนเส้นทางจะเปลี่ยนแปลงดังนี้
| ค่าใช้จ่ายสูงเกินเกณฑ์ | ต้นทุนสูงต่ำกว่าเกณฑ์ | |||
|---|---|---|---|---|
| วิธีแก้ปัญหาที่ 1 | วิธีแก้ปัญหาที่ 2 | วิธีแก้ปัญหาที่ 1 | วิธีแก้ปัญหาที่ 2 | |
| KM ต่ำกว่าเกณฑ์ | 0.45 | 0.38 | 0.45 | 0.38 |
| ต้นทุนต่อกิโลเมตรต่ำกว่าเกณฑ์ | 1.00 | 1.00 | 50.00 | 50.00 |
| กม. ที่สูงกว่าเกณฑ์ | 3.71 | 3.78 | 3.71 | 3.78 |
| ค่าใช้จ่ายต่อกิโลเมตรที่เกินเกณฑ์ | 50.00 | 50.00 | 1.00 | 1.00 |
| ค่าใช้จ่ายทั้งหมด | 185.95 | 189.38 | 26.21 | 22.78 |
สำหรับแต่ละเวอร์ชัน ต้นทุนรวมที่ต่ำกว่าของทั้ง 2 โซลูชันจะไฮไลต์เป็นตัวหนา คุณจะเห็นว่าเมื่อใช้ต้นทุนสูงเกินเกณฑ์ ต้นทุนรวมของเส้นทางจะสูงขึ้นสำหรับเส้นทางที่มีการจัดกลุ่มการเข้าชม ซึ่งตรงกันข้ามกับสิ่งที่คุณต้องการบรรลุ