ตัวอย่างนี้แสดงวิธีใช้แอตทริบิวต์การเปลี่ยนผ่านเพื่อจัดลําดับความสําคัญของเส้นทางที่ยานพาหนะคันเดียวกันจะรับและส่งสินค้าที่อยู่ใกล้เคียงกันในบล็อกเวลาเดียว ดูข้อมูลเพิ่มเติมเกี่ยวกับแอตทริบิวต์การเปลี่ยนผ่านได้ที่ Model Business Logic with Transition Attributes
ในตัวอย่างนี้
- การจัดส่งพัสดุ A, B และ C อยู่ใกล้กันบนถนนเส้นเดียวกัน
- การจัดส่งเพิ่มเติมอยู่ไกลออกไป
- การจัดส่งไม่มีเวลานำส่งที่ระบุ
- ยานพาหนะต้องขับรถบนถนนเส้นนี้ 2 ครั้ง ไม่ว่ากำหนดการเดินทางจะเป็นอย่างไร โดยครั้งแรกคือตอนเช้าจากคลังสินค้า และครั้งที่ 2 คือตอนเย็นระหว่างทางกลับ
- ระยะทางและระยะเวลาการเดินทางโดยรวมของเส้นทางจะเท่ากันเสมอ ไม่ว่าการจัดส่ง 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# เพื่อจับคู่การเปลี่ยนผ่านที่เป็นไปได้ทั้งหมด ดูข้อมูลเพิ่มเติมได้ที่วิธีจับคู่คําขอการเดินทางทั้งหมด
requests
วิธีการทำงานของต้นทุนสูงที่ต่ำกว่าเกณฑ์
ส่วนนี้แสดงให้เห็นว่าต้นทุนที่ต่ำกว่าและสูงกว่าเกณฑ์ส่งผลต่อต้นทุนโดยรวมของโซลูชันต่างๆ ในสถานการณ์ตัวอย่างอย่างไร
โซลูชันที่ 1: จัดส่ง A และ B ระหว่างทางไป และ C ระหว่างทางกลับ
ในโซลูชันนี้ พัสดุจะแบ่งออกเป็นการเดินทาง 2 ครั้งบนถนนเส้นนี้ โดย 2 รายการจะจัดส่งในการเดินทางครั้งแรก และรายการที่เหลือจะจัดส่งในการเดินทางครั้งที่ 2 การเปลี่ยนผ่านมี 5 รายการ ดังนี้
| การเปลี่ยนผ่าน | ระยะทาง | ต่ำกว่าเกณฑ์ | สูงกว่าเกณฑ์ | ||
|---|---|---|---|---|---|
| ระยะทาง | ต้นทุน | ระยะทาง | ต้นทุน | ||
| คลังสินค้า → A | 1,000 ม. | 100 ม. | 5 | 900 ม. | 0.9 |
| A→B | 50 ม. | 50 ม. | 2.5 | 0 ม. | 0 |
| B → อื่นๆ | 1,030 ม. | 100 ม. | 5 | 930 ม. | 0.93 |
| อื่นๆ → C | 1,000 ม. | 100 ม. | 5 | 900 ม. | 0.9 |
| C → คลังสินค้า | 1,080 ม. | 100 ม. | 5 | 980 ม. | 0.98 |
| รวม | 450 ม. | 22.5 | 3,710 ม. | 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 ส่วนการเดินทางอีกครั้ง ยานพาหนะจะไม่หยุดเลย การเปลี่ยนผ่านมี 5 รายการเช่นกัน แต่ความยาวและองค์ประกอบจะแตกต่างกัน ดังนี้
| การเปลี่ยนผ่าน | ระยะทาง | ต่ำกว่าเกณฑ์ | สูงกว่าเกณฑ์ | ||
|---|---|---|---|---|---|
| ระยะทาง | ต้นทุน | ระยะทาง | ต้นทุน | ||
| คลังสินค้า → 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 |
| อื่นๆ → คลังสินค้า | 2,080 ม. | 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 | |
| กม. ต่ำกว่าเกณฑ์ | 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 รายการเป็นตัวหนา คุณจะเห็นว่าเมื่อใช้ต้นทุนสูงกว่าเกณฑ์ ต้นทุนรวมของเส้นทางจะสูงขึ้นสําหรับเส้นทางที่มีการจัดกลุ่มการเดินทาง ซึ่งตรงข้ามกับสิ่งที่คุณต้องการ