บทที่ 6

รถคันเดียว วิ่งสองเที่ยว

บทที่ 5 แก้ปัญหาของไม่พอลงรถด้วยการเพิ่มรถอีกคัน บทนี้แก้ด้วยรถคันเดิม กลับมาโหลดของแล้วออกไปอีกรอบ

วันจันทร์เดิม รถ 500 กิโลเหมือนบทที่ 5 แต่กลับมาโหลดของได้

1เรื่องที่เกิดขึ้น

การ์ดรถในบทที่ 5 บอกว่ารถทั้งสองคันกลับถึงคลังสิบโมงกว่า ใช้เวลาไปคันละหนึ่งในสี่ของกะเก้าชั่วโมง เห็นตัวเลขนั้นแล้วคำถามถัดไปชัดเจน ว่าทำไมไม่ให้คันเดียววิ่งสองรอบ

คำถามนี้ตอบด้วยเงินได้ตรง ๆ รถคันที่สองคือค่าเช่าหรือค่าคนขับอีกคน ส่วนรอบที่สองของคันเดิมคือเวลา ทางไหนถูกกว่าขึ้นอยู่กับว่าเรามีอะไรเหลือ

2อนุญาตให้กลับมาโหลด

  1. ตั้ง เที่ยวสูงสุดต่อคัน ให้มากกว่า 1 อยู่ในรถแต่ละชนิด ใน ⚙ รายละเอียด ของคลัง

    ช่องเที่ยวสูงสุดต่อคัน ใส่เลข 5 มีวงสีแดงรอบ
    5 คือค่าที่โปรแกรมตั้งมาให้ ไม่ใช่เป้า เป็นเพดาน รถจะกลับมาโหลดก็ต่อเมื่อทางเลือกอื่นแย่กว่า
  2. ใส่ เวลาโหลดของ (นาที) ของคลัง คือเวลาที่รถจอดอยู่ที่คลังระหว่างสองเที่ยว

    ช่องเวลาโหลดของ หน่วยนาที ใส่ 30 มีวงสีแดงรอบ
    ตั้งที่คลัง ไม่ใช่ที่รถ เพราะคลังที่มีโฟล์คลิฟท์กับด็อกโหลดของ ไม่ใช่หน้าตึกแถวที่คนขับยกของเอง สองที่นี้ใช้เวลาไม่เท่ากัน
  3. กด วางแผนเส้นทาง

3อ่านคำตอบ

บรรทัดสรุปผล: รถ 1 คัน · จุดส่ง 12 จุด · 53.5 กม. · 428 บาท · ตรงเวลาทุกคัน
รถคันเดียว ครบ 12 จุด และ 53.5 กิโล ตัวเลขเดียวกับที่รถสองคันวิ่งในบทที่ 5

53.5 กิโลเท่ากันเป๊ะ ไม่ใช่เรื่องบังเอิญ จุดส่งอยู่ที่เดิม ถนนเส้นเดิม ระยะที่ต้องวิ่งจึงเท่าเดิม สิ่งที่เปลี่ยนคือใครวิ่ง

การ์ดรถคันที่ 1 ระยะ 53.5 กม. 360 นาที บรรทุก 495.0 กก. เปิดใน Google Maps เป็นช่วง ๆ พักกลางวัน 11:00 ถึง 12:00 กลับถึงคลัง 14:00 ใช้เวลาทำงานไป 67 เปอร์เซ็นต์ เวลาวิ่ง 84 นาที เวลาที่จุดส่ง 276 นาที จุดส่ง 12 จุด
กลับถึงคลัง 14:00 แทน 10:21 และใช้เวลาไป 67% ของกะ แทน 26% นี่คือราคาของการไม่เพิ่มรถ

บรรทัด บรรทุก 495.0 กก. คือของที่ขึ้นรถรอบหนึ่ง ไม่ใช่ของทั้งวัน วันนี้รถขนไป 990 กิโลด้วยรถที่รับ 500 เพราะขนสองรอบ

ในรายการจุดส่งจะมีแถวคลังแทรกอยู่กลาง บอกว่ารถกลับมาตอนไหนและออกไปตอนไหน

แถวในรายการจุดส่ง: บางนา โหลดของเพิ่ม ถึง 10:08 ออก 10:38 เที่ยวที่ 2 จาก 2
ถึง 10:08 ออก 10:38 คือ 30 นาทีที่ใส่ไว้พอดี แถวนี้อยู่ในลิงก์ของคนขับด้วย คนขับจะเห็นว่าต้องกลับมาโหลด ไม่ใช่วิ่งเลยไป

ราคาที่เห็นยังเท่าเดิม 428 บาท

บทที่ 5 ใช้รถสองคัน บทนี้ใช้คันเดียว แต่บรรทัดสรุปบอก 428 บาททั้งคู่ เพราะเลขนั้นคิดจากกิโลเมตร และกิโลเมตรเท่ากัน ค่ารถต่อคันยังไม่ได้เข้ามาในสมการ เรื่องนั้นอยู่ในบทที่ 8

4วันที่สั้นเกินกว่าจะวิ่งสองเที่ยว

เที่ยวที่สองกินเวลา ถ้ากะจบก่อนที่เที่ยวสองจะเสร็จ โปรแกรมจะไม่ฝืน ลองฟลีตเดิมกับกะที่เลิก 13:30

บรรทัดสรุปผล: รถ 2 คัน · จุดส่ง 12 จุด · 53.5 กม. · 428 บาท · ตรงเวลาทุกคัน
กลับไปเป็นรถสองคัน เพราะรถคันเดียวจบสองเที่ยวไม่ทัน 13:30

สังเกตว่าโปรแกรมไม่ได้ถามว่าจะยอมเลิกงานสายไหม โปรแกรมเลือกแผนที่จบในเวลาทำงานที่บอกไว้ ถ้ายอมให้เลิกช้าได้จริง วิธีบอกคือขยาย เวลาทำงาน ของรถ ไม่ใช่ปล่อยให้แผนล้นออกไปเอง

5ถ้ามีรถคันเดียวและวันสั้น

สองอย่างพร้อมกัน คือมีรถคันเดียวและกะเลิกบ่ายโมง ตอนนี้ไม่มีทั้งรถให้เพิ่มและเวลาให้ยืม

บรรทัดสรุปผล: รถ 1 คัน · 9 จาก 12 จุด · 39.0 กม. · 312 บาท · ตรงเวลาทุกคัน · 3 จุดจัดไม่ได้
9 จาก 12 จุด รถยังวิ่งสองเที่ยว แต่เที่ยวสองไม่มีเวลาพอสำหรับสามจุดสุดท้าย

สามจุดที่ค้างคือคาเฟ่เมกาบางนา โรงแรมบางนา กม.6 และร้านชำหนามแดง ตัดสินใจได้ตั้งแต่เมื่อวาน ไม่ใช่ตอนรถคันนั้นไปถึงหน้าร้านตอนบ่ายสอง แล้วโทรมาบอกว่าไม่ทัน

6เที่ยวสองไม่ได้ฟรี

เวลาโหลดของ 30 นาทีที่ใส่ไว้เป็นตัวเลขที่ควรวัดจริง ไม่ใช่เดา เพราะโปรแกรมเอาไปตัดสินว่าคุ้มจะกลับมาโหลดไหม

วิธีวัดง่ายที่สุดคือจับเวลาจากรถเข้าลานถึงรถออกจากลาน ในวันที่ปกติ รวมเวลารอคิวโหลดด้วย เพราะระหว่างที่รอ รถคันนั้นก็ไม่ได้วิ่งอยู่แล้ว

ถ้าส่งข้อมูลเข้ามาเป็น JSONสำหรับคนที่ต่อระบบเอง

สองที่ max_trip อยู่บนชนิดรถ ส่วนเวลาโหลดอยู่บนคลัง:

{
  "depot_id": "บางนา",
  "location": { "lat": 13.672, "lng": 100.63 },
  "reload_time_min": 30,
  "van_types": [
    {
      "type_name": "4 ล้อ",
      "van_count": 3,
      "shift_start": "08:00",
      "shift_end": "17:00",
      "capacity_kg": 500,
      "capacity_cm3": 8000000,
      "max_trip": 5
    }
  ]
}

ส่ง reload_time_min ที่ระดับคำขอก็ได้ ใช้กับทุกคลังในแผนนั้น ตัวที่อยู่บนคลังทับตัวนั้นเฉพาะคลังนี้ มีคลังเดียวก็ให้แผนเหมือนกัน

เที่ยวที่สองไม่ใช่รถคันที่สอง ในคำตอบยังเป็น vehicle_id เดิมหนึ่งตัว โดยมีการกลับคลังอยู่ใน reloads พร้อม after_stop_index บอกว่าแทรกหลังจุดที่เท่าไหร่:

"reloads": [
  { "after_stop_index": 5, "arrival_s": 36520, "leave_s": 38320 }
]

ที่เป็นอย่างนี้เพราะรถคันหนึ่งคือรถคันหนึ่ง ทั้งในเรื่องค่าใช้จ่าย ในการนับจำนวนรถ ในการพักกลางวัน และในลิงก์ที่คนขับเปิด

7ลองเอง

  1. เพิ่ม เวลาโหลดของ (นาที) ทีละ 15 นาที แล้ววางแผนใหม่ทุกครั้ง ดูว่าถึงกี่นาทีโปรแกรมถึงเลิกให้กลับมาโหลด แล้วไปเพิ่มรถแทน
  2. ตั้ง เที่ยวสูงสุดต่อคัน เป็น 1 แล้ว 2 แล้ว 5 ในวันเดียวกัน เทียบสามแผน จะเห็นว่า 2 กับ 5 ให้คำตอบเดียวกัน เพราะวันนี้ต้องการแค่สองเที่ยว
  3. เปิดวันคันเดียวสองเที่ยว แล้วกดปุ่มลิงก์คนขับที่การ์ดรถ ดูว่าแถวกลับมาโหลดอยู่ในหน้าที่คนขับเปิด ตรงที่ควรอยู่