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

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

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

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

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

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

  • จุดเริ่มต้นของเส้นทาง
  • จุดจอดรับหรือส่งสินค้า
  • จุดสิ้นสุดของเส้นทาง

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

จำลองสถานการณ์ในชีวิตจริง

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

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

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

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

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