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

คู่มือนี้แสดงการใช้งานที่เป็นไปได้ของแอตทริบิวต์การเปลี่ยนผ่าน โดยจะสอนวิธีจำลองสถานการณ์จริงด้วยตัวอย่าง 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 ใช้สำหรับจุดสิ้นสุดของเส้นทาง
  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 เป็นแท็กที่ไม่ได้ใช้ที่ใดก็ได้ในโมเดล ซึ่งจะตรงกับสถานที่ทั้งหมดที่ไม่มีแท็กนี้ แต่เนื่องจากคุณเลือกแท็กที่ไม่มีสถานที่ใดใช้โดยเจตนา แอตทริบิวต์การเปลี่ยนผ่านเหล่านี้จึงตรงกับสถานที่ทั้งหมด

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