จำลองตรรกะทางธุรกิจด้วยแอตทริบิวต์การเปลี่ยน

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

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

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

การเปลี่ยนผ่านคือส่วนของเส้นทางที่เชื่อมต่อสถานที่หนึ่งไปยังสถานที่ถัดไป

สถานที่หมายถึงจุดใดจุดหนึ่งต่อไปนี้ในเส้นทางของยานพาหนะ

  • จุดเริ่มต้นของเส้นทาง
  • จุดแวะพักที่มีการรับหรือนำส่งพัสดุ
  • จุดสิ้นสุดของเส้นทาง

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

จำลองสถานการณ์ในโลกแห่งความเป็นจริง

ส่วนนี้แสดงตัวอย่างเล็กๆ 2 ตัวอย่างเกี่ยวกับวิธีใช้ข้อจำกัดทางธุรกิจในชีวิตจริงโดยใช้แอตทริบิวต์การเปลี่ยนสถานะ

จองเวลาจอดรถ

ในสถานการณ์นี้ คนขับต้องจอดรถก่อนจึงจะไปที่สถานที่ A ได้ สถานที่ B อยู่ใกล้เคียง และคนขับสามารถใช้ที่จอดรถเดียวกันสำหรับการเข้าชมทั้ง 2 ครั้ง หากคนขับไปที่ B ทันทีหลังจากไปที่ A ก็จะประหยัดเวลาได้เนื่องจากไม่ต้องออกจากจุดจอดรถและจอดรถอีกครั้ง ใน Route Optimization API คุณสามารถใช้แอตทริบิวต์การเปลี่ยนเพื่อเพิ่มเวลาพิเศษในการจอดรถเฉพาะเมื่อคนขับย้ายจากที่จอดรถหนึ่งไปยังอีกที่หนึ่ง

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

ทำตามขั้นตอนต่อไปนี้เพื่อดำเนินการในคำขอ Route Optimization API

  1. ใช้ VisitRequest.duration เฉพาะในช่วงเวลาที่จำเป็นสำหรับการเข้าชมเท่านั้น เช่น เพื่อส่งมอบพัสดุและขอให้ลูกค้าเซ็นชื่อรับพัสดุ

  2. สำหรับที่จอดรถแต่ละแห่งที่ใช้ในโมเดล ให้ใช้แท็กใหม่ที่ไม่ได้ใช้สำหรับสิ่งอื่นใดในโมเดล เช่น PARKING_123

  3. เพิ่มแท็กนี้ลงในรายการต่อไปนี้

    1. VisitRequest.tags ในคำขอเข้าชมทั้งหมดที่ใช้ที่จอดรถนี้

    2. Vehicle.start_tags หากยานพาหนะเริ่มเส้นทางที่จุดจอดรถนี้

    3. Vehicle.end_tags หากยานพาหนะเริ่มต้นหรือสิ้นสุดเส้นทางที่จุดจอดรถนี้

  4. สำหรับแท็กการพักสายใหม่แต่ละแท็ก ให้เพิ่มรายการลงใน ShipmentModel.transition_attributes ที่เพิ่มความล่าช้าในการพักสายเมื่อมาจากจุดพักสายอื่นโดยทำดังนี้

    1. ตั้งค่า TransitionAttributes.excluded_src_tag และ TransitionAttributes.dst_tag เป็น PARKING_123

    2. ตั้งค่า TransitionAttributes.delay เป็นเวลาที่ต้องใช้ในการจอดรถ

    ตัวอย่างเช่น เมื่อแท็กของสถานที่คือ PARKING_123 และใช้เวลา 150 วินาทีในการจอดรถ ให้เพิ่มรายการต่อไปนี้ลงใน ShipmentModel.transition_attributes

    {
      "excluded_src_tag": "PARKING_123",
      "dst_tag": "PARKING_123",
      "delay": "150s"
    }
    

การทำความสะอาดที่จำเป็นเมื่อสิ้นสุดเส้นทาง

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

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

คุณจำลองข้อกำหนดนี้โดยอนุญาตเฉพาะเส้นทางที่ว่างเปล่าหรือมีการเข้าชมครั้งล่าสุดเป็นสถานที่ทำความสะอาด ใน Route Optimization API คุณสามารถทำได้โดยห้ามไม่ให้เปลี่ยนไปยังจุดอ้างอิงสิ้นสุดของเส้นทางจากสถานที่ใดๆ ยกเว้นจากสถานที่ทำความสะอาดหรือจากจุดเริ่มต้นของเส้นทาง ดังนี้

  1. เลือกแท็กใหม่ 2 รายการที่ไม่ได้ใช้ที่ใดเลยในโมเดล เช่น CLEANED และ ROUTE_END โดยแบบแรกใช้สำหรับสถานที่ที่ยานพาหนะสะอาดหรือกลายเป็นสะอาด และแบบหลังใช้สำหรับจุดสิ้นสุดของเส้นทาง
  2. สำหรับยานพาหนะแต่ละคัน ให้เพิ่มการจัดส่งแบบนำส่งเท่านั้นรายการใหม่ที่แสดงถึงการเดินทางไปยังสถานที่ทำความสะอาดพร้อมแอตทริบิวต์ต่อไปนี้
    1. สถานที่ตั้งของสถานที่ทำความสะอาดแต่ละแห่งควรแสดงเป็นคำขอเข้าชมการนำส่งของการจัดส่งนี้
    2. เพิ่ม CLEANED ลงใน VisitRequest.tags ของคำขอเข้าชมแต่ละรายการสำหรับการจัดส่งไปยังสถานที่ทำความสะอาด ซึ่งเป็นสัญญาณว่ายานพาหนะที่ออกจากสถานที่นี้สะอาด คำขอเข้าชมอื่นๆ ในโมเดลไม่ควรใช้แท็กนี้ เพื่อให้ระบบถือว่ายานพาหนะ "ไม่สะอาด" เมื่อออกจากคำขอเหล่านั้น
    3. อนุญาตให้เครื่องมือเพิ่มประสิทธิภาพข้ามการจัดส่งนี้เมื่อยานพาหนะไม่ได้ใช้งานโดยตั้งค่า penalty_cost เป็นตัวเลขน้อยๆ
  3. เพิ่ม CLEANED ไปยัง Vehicle.start_tags สำหรับยานพาหนะแต่ละคัน ซึ่งใช้เพื่อทำเครื่องหมายว่ายานพาหนะสะอาดก่อนที่จะรับหรือนำส่ง โดยสมมติว่ามีการทำความสะอาดเมื่อสิ้นสุดวันทำงานก่อนหน้า และอนุญาตให้ยานพาหนะเดินทางจากจุดอ้างอิงเริ่มต้นไปยังจุดอ้างอิงสิ้นสุดโดยตรง แม้ว่าเส้นทางดังกล่าวจะไม่เกิดขึ้นจริง แต่การอนุญาตสถานการณ์นี้จะช่วยให้เครื่องมือเพิ่มประสิทธิภาพค้นหาเส้นทางที่เพิ่มประสิทธิภาพได้อย่างมีประสิทธิภาพมากขึ้น

  4. เพิ่ม ROUTE_END ลงใน Vehicle.end_tags สำหรับยานพาหนะแต่ละคัน

  5. เพิ่มรายการใหม่ลงใน ShipmentModel.transition_attributes ที่ห้ามไม่ให้ยานพาหนะไปถึงจุดอ้างอิงปลายทางของยานพาหนะเมื่อไม่สะอาด โดยมีพร็อพเพอร์ตี้ต่อไปนี้

    1. ตั้งค่า TransitionAttributes.excluded_src_tag เป็น CLEANED

    2. ตั้งค่า TransitionAttributes.dst_tag เป็น ROUTE_END

    3. ตั้งค่า TransitionAttributes.delay เป็นค่าที่สูง เมื่อคุณตั้งค่าความล่าช้าให้นานกว่าระยะเวลาเส้นทางสูงสุด คุณจะห้ามไม่ให้เครื่องมือเพิ่มประสิทธิภาพใช้การเปลี่ยนนี้ในเส้นทางได้อย่างมีประสิทธิภาพ

    ตัวอย่างเช่น เมื่อสเกลเวลาของโมเดลคือ 1 วันทําการ คุณสามารถใช้การหน่วงเวลา 24 ชั่วโมง (86400 วินาที) เพื่อห้ามไม่ให้เปลี่ยนไปใช้จุดสิ้นสุดของเส้นทางจากที่ใดก็ได้ ยกเว้นสถานที่ทําความสะอาดและจุดเริ่มต้นของเส้นทาง ดังนี้

    {
      "excluded_src_tag": "CLEANED",
      "dst_tag": "ROUTE_END",
      "delay": "86400s"
    }
    

วิธีเลือกระหว่างความล่าช้าและค่าใช้จ่าย

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

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

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

วิธีเพิ่มแอตทริบิวต์การเปลี่ยนผ่านที่ตรงกับคำขอเข้าชมทั้งหมด

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

คุณไม่สามารถละเว้นแท็กได้ เนื่องจากข้อความ TransitionAttributes แต่ละรายการต้องมี TransitionAttributes.src_tag และ TransitionAttributes.excluded_src_tag อย่างใดอย่างหนึ่ง และ TransitionAttributes.dst_tag และ TransitionAttributes.excluded_dst_tag อย่างใดอย่างหนึ่ง

อย่างไรก็ตาม คุณสามารถจับคู่แท็กทั้งหมดได้โดยตั้งค่า TransitionAttributes.excluded_src_tag หรือ TransitionAttributes.excluded_dst_tag เป็นแท็กที่ไม่ได้ใช้ที่ใดเลยในโมเดล ซึ่งจะจับคู่สถานที่ทั้งหมดที่ไม่มีแท็กนี้ แต่เนื่องจากคุณตั้งใจเลือกแท็กที่ไม่มีสถานที่ใดใช้ แอตทริบิวต์การเปลี่ยนสถานะเหล่านี้จึงจะจับคู่กับสถานที่ทั้งหมด

อ่านเพิ่มเติม