บทที่ 5

ของขึ้นรถไม่หมด

แผนบทที่ 1 ใช้รถคันเดียวได้เพราะรถคันนั้นรับได้ 1,500 กิโล บทนี้คือวันเดียวกัน แต่รถที่มีจริงเล็กกว่านั้น

วันจันทร์เดิม 12 จุด แต่รถรับได้คันละ 500 กิโล

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

ของวันจันทร์รวมกัน 990 กิโล 1,980 ลิตร ถ้ารถรับได้ 1,500 กิโล ก็จบในคันเดียวอย่างที่บทที่ 1 ทำ แต่รถสี่ล้อที่วิ่งอยู่จริงหลายเจ้ารับได้ 500 กิโล และ 990 ไม่มีทางลงใน 500 ไม่ว่าจะเรียงจุดเก่งแค่ไหน

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

2บอกว่ารถรับได้เท่าไหร่

  1. เปิด ⚙ รายละเอียด ของคลัง ข้างในมีแถบขึ้นต้นด้วย 🚐 บอกชนิดรถกับจำนวนคัน กดเข้าไป แต่ละชนิดรถมีสองช่องคู่กัน

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

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

3อ่านคำตอบ

บรรทัดสรุปผล: รถ 2 คัน · จุดส่ง 12 จุด · 53.5 กม. · 428 บาท · ตรงเวลาทุกคัน
ครบ 12 จุดเหมือนเดิม แต่ใช้รถสองคัน และระยะรวมขึ้นจาก 50.0 เป็น 53.5 กิโล

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

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

การ์ดรถคันที่ 1 ระยะ 26.1 กม. 129 นาที บรรทุก 495.0 กก. กลับถึงคลัง 10:08 ใช้เวลาทำงานไป 24 เปอร์เซ็นต์ ใช้ความจุไป น้ำหนัก 99 เปอร์เซ็นต์ ปริมาตร 9 เปอร์เซ็นต์ จุดส่ง 6 จุด
น้ำหนัก 99% ปริมาตร 9% ของหนักแต่ไม่กินที่ รถคันนี้เต็มด้วยน้ำหนักล้วน ๆ
การ์ดรถคันที่ 2 ระยะ 27.4 กม. 142 นาที บรรทุก 495.0 กก. กลับถึงคลัง 10:21 ใช้เวลาทำงานไป 26 เปอร์เซ็นต์ จุดส่ง 6 จุด
คันละ 495 กิโลพอดี เพราะ 990 หารสองลงตัว ไม่ใช่ทุกวันที่จะสวยแบบนี้

ดูบรรทัด “ใช้เวลาทำงานไป” ด้วย

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

4บางวันปริมาตรเต็มก่อนน้ำหนัก

ของอย่างขนมปัง กระดาษชำระ หรือกล่องโฟม เบาแต่กินที่ วันแบบนั้นรถเต็มทั้งที่ตาชั่งยังไม่ขึ้น ลองวันเดิมกับรถที่รับได้ 1,500 กิโล เท่าบทที่ 1 แต่มีที่ว่างแค่ 700 ลิตร

บรรทัดสรุปผล: รถ 3 คัน · จุดส่ง 12 จุด · 57.6 กม. · 461 บาท · ตรงเวลาทุกคัน
สามคัน ทั้งที่รถแต่ละคันรับน้ำหนักได้มากกว่าเดิมสามเท่า
การ์ดรถคันที่ 1 ระยะ 21.4 กม. 109 นาที บรรทุก 350.0 กก. ใช้ความจุไป น้ำหนัก 23 เปอร์เซ็นต์ ปริมาตร 86 เปอร์เซ็นต์ จุดส่ง 5 จุด
น้ำหนัก 23% ปริมาตร 86% กลับกันกับหน้าที่แล้ว รถคันนี้บรรทุก 350 กิโลจาก 1,500 ที่รับไหว แล้วก็ไม่มีที่ให้ใส่แล้ว

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

5ถ้ารถไม่พอจริง ๆ

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

บรรทัดสรุปผล: รถ 1 คัน · 8 จาก 12 จุด · 43.6 กม. · 349 บาท · ตรงเวลาทุกคัน · 4 จุดจัดไม่ได้
8 จาก 12 จุด และบอกตรง ๆ ว่าเหลือ 4 จุดที่จัดไม่ได้
แถบแจ้งเตือน: มี 4 จุดที่จัดเข้าแผนไม่ได้ — 4 จุด ไม่มีรถคันไหนมีที่ว่างหรือเวลาพอ เพิ่มรถ ขยายเวลาทำงาน หรือขยายช่วงเวลาส่งของ พร้อมปุ่มดูจุดเหล่านี้
กด ดูจุดเหล่านี้ แล้วแผนที่จะซูมไปที่จุดที่ค้าง

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

แผนที่บอกว่าทำไม่ได้ ดีกว่าแผนที่ดูสวย

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

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

ความจุอยู่บนชนิดรถ ไม่ได้อยู่บนคลัง ปริมาตรเป็น cm³ ไม่ใช่ลิตร:

{
  "type_name": "4 ล้อ",
  "van_count": 3,
  "shift_start": "08:00",
  "shift_end": "17:00",
  "capacity_kg": 500,
  "capacity_cm3": 8000000,
  "max_trip": 1
}

ช่อง จำกัด ลิตร ในหน้าจอคือ capacity_cm3 หารพัน 8,000,000 cm³ คือ 8,000 ลิตร ส่วนของแต่ละจุดใช้ weight_kg กับ volume_cm3 หน่วยเดียวกัน

ทั้งสองช่องต้องมากกว่าศูนย์ รถที่รับอะไรไม่ได้เลยไม่ใช่โจทย์ที่แก้ได้ ส่ง 0 มาจะถูกปฏิเสธตั้งแต่ต้นทาง ไม่ใช่กลายเป็นแผนที่ทุกจุดจัดไม่ได้

จุดที่ไม่มีรถรับไหวจะกลับมาใน unassigned_job_ids พร้อมเหตุผลใน unassigned_reasons ไม่ได้หายไปเฉย ๆ

6ลองเอง

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