ส่งคำขอเพิ่มประสิทธิภาพเส้นทางแรก

นักพัฒนาซอฟต์แวร์ในเขตเศรษฐกิจยุโรป (EEA)

เอกสารนี้จะแสดงวิธีส่งคำขอแรกไปยัง Route Optimization API โดยใช้สถานการณ์กรณีการใช้งานจริง

ตัวอย่างนี้ใช้ HTTP และ JSON เพื่อแสดง REST API เพื่อให้เข้าใจได้ง่าย อย่างไรก็ตาม สำหรับสภาพแวดล้อมการใช้งานจริง คำแนะนำโดยรวมคือให้ใช้ gRPC เพื่อประโยชน์ด้านประสิทธิภาพ อย่างไรก็ตาม gRPC ต้องมีการติดตั้ง ดูข้อมูลเพิ่มเติมได้ที่ ไลบรารีของไคลเอ็นต์ Route Optimization API

สถานการณ์

แผนที่ซานฟรานซิสโกที่มีหมุดสำหรับ Coit Tower, Mission Dolores Park และ South Sunset Playground Park

คุณให้บริการรับเลี้ยงสุนัขแบบไปกลับตั้งแต่เวลา 07:00 น. ถึง 19:00 น. ในซานฟรานซิสโก เช้านี้คุณต้องไปรับสุนัข 2 ตัวจากสถานที่ต่างๆ ในเมือง เจ้าของสุนัขทั้ง 2 ราย ให้ช่วงเวลารับสินค้าแก่คุณระหว่างเวลา 07:30 น. ถึง 09:30 น.

คุณมีรถตู้ 1 คันสำหรับงานนี้ และจ่ายค่าจ้างให้คนขับ 27 ดอลลาร์ต่อชั่วโมง คนขับและรถตู้จะเริ่มงานที่ศูนย์รับเลี้ยงเด็กของคุณในเวลา 07:00 น. และต้องกลับมา จากการรับช่วงเช้าภายในเวลา 12:00 น. เพื่อพักกลางวัน

วันนี้คือวันที่ 13 กุมภาพันธ์ 2024 และคนขับมีงานดังนี้

  • รับสุนัขพันธุ์เบอร์นีสเมาน์เทนด็อกใกล้กับ Coit Tower
  • รับชิวาวาที่สวนสาธารณะ South Sunset Playground
  • ไปส่งสุนัขทั้ง 2 ตัวที่ศูนย์รับฝากสุนัขที่ Mission Dolores Park

คุณต้องมีเส้นทางที่ลดเวลาที่สุนัขอยู่ในรถตู้ให้น้อยที่สุด พร้อมทั้งปฏิบัติตามข้อกำหนดในการรับและส่ง

ก่อนเริ่มต้น

หากต้องการเรียกใช้โค้ดในสถานการณ์ตัวอย่างนี้ คุณต้องทำตาม วิธีการในตั้งค่า Route Optimization API ให้เสร็จสมบูรณ์ก่อน

1. เลือกแนวทางการเพิ่มประสิทธิภาพเส้นทาง

Route Optimization API มีหลายวิธีให้คุณเลือกใช้ตามความซับซ้อนของปัญหาการเพิ่มประสิทธิภาพ

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

ใช้ URL ต่อไปนี้เพื่อส่งคำขอ HTTP POST ไปยังเมธอด optimizeTours

https://routeoptimization.googleapis.com/v1/projects/PROJECT_OR_ID:optimizeTours

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

  • ตั้งค่าพารามิเตอร์ timeout เป็น 2 วินาที
  • ปล่อยให้การตั้งค่ากำหนดเวลาเป็นค่าเริ่มต้น ซึ่งคือ 60 วินาทีสำหรับคำขอ REST

2. สร้างเนื้อความของข้อความคำขอ

หลังจากเลือกวิธีการบล็อก optimizeTours และกำหนดการตั้งค่าการหมดเวลา และกำหนดเวลาแล้ว ขั้นตอนถัดไปคือการสร้างเนื้อหาของข้อความ คำขอ

สำหรับสถานการณ์นี้ คำขอคือข้อความ OptimizeToursRequest ที่เข้ารหัสเป็น JSON ใน REST API

หากต้องการสร้างข้อความคำขอ ให้ทำตามขั้นตอนถัดไป

  1. เริ่มต้นด้วยโครงสร้างคำขอพื้นฐาน ซึ่งมีลักษณะดังนี้

    {
      "timeout": ...,
      "model": {
        "shipments": [...],
        "vehicles": [...],
        "globalStartTime": "...",
        "globalEndTime": "..."
      }
    }
    

    ดูข้อมูลเพิ่มเติมเกี่ยวกับโครงสร้างได้ที่คู่มือแนวคิดหลักสำหรับโครงสร้างพื้นฐาน (ShipmentModel, Shipment และ Vehicle)

  2. กำหนดการจัดส่ง ในฟิลด์ shipments ให้เพิ่มข้อความ Shipment สำหรับสุนัขแต่ละตัวที่ต้องรับและส่งในตอนเช้า ในส่วนนี้ คุณจะต้องกำหนดสถานที่และเวลาที่เจ้าของสุนัขแต่ละรายต้องการให้ไปรับ และสถานที่และเวลาที่ศูนย์รับฝากสุนัขจะไปส่ง สุนัข

    1. สำหรับสุนัขแต่ละตัว ให้สร้าง VisitRequest สำหรับการรับและอีกรายการสำหรับการนำส่ง ซึ่งในสถานการณ์นี้เรียกว่าการนำส่งที่สถานรับเลี้ยงเด็ก

      • ในการรับ ให้ตั้งค่า arrivalWaypoint เป็นสถานที่รับสุนัข (Coit Tower สำหรับสุนัขเบอร์นีสเมาน์เทนด็อก หรือ South Sunset Playground Park สำหรับสุนัขชิวาวา) และตั้งค่า timeWindows เป็นเวลารับที่เจ้าของร้องขอ (07:30 น. ถึง 09:30 น.)

      • ในการนำส่ง ให้ตั้งค่า arrivalWaypoint เป็น ศูนย์รับเลี้ยงเด็ก และตั้งค่า timeWindows สำหรับเวลา นำส่งที่จำเป็น (09:30 น. ถึง 11:30 น.)

      ดูข้อมูลเพิ่มเติมเกี่ยวกับกรอบเวลาได้ที่กรอบเวลา

    2. คุณใช้ฟิลด์ label เพื่อเพิ่มตัวระบุสำหรับการจัดส่งแต่ละครั้งได้ เช่น "เบอร์นีสเมาน์เทนด็อก" และ "ชิวาวา" ซึ่งจะช่วยให้คุณ ระบุการจัดส่งในการตอบกลับได้

    ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดการจัดส่งได้ที่การจัดส่ง

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

    1. ตั้งค่าstartWaypointและendWaypointสำหรับรถตู้ไปยัง จุดเริ่มต้นและจุดสิ้นสุดของวัน ซึ่งก็คือศูนย์รับเลี้ยงเด็กใกล้กับ สวนสาธารณะ Mission Dolores

    2. หากต้องการลดต้นทุนในการดำเนินงาน คุณต้องกำหนดข้อจำกัดด้านต้นทุนของธุรกิจ ตั้งค่าพารามิเตอร์ต้นทุน costPerHour เป็น 27 ซึ่งเป็นจำนวนเงินที่คุณจ่ายให้คนขับรถตู้รับส่งสุนัข ดูข้อมูลเพิ่มเติมเกี่ยวกับพารามิเตอร์ต้นทุนได้ที่ รูปแบบต้นทุน

    3. หากต้องการให้เครื่องมือเพิ่มประสิทธิภาพสร้างเส้นทางภายในเวลาทำการของรถตู้ ให้กำหนดstartTimeWindowsเป็นช่วงที่ยอมรับได้สำหรับ คนขับในการเริ่มขับรถตู้ และกำหนดendTimeWindowsเป็นช่วงที่ยอมรับได้สำหรับ เวลาที่คนขับต้องกลับไปที่ศูนย์รับเลี้ยงเด็ก ดูข้อมูลเพิ่มเติมเกี่ยวกับกรอบเวลาได้ที่กรอบเวลา

    ดูข้อมูลเพิ่มเติมเกี่ยวกับการกำหนดรถยนต์ได้ที่ยานพาหนะ

  4. ตั้งกรอบเวลาทั่วโลก กรอบเวลาทั่วโลกแสดง กรอบเวลาที่รถตู้สามารถรับและส่ง สถานรับเลี้ยงเด็กได้ตลอดทั้งวัน สําหรับสถานการณ์นี้ ให้ตั้งค่า globalStartTime เป็น 07:00 น. และ globalEndTime เป็น 19:00 น. สําหรับวันที่ 13 กุมภาพันธ์ 2024 ซึ่ง แสดงถึงเวลาทําการของสถานรับฝากสุนัข

3. ส่งคำขอ

ต่อไปนี้คือcurlคำขออย่างง่ายตามสถานการณ์จำลองของศูนย์รับฝากสุนัข และใช้วิธีการบล็อกoptimizeTours

ก่อนส่งคำขอ ให้แทนที่ PROJECT_NUMBER_OR_ID ในโค้ดตัวอย่างด้วยรหัสโปรเจ็กต์ Google Cloud

curl -X POST 'https://routeoptimization.googleapis.com/v1/projects/PROJECT_NUMBER_OR_ID:optimizeTours' \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
--data @- << EOM
{
  "timeout": "2s",
  "model": {
    "shipments": [
      {
        "pickups": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.802395,
                  "longitude": -122.405822
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T07:30:00Z",
                "endTime": "2024-02-13T09:30:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.760202,
                  "longitude": -122.426796
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T09:30:00Z",
                "endTime": "2024-02-13T11:30:00Z"
              }
            ]
          }
        ],
        "label": "Bernese mountain dog"
      },
      {
        "pickups": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.738067,
                  "longitude": -122.498593
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T07:30:00Z",
                "endTime": "2024-02-13T09:30:00Z"
              }
            ]
          }
        ],
        "deliveries": [
          {
            "arrivalWaypoint": {
              "location": {
                "latLng": {
                  "latitude": 37.760202,
                  "longitude": -122.426796
                }
              }
            },
            "timeWindows": [
              {
                "startTime": "2024-02-13T09:30:00Z",
                "endTime": "2024-02-13T11:30:00Z"
              }
            ]
          }
        ],
        "label": "Chihuahua"
      }
    ],
    "vehicles": [
      {
        "startWaypoint": {
          "location": {
            "latLng": {
              "latitude": 37.760202,
              "longitude": -122.426796
            }
          }
        },
        "endWaypoint": {
          "location": {
            "latLng": {
              "latitude": 37.760202,
              "longitude": -122.426796
            }
          }
        },
        "costPerHour": 27,
        "startTimeWindows": [
          {
            "startTime": "2024-02-13T07:00:00Z",
            "endTime": "2024-02-13T07:15:00Z"
          }
        ],
        "endTimeWindows": [
          {
            "startTime": "2024-02-13T11:45:00Z",
            "endTime": "2024-02-13T12:00:00Z"
          }
        ]
      }
    ],
    "globalStartTime": "2024-02-13T07:00:00Z",
    "globalEndTime": "2024-02-13T19:00:00Z"
  }
}
EOM

พารามิเตอร์คำขอที่ใช้ในคำขอ

ตารางต่อไปนี้อธิบายพารามิเตอร์คำขอที่ใช้ในเนื้อหาคำขอของ สถานการณ์ตัวอย่าง คุณสามารถกรองเนื้อหาตามโฟลเดอร์หลักหรือตามการค้นหาข้อความ

ผู้ปกครอง พารามิเตอร์ ประเภทพร็อพเพอร์ตี้ คำอธิบาย
OptimizeToursRequest model ออบเจ็กต์ (ShipmentModel) นี่คือหัวใจสำคัญของคำขอ ซึ่งเป็นออบเจ็กต์เดียวที่คุณ กำหนดปัญหาทั้งหมด รวมถึงสุนัขทั้งหมดที่คุณต้องไปรับและ ส่ง (shipments) และรถตู้ในกองยานพาหนะ (vehicles) คิดว่านี่คือพิมพ์เขียวที่สมบูรณ์สำหรับปัญหาที่คุณต้องเพิ่มประสิทธิภาพ
timeout ระยะเวลา พารามิเตอร์นี้ระบุเวลาสูงสุดที่เซิร์ฟเวอร์จะใช้ในการประมวลผลคำขอก่อนที่จะส่งการตอบกลับ ใช้พารามิเตอร์นี้เพื่อลดเวลา รอสาย สำหรับคำขอขนาดเล็กและรวดเร็ว เช่น สถานการณ์รับฝากสุนัขนี้ ให้ตั้งค่านี้เป็น 2 วินาที
ShipmentModel shipments[] อาร์เรย์ของออบเจ็กต์ (Shipment) อาร์เรย์ของออบเจ็กต์ โดยแต่ละออบเจ็กต์แสดงถึงสุนัขที่ ต้องรับหรือส่ง
vehicles[] อาร์เรย์ของออบเจ็กต์ (Vehicle) อาร์เรย์ของออบเจ็กต์ซึ่งแต่ละออบเจ็กต์จะกำหนดรถในกองยานพาหนะ ของคุณ ซึ่งเป็นที่ที่คุณอธิบายทรัพยากร เช่น รถตู้ที่ ใช้รับและส่ง คุณต้องกำหนดรถอย่างน้อย 1 คันเพื่อ รับเส้นทางที่เพิ่มประสิทธิภาพแล้ว
globalStartTime การประทับเวลา นี่คือเวลาที่เร็วที่สุดที่เหตุการณ์ใดๆ ในโมเดลทั้งหมดของคุณจะเกิดขึ้นได้ พารามิเตอร์นี้จะจำกัดปัญหาการเพิ่มประสิทธิภาพ ลงในเวลา ซึ่งมีความสำคัญอย่างยิ่งต่อการคำนวณการเข้าชมและการกำหนดเส้นทาง ที่ถูกต้อง สำหรับสถานการณ์รับส่งสุนัขนี้ ให้ตั้งค่าเป็นเวลาที่เร็วที่สุด ที่คนขับสามารถขับรถตู้ได้ในวันนั้น ซึ่งก็คือ 07:00 น. ของวันที่ 13 กุมภาพันธ์ 2024
globalEndTime การประทับเวลา นี่คือเวลาล่าสุดที่เหตุการณ์ใดๆ ในโมเดลทั้งหมดของคุณจะเกิดขึ้นได้ สำหรับสถานการณ์รับฝากสุนัขนี้ ให้ตั้งค่าเป็นเวลาที่คาดว่ารถตู้จะสิ้นสุดการให้บริการ ซึ่งก็คือ 19:00 น. ของวันที่ 13 กุมภาพันธ์ 2024
Shipment pickups[] อาร์เรย์ของออบเจ็กต์ (VisitRequest) นี่คือรายการตัวเลือกการรับสินค้าทั้งหมดที่เป็นไปได้สำหรับการ จัดส่ง โดยตัวเพิ่มประสิทธิภาพจะเลือกตัวเลือกที่ดีที่สุดเพื่อแก้ปัญหาของคุณ สำหรับ สถานการณ์รับส่งสุนัขนี้ ให้ระบุสถานที่รับส่งและช่วงเวลา ที่เจ้าของแต่ละรายระบุไว้สำหรับสุนัขแต่ละตัว
deliveries[] อาร์เรย์ของออบเจ็กต์ (VisitRequest) นี่คือรายการตัวเลือกการนำส่งที่เป็นไปได้ทั้งหมดสำหรับการ จัดส่ง โดยตัวเพิ่มประสิทธิภาพจะเลือกตัวเลือกที่ดีที่สุดเพื่อแก้ปัญหาของคุณ สำหรับ สถานการณ์รับฝากสุนัขนี้ ให้ระบุสถานที่ตั้งของสถานรับฝากสุนัข และช่วงเวลาที่คนขับต้องกลับมารับสุนัขแต่ละตัวไปทานอาหารกลางวัน
label สตริง นี่คือตัวระบุสำหรับการจัดส่งที่เฉพาะเจาะจงในคำขอของคุณ คุณระบุป้ายกำกับในคำขอเพื่อให้ตอบกลับได้ง่ายขึ้น สำหรับสถานการณ์รับฝากสุนัขนี้ ให้ใช้สตริงอธิบาย เช่น "ชิวาวา" "เบอร์นีสเมาน์เทนด็อก" หรือชื่อสุนัข เพื่อให้ตรงกับ โซลูชันกับอินพุตเมื่อคุณได้รับคำตอบจาก API
VisitRequest arrivalWaypoint[] ออบเจ็กต์ (Waypoint) นี่คือตำแหน่งของการเข้าชมที่เฉพาะเจาะจงในเส้นทาง คุณกำหนดพารามิเตอร์นี้ได้ โดยใช้พิกัดละติจูดและลองจิจูด รหัสสถานที่ หรือส่วนหัว ใน สถานการณ์รับเลี้ยงสุนัขแบบไปกลับนี้ ให้ตั้งค่านี้เป็นสถานที่ที่เจ้าของระบุสำหรับ pickups และตั้งค่าเป็นที่อยู่ของศูนย์รับเลี้ยงเด็กสำหรับ deliveries
timeWindows[] อาร์เรย์ของออบเจ็กต์ (TimeWindow) อาร์เรย์ของออบเจ็กต์ที่กำหนดข้อจำกัดด้านเวลาสำหรับการรับสินค้าหรือ การนำส่ง สำหรับสถานการณ์นี้ ให้ใช้ข้อมูลนี้เพื่อกำหนดช่วงเวลารับสำหรับสุนัขแต่ละตัวและช่วงเวลาที่ยอมรับได้สำหรับการส่งสุนัขไปที่ศูนย์รับเลี้ยง
Vehicle startWaypoint[] ออบเจ็กต์ (Waypoint) นี่คือจุดเริ่มต้นของเส้นทางของยานพาหนะ ซึ่งกำหนดด้วย พิกัดละติจูดและลองจิจูดหรือรหัสสถานที่ พารามิเตอร์นี้จะบอก เครื่องมือเพิ่มประสิทธิภาพว่ายานพาหนะต้องเริ่มเส้นทางที่ใด หากคุณไม่ได้กำหนดจุดอ้างอิงนี้ เครื่องมือเพิ่มประสิทธิภาพจะเลือกจุดรับสินค้าหรือนำส่งอย่างใดอย่างหนึ่งเป็น สถานที่ตั้งเริ่มต้น สำหรับสถานการณ์รับฝากสุนัขนี้ เนื่องจากคนขับ เริ่มวันทำงานที่สถานรับฝาก จึงใช้พิกัดของ สวนสาธารณะมิชชันโดโลเรส
endWaypoint[] ออบเจ็กต์ (Waypoint) นี่คือจุดหมายปลายทางสุดท้ายของเส้นทางยานพาหนะ ซึ่งกำหนดด้วย พิกัดละติจูดและลองจิจูดหรือรหัสสถานที่ พารามิเตอร์นี้จะบอก เครื่องมือเพิ่มประสิทธิภาพว่ายานพาหนะต้องสิ้นสุดเส้นทางที่ใด หากคุณไม่กำหนดจุดอ้างอิงนี้ เครื่องมือเพิ่มประสิทธิภาพจะเลือกจุดรับหรือจุดนำส่งจุดใดจุดหนึ่งเป็น จุดสิ้นสุดของเส้นทาง สำหรับสถานการณ์รับส่งที่สถานรับเลี้ยงสุนัขนี้ เนื่องจากคนขับต้อง สิ้นสุดวันทำงานที่สถานรับเลี้ยงเด็ก จึงให้ใช้พิกัดของ Mission Dolores Park
costPerHour ตัวเลข นี่คือค่าใช้จ่ายที่เกิดขึ้นทุกชั่วโมงที่ใช้ยานพาหนะ ไม่ว่าจะ เดินทางหรือหยุดอยู่ก็ตาม สำหรับสถานการณ์จำลองของศูนย์รับฝากสุนัขนี้ ให้ใช้ เพื่อจำลองค่าจ้างรายชั่วโมงของคนขับรถ
startTimeWindows[] อาร์เรย์ของออบเจ็กต์ (TimeWindow) นี่คือกรอบเวลาที่ยอมรับได้สำหรับคนขับที่จะเริ่มขับรถตู้ เพื่อรับสุนัขในตอนเช้า
endTimeWindows[] อาร์เรย์ของออบเจ็กต์ (TimeWindow) นี่คือช่วงเวลาที่ยอมรับได้สำหรับคนขับรถตู้ในการขับรถให้เสร็จ และจอดรถกลับที่ศูนย์รับฝากสุนัข

ถัดไป

ตีความคำตอบ