บทที่ 9

คันหนึ่งเลิกบ่ายสาม อีกคันเลิกเที่ยง

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

35 ร้านในย่านพระโขนง ร้านละ 15 นาที

1วันแบบที่ปัญหานี้เกิด

วันนี้ไม่ใช่วันจันทร์ที่ใช้มาแปดบทแล้ว เป็นรอบส่งของอีกแบบ 35 ร้านอยู่ในย่านเดียวกัน ห่างกันไม่กี่ร้อยเมตร ร้านละ 15 นาที

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

บรรทัดสรุปผล: รถ 2 คัน · จุดส่ง 35 จุด · 72.5 กม. · 580 บาท · ตรงเวลาทุกคัน
บรรทัดสรุปบอกว่าเรียบร้อย รถสองคัน ครบ 35 จุด ตรงเวลาทุกคัน

บรรทัดนี้ไม่มีอะไรผิด และก็ไม่ได้บอกเรื่องที่คนขับจะมาบอกเราตอนเย็น ต้องไปดูที่แท็บ ไทม์ไลน์

ไทม์ไลน์รถสองคัน รถคันที่ 1 มี 14 จุด 57.0 กม. แถบจบประมาณ 13:00 รถคันที่ 2 มี 21 จุด 15.5 กม. แถบยาวไปถึงประมาณ 15:00 มีช่วงพักกลางวันสีม่วง
คันที่ 1 จบก่อนบ่าย คันที่ 2 ลากไปถึงบ่ายสาม แถบสองแถบนี้ยาวไม่เท่ากันสองชั่วโมง

คันที่ 1 ได้ 14 จุด กลับถึงคลัง 12:57 คันที่ 2 ได้ 21 จุด กลับ 15:07 ห่างกันสองชั่วโมงสิบนาที ทั้งที่ออกจากคลังพร้อมกันแปดโมง

ทำไมโปรแกรมเลือกแบบนี้ เพราะวัดจากกิโลเมตร และคันที่ 2 วิ่งแค่ 15.5 กิโล ส่วนคันที่ 1 วิ่ง 57.0 กิโล เอาจุดที่อยู่ติด ๆ กันไปกองไว้กับคันเดียว คือแผนที่วิ่งน้อยที่สุดจริง ๆ

2บอกให้เกลี่ย

ช่องเกลี่ยงานให้เท่า ๆ กัน เลือกไว้ที่ เกลี่ยแบบเข้ม มีวงสีแดงรอบ
อยู่ใต้ เป้าหมายการจัดเส้นทาง เป็นคนละเรื่องกัน เป้าหมายบอกว่าจะประหยัดอะไร อันนี้บอกว่าจะแบ่งงานกันอย่างไร

3เกลี่ยแบบเข้ม

ไทม์ไลน์รถสองคัน รถคันที่ 1 มี 16 จุด 59.4 กม. รถคันที่ 2 มี 19 จุด 16.2 กม. แถบทั้งสองยาวเท่ากันและจบประมาณ 14:45 ทั้งคู่มีช่วงพักกลางวันสีม่วง
สองแถบยาวเท่ากัน จบพร้อมกัน
การ์ดรถคันที่ 1 ระยะ 59.4 กม. 405 นาที พักกลางวัน 12:50 ถึง 13:50 กลับถึงคลัง 14:45 ใช้เวลาทำงานไป 75 เปอร์เซ็นต์ จุดส่ง 16 จุด
คันที่ 1 · 405 นาที · 75% ของกะ · 16 จุด
การ์ดรถคันที่ 2 ระยะ 16.2 กม. 405 นาที พักกลางวัน 12:17 ถึง 13:17 กลับถึงคลัง 14:45 ใช้เวลาทำงานไป 75 เปอร์เซ็นต์ จุดส่ง 19 จุด
คันที่ 2 · 405 นาที · 75% ของกะ · 19 จุด

คันละ 405 นาที คันละ 75% ของกะ กลับถึงคลัง 14:45 พร้อมกัน ตรงกันถึงนาที เลข 75% ไม่ใช่เรื่องบังเอิญ — เป็นเพดานที่การเกลี่ยแบบเข้มตั้งไว้ และแผนนี้ไปนอนอยู่ตรงเพดานพอดี

สิ่งที่ไม่เท่ากันคือจำนวนจุดกับระยะทาง 16 จุด 59.4 กิโล กับ 19 จุด 16.2 กิโล เพราะที่เกลี่ยคือเวลา ไม่ใช่จำนวนจุด คันที่ต้องวิ่งไกลได้จุดน้อยลงเพื่อให้ชั่วโมงเท่ากัน

4ราคาของความเท่ากัน

บรรทัดสรุปผล: รถ 2 คัน · จุดส่ง 35 จุด · 75.6 กม. · 605 บาท · ตรงเวลาทุกคัน
75.6 กิโล 605 บาท จาก 72.5 กิโล 580 บาท

เทียบสองแผนตรง ๆ

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

แล้วเกลี่ยไปทำไม

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

5เกลี่ยพอประมาณ อาจไม่พอ

ไทม์ไลน์รถสองคัน รถคันที่ 1 มี 14 จุด 57.0 กม. จบประมาณ 13:00 รถคันที่ 2 มี 21 จุด 16.1 กม. จบประมาณ 15:40 มีแถบสีเหลืองรอ
แทบไม่ต่างจากไม่เกลี่ยเลย

เพดาน 85% ของกะเก้าชั่วโมงคือ 7 ชั่วโมง 39 นาที และคันที่ยาวที่สุดในแผนเดิมทำ 7 ชั่วโมง 07 นาที ยังไม่ถึงเพดาน ไม่มีอะไรให้กด แผนจึงแทบไม่ขยับ

นี่ไม่ใช่ข้อบกพร่อง เป็นความหมายของคำว่าพอประมาณ เป็นเพดานที่กันวันที่ยาวเกินไปจริง ๆ ไม่ได้มีหน้าที่ทำให้ทุกวันเท่ากัน ถ้าต้องการเท่ากัน ต้องใช้แบบเข้ม

เกลี่ยแล้วอย่าลืมดูจุดที่จัดไม่ได้

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

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

อยู่ในก้อน objective เดียวกับเป้าหมาย แต่เป็นฟิลด์ของตัวเอง:

{
  "objective": {
    "strategy": "min_vans",
    "balance_workload": "strict"
  }
}

รับ off soft หรือ strict ไม่ส่งมาคือ off แยกจาก strategy เพราะเป็นคนละคำถาม “ใช้รถน้อยที่สุดและเกลี่ยด้วย” กับ “ถูกที่สุดและเกลี่ยด้วย” เป็นสิ่งที่คนคุมรถขอทั้งคู่

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

ผลที่ได้อ่านจาก depart_s กับ return_s ของแต่ละเส้นทาง ไม่ใช่จากจำนวนจุด สองคันที่ทำงานเท่ากันมีจำนวนจุดไม่เท่ากันได้ตามปกติ

6ลองเอง

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