แก้ไขปัญหาการกำหนดเวลากะงานที่แก้ไขแล้วของ SolveShiftSchedulingRequest
ที่ระบุโดยกำหนดกะการทำงานให้กับพนักงาน เพื่อให้สามารถเพิ่มประสิทธิภาพกำหนดการของพนักงานให้ได้มากที่สุด และช่วยลดการละเมิดข้อจำกัดการกำหนดเวลา
คำขอ HTTP
POST https://optimization.googleapis.com/v1/scheduling:solveShiftScheduling
URL ใช้ไวยากรณ์การแปลง gRPC
เนื้อหาของคำขอ
เนื้อหาของคำขอมีข้อมูลซึ่งมีโครงสร้างต่อไปนี้
การแสดง JSON |
---|
{ "requestId": string, "solveParameters": { object ( |
ช่อง | |
---|---|
requestId |
ปัญหาหรือรหัสคำขอ |
solveParameters |
พารามิเตอร์สำหรับควบคุมวิธีแก้โจทย์รายการเดียว |
employees[] |
พนักงานทั้งหมดว่างที่จะนัดหมาย |
shifts[] |
เปลี่ยนทุกการเคลื่อนไหวเพื่อสร้างตารางเวลา |
coverageRequirements[] |
ข้อกําหนดการครอบคลุมสําหรับขอบเขตการวางแผนทั้งหมด ข้อมูลเหล่านี้จะระบุจำนวนพนักงานที่ต้องทำแต่ละบทบาทหรือมีทักษะ ในระหว่างกรอบเวลาหรือรายการรหัสกะการทำงาน ข้อกำหนดการครอบคลุมทั้งหมดต้องระบุกรอบเวลาหรือรายการรหัส Shift (แต่ไม่ใช่ทั้ง 2 อย่าง) กรอบเวลา (หากมี) ของข้อกําหนดด้านการครอบคลุมของสถานที่ตั้งแต่ละแห่งต้องไม่เหลื่อมซ้อนกัน ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ |
roleIds[] |
รายการบทบาทที่เป็นไปได้ทั้งหมดในทีม พนักงานแต่ละคนต้องมีอย่างน้อย 1 บทบาทที่สามารถได้รับมอบหมายสำหรับกะ บทบาทหมายถึงการมอบหมายงานเฉพาะในระหว่างกะ (เช่น พยาบาลวิชาชีพ เชฟผู้บริหาร บริกร ฯลฯ) เมื่อมีการกำหนดให้พนักงานเข้ากะ พนักงานเหล่านั้นจะได้รับการมอบหมายเฉพาะบทบาทเดียวด้วย |
skillIds[] |
รายการทักษะที่เป็นไปได้ทั้งหมดของบุคลากร ทักษะหมายถึงคุณสมบัติพิเศษใดๆ ที่พนักงานอาจมี ซึ่งไม่เกี่ยวข้องกับงานที่ได้รับมอบหมายเฉพาะ (เช่น ใบรับรอง ภาษาที่พูด เป็นต้น) รายการนี้ว่างเปล่าได้ เมื่อมีการกำหนดให้พนักงานเข้ากะ พนักงานเหล่านั้นจะต้องพัฒนาทักษะทั้งหมดที่จำเป็นสำหรับกะนั้น |
locationIds[] |
รายการตำแหน่งที่เป็นไปได้ทั้งหมดสำหรับชุดการเปลี่ยนแปลงในกำหนดการ รายการนี้ว่างเปล่าได้ การระบุสถานที่ตั้งที่แตกต่างกันอาจมีประโยชน์ เช่น ในกรณีที่ผู้จัดการพยาบาลต้องการจัดตารางเวลาสำหรับพยาบาลหลายคนในหน่วยงานต่างๆ ของโรงพยาบาล หรืออีกตัวอย่างหนึ่งในกรณีที่ผู้จัดการโรงแรมต้องการกำหนดเวลาให้พนักงานทำงานในหลายโรงแรม |
budgetRequirements[] |
ข้อมูลจำเพาะของงบประมาณสำหรับปัญหาในการกำหนดเวลา ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อกำหนดเหล่านี้คือ |
assignmentsHint[] |
การมอบหมายกะการทำงานที่จะใช้เป็นวิธีแก้ปัญหาเบื้องต้น (หรือที่เรียกว่าคำแนะนำโซลูชัน) สำหรับโจทย์การกำหนดเวลา ระบบจะไม่สนใจคำแนะนำของงาน หากงานนั้นขัดแย้งกับกะการทำงานที่มอบหมายไม่ได้หรือคำขอกำหนดเวลา |
เนื้อหาการตอบกลับ
การตอบกลับสำหรับ API การกำหนดเวลาพนักงาน สำหรับคำตอบแต่ละรายการ shiftAssignments
จะว่างเปล่า หาก solutionStatus
ที่แสดงผลเป็น NOT_SOLVED_DEADLINE_EXCEEDED
หรือ INFEASIBLE
หาก solutionStatus
ที่ส่งคืนคือ OPTIMAL
หรือ FEASIBLE
ระบบจะส่งงาน Shift ที่ถูกต้องใน shiftAssignments
ในการกำหนดกะการทำงานที่ถูกต้อง พร็อพเพอร์ตี้ต่อไปนี้จะยังคงมีผล
- รหัสพนักงานแต่ละรหัสจะอยู่ในกลุ่มพนักงานที่ระบุไว้ในคำขอ
- รหัสบทบาทแต่ละรหัสที่กำหนดให้กับพนักงานจะอยู่ในชุดรหัสบทบาทของพนักงานรายนั้นๆ
- รหัส Shift แต่ละรายการจะอยู่ในชุดของกะที่ระบุในคำขอ
- รหัสกะการทำงานแต่ละรายการไม่ใช่รหัสของกะการทำงานที่ไม่สามารถมอบหมายได้ของพนักงานที่กำหนด
- พนักงานจะไม่ได้รับมอบหมายให้ทำงาน 2 กะที่ทับซ้อนกัน
- สำหรับกำหนดเวลาที่ระบุ จะไม่มีการละเมิดข้อกำหนดหรือคำขอที่มีระดับความสำคัญเป็น
PRIORITY_MANDATORY
หากทำสำเร็จ เนื้อหาการตอบกลับจะมีข้อมูลซึ่งมีโครงสร้างดังต่อไปนี้
การแสดง JSON |
---|
{ "requestId": string, "solutionStatus": enum ( |
ช่อง | |
---|---|
requestId |
รหัสของคำขอที่เชื่อมโยงกับการตอบกลับนี้ |
solutionStatus |
สถานะของโซลูชันที่แสดงผล หากคำตอบไม่ใช่ "ง่าย" หรือ "เหมาะสมที่สุด" ช่องอื่นๆ ใน Proto นี้อาจว่างเปล่า หากสถานะเป็น NOT_SOLVED_DEADLINE_EXCEEDED แสดงว่าถึงขีดจำกัดเวลาแล้วโดยไม่พบวิธีแก้ปัญหาที่เป็นไปได้หรือพิจารณาว่ามีวิธีแก้ปัญหาที่เป็นไปได้หรือไม่ คำขออาจไม่สามารถทำตามได้หากไม่เป็นไปตามข้อจำกัดของระดับความสำคัญ |
shiftAssignments[] |
รายการงานทั้งหมด |
statusMessage |
หาก |
SolveParameters
พารามิเตอร์ที่ควบคุมการแก้ปัญหาการกำหนดเวลากะการทำงานเพียงวิธีเดียว
การแสดง JSON |
---|
{ "timeLimit": string } |
ช่อง | |
---|---|
timeLimit |
เวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้ในการแก้โจทย์ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น 1 นาที ค่านี้ไม่ใช่ค่าจำกัดแบบเข้มงวด และไม่ได้คำนึงถึงค่าใช้จ่ายในการสื่อสาร เวลาในการตอบสนองที่คาดไว้ในการแก้ปัญหาอาจสูงกว่าค่านี้เล็กน้อย ระยะเวลาเป็นวินาทีที่มีเลขเศษส่วนไม่เกิน 9 หลัก ลงท้ายด้วย " |
พนักงาน
พนักงานจากคณะทำงานที่จะมีกำหนดการ
การแสดง JSON |
---|
{ "id": string, "roleIds": [ string ], "skillIds": [ string ], "shiftPreferences": [ { object ( |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้พนักงานรายนี้ |
roleIds[] |
รหัสบทบาทที่พนักงานรายนี้ใช้ได้ ต้องระบุอย่างน้อย 1 บทบาท เมื่อมีการมอบหมายให้พนักงานเข้ากะ พนักงานเหล่านี้ก็จะได้รับการมอบหมายบทบาทใดบทบาทหนึ่งจากรายการนี้ด้วย อาจมีการกำหนดบทบาทต่างๆ ให้กับพนักงานในระหว่างกรอบเวลาการนัดหมาย |
skillIds[] |
รหัสทักษะที่พนักงานรายนี้มี รายการนี้ว่างเปล่าได้ เมื่อมีการกำหนดให้พนักงานเข้ากะ พวกเขาจะใช้ทักษะย่อยใดๆ ที่ระบุไว้ที่นี่เพื่อให้ครอบคลุมความต้องการด้านทักษะตลอดระยะเวลาของกะการทำงานที่ได้รับมอบหมาย |
shiftPreferences[] |
เปลี่ยนการตั้งค่าของพนักงานคนนี้ กะที่ระบุที่นี่แสดงถึงกะที่พนักงานจะต้องการทำงานในช่วงกรอบเวลาการนัดหมาย รหัส Shift ที่ระบุใน |
schedulingConstraints[] |
รายการข้อจำกัดการกำหนดเวลาสำหรับพนักงานรายนี้ ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ |
resourceConstraints[] |
เพิ่มข้อจำกัดการกำหนดเวลาอื่นๆ ที่ไม่ได้ระบุใน |
shiftRequests[] |
รายการคำขอกะการทำงานสำหรับพนักงาน คำขออาจมอบหมายให้พนักงานคนหนึ่งๆ ถูกมอบหมายหรือไม่อาจมอบหมายให้กะกะที่เจาะจงก็ได้ ส่วนงานมอบหมายที่กำหนดเวลาที่แน่นอนสำหรับพนักงานจะใช้ |
hourlyContract |
สัญญาที่ระบุอัตราค่าบริการรายชั่วโมงตามปกติและค่าล่วงเวลาสำหรับพนักงาน |
ShiftPreference
ค่ากำหนดที่เป็นตัวเลขสำหรับรหัส Shift หนึ่งๆ
การแสดง JSON |
---|
{ "shiftId": string, "preference": integer } |
ช่อง | |
---|---|
shiftId |
รหัส Shift ที่ระบุค่ากำหนด |
preference |
ค่ากําหนดที่มากกว่าหมายถึงการเปลี่ยนแปลงที่ต้องการมากกว่า |
SchedulingConstraint
ข้อจำกัดการกำหนดเวลาที่เฉพาะเจาะจงสำหรับพนักงานบางคน ข้อจำกัดที่ระบุจะใช้ในระหว่างช่วง [startDateTime,
endDateTime)
ที่กำหนดเท่านั้น
การแสดง JSON |
---|
{ "priority": enum ( |
ช่อง | |
---|---|
priority |
ระดับความสำคัญสำหรับข้อจำกัดการกำหนดเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดการกำหนดเวลาทั้งหมดคือ |
startDateTime |
เวลาเริ่มต้นสำหรับเวลาที่ข้อจำกัดการกำหนดเวลานี้มีผล (รวม) |
endDateTime |
เวลาสิ้นสุดที่ข้อจำกัดการกำหนดเวลานี้มีผล (ไม่รวม) |
ฟิลด์สหภาพ type ประเภทของข้อจำกัดที่ระบุ และจะใช้ข้อจำกัดแต่ละข้อภายในกรอบเวลาที่ระบุไว้ข้างต้นเท่านั้น type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้เท่านั้น |
|
minimumMinutes |
จำนวนนาทีขั้นต่ำที่พนักงานทำงานได้ หากพนักงานได้รับมอบหมายให้ทำงานกะที่ทับซ้อนกัน (ทั้งหมดหรือบางส่วน) จำนวนนาทีที่การทำงานนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้ |
maximumMinutes |
จำนวนนาทีสูงสุดที่พนักงานจะทำงานได้ในกรอบเวลา หากพนักงานได้รับมอบหมายให้ทำงานกะที่ทับซ้อนกัน (ทั้งหมดหรือบางส่วน) จำนวนนาทีที่การทำงานนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้ |
minimumConsecutiveWorkDays |
จำนวนวันขั้นต่ำต่อเนื่องที่พนักงานทำงานได้ พนักงานจะทำงานในวันที่กำหนดหากมีการกำหนดให้เข้ากะที่เริ่มต้นในวันนั้น กะที่พนักงานได้รับมอบหมายที่เริ่มในกรอบเวลาจะรวมอยู่ในจำนวนนี้ |
maximumConsecutiveWorkDays |
จำนวนวันสูงสุดที่พนักงานทำงานได้ติดต่อกัน พนักงานจะทำงานในวันที่กำหนดหากมีการกำหนดให้เข้ากะที่เริ่มต้นในวันนั้น กะที่พนักงานได้รับมอบหมายที่เริ่มในกรอบเวลาจะรวมอยู่ในจำนวนนี้ |
minimumShiftCount |
จำนวนกะขั้นต่ำที่พนักงานทำงานได้ กะที่พนักงานได้รับมอบหมายซึ่งทับซ้อนกับกรอบเวลาทั้งหมดจะรวมอยู่ในจำนวนนี้ |
maximumShiftCount |
จำนวนกะการทำงานสูงสุดที่พนักงานทำงานได้ กะที่พนักงานได้รับมอบหมายซึ่งทับซ้อนกับกรอบเวลาทั้งหมดจะรวมอยู่ในจำนวนนี้ |
minimumRestMinutes |
จำนวนนาทีขั้นต่ำที่พนักงานต้องพักหลังสิ้นสุดกะการทำงานหนึ่งก่อนที่จะมอบหมายให้ไปทำงานกะอื่น ข้อจำกัดนี้มีผลกับทุกคู่ของกะที่รวมอยู่ใน [ |
ลำดับความสำคัญ
ระดับความสำคัญสำหรับข้อจำกัดในตารางเวลาของพนักงานหรือข้อกำหนดการครอบคลุม ซึ่งได้แก่ SchedulingConstraint
, ResourceConstraint
, ShiftRequest
และ CoverageRequirement
เนื่องจากอาจมีข้อจำกัดที่ขัดแย้งกัน จึงไม่สามารถบรรลุทุกข้อจำกัดได้เสมอไป ด้วยเหตุนี้ ข้อจำกัดแต่ละประเภทจึงมีลำดับความสำคัญ (ตามผู้ใช้หรือค่าเริ่มต้น) ซึ่งแจ้งให้เครื่องมือแก้โจทย์คณิตเกี่ยวกับความสำคัญที่เกี่ยวข้องของข้อจำกัดทั้งหมดที่กำหนดในกำหนดการที่สมบูรณ์
Enum | |
---|---|
PRIORITY_UNSPECIFIED |
ไม่รู้จักระดับความสำคัญ |
PRIORITY_LOW |
ระดับความสำคัญต่ำสุด ข้อจำกัดที่มีลำดับความสำคัญนี้มีความสำคัญน้อยกว่าข้อจำกัดอื่นๆ หากไม่พบวิธีแก้ปัญหาที่เป็นไปได้ |
PRIORITY_MEDIUM |
ระดับความสำคัญปานกลาง ข้อจำกัดที่มีลำดับความสำคัญนี้มีความสำคัญมากกว่าข้อจำกัดที่มีลำดับความสำคัญ PRIORITY_LOW แต่สำคัญน้อยกว่าข้อจำกัดที่มีลำดับความสำคัญ PRIORITY_HIGH หากไม่พบวิธีแก้ไขที่สามารถทำได้หลังจากผ่อนปรนข้อจำกัดทั้งหมดด้วยลำดับความสำคัญ PRIORITY_LOW แล้ว ข้อจำกัดที่มีลำดับความสำคัญ PRIORITY_MEDIUM จะได้รับการพิจารณาเป็นลำดับถัดไปสำหรับการละเมิด |
PRIORITY_HIGH |
ระดับความสำคัญสูงสุด ข้อจำกัดในระดับความสำคัญนี้เป็นสิ่งสำคัญที่สุด และเป็นผู้สุดท้ายที่เราจะพิจารณาการละเมิดหากไม่พบวิธีแก้ปัญหาที่สามารถทำได้หลังจากผ่อนปรนข้อจำกัดในลำดับความสำคัญที่ต่ำกว่า |
PRIORITY_MANDATORY |
ระดับความสำคัญซึ่งแสดงถึงบางสิ่งที่เครื่องมือแก้โจทย์คณิตไม่สามารถละเมิดได้ หากตัวแก้โจทย์แสดงผล SolutionStatus.INFEASIBLE อาจเป็นเพราะข้อจำกัด PRIORITY_MANDATORY มากเกินไป |
ResourceConstraint
ข้อจำกัดทั่วไปที่จำกัดจำนวน "ทรัพยากร" ที่พนักงานใช้ นี่คือเวอร์ชันเชิงนามธรรมของ SchedulingConstraint
ที่เจาะจงมากขึ้นซึ่งมีความยืดหยุ่นมากกว่าสำหรับผู้ใช้ คุณสามารถระบุข้อจำกัดการกำหนดเวลาหลายรายการที่ไม่สามารถระบุใน SchedulingConstraint.type
ได้โดยใช้ข้อความนี้แทน
การแสดง JSON |
---|
{
"priority": enum ( |
ช่อง | |
---|---|
priority |
ระดับความสำคัญของข้อจำกัดทรัพยากรนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดทรัพยากรทั้งหมดคือ |
resourceUsages |
จำนวนทรัพยากรที่ใช้ไปในกะ ตัวอย่างเช่น ถ้าข้อจำกัดนี้มีผลกับจำนวนชั่วโมงต่ำสุดและสูงสุดที่พนักงานทำงานในสัปดาห์หนึ่งๆ แผนที่นี้จะมีข้อมูลการเปลี่ยนแปลงที่เกิดขึ้นในสัปดาห์นั้น และระยะเวลาในแต่ละกะเป็นชั่วโมง ออบเจ็กต์ที่มีรายการคู่ |
minimumResourceUsage |
การใช้งานทรัพยากรขั้นต่ำเพื่อให้เป็นไปตามข้อจำกัดทรัพยากร |
maximumResourceUsage |
การใช้งานทรัพยากรสูงสุดสำหรับข้อจำกัดทรัพยากรที่สามารถทำได้ |
ShiftRequest
คำขอมอบหมายงานหรือไม่ได้รับการมอบหมายของพนักงานในกะเฉพาะ
การแสดง JSON |
---|
{ "priority": enum ( |
ช่อง | |
---|---|
priority |
ระดับความสำคัญของคำขอกำหนดเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับคำขอที่กำหนดเวลาไว้ทั้งหมดคือ |
shiftIds[] |
รหัส Shift ของคำขอกำหนดเวลา |
type |
ประเภทคำขอ เช่น มีการกำหนดคำขอให้กับกลุ่มกะหรือไม่ |
WorkStatus
ดูว่าพนักงานกำลังทำงานหรือไม่
Enum | |
---|---|
WORK_STATUS_UNSPECIFIED |
ไม่ทราบสถานะงาน |
STATUS_WORK |
สถานะที่แสดงถึงพนักงานที่ทำงานอยู่ |
STATUS_NOT_WORK |
สถานะที่แสดงถึงพนักงานที่ไม่ได้ทำงาน |
HourlyContract
ระบุอัตรารายชั่วโมงพื้นฐาน ส่วนต่างอัตรา และตัวคูณช่วงเวลาทำงานเพื่อกำหนดค่าตอบแทนสำหรับพนักงาน หมายเหตุ: ข้อบังคับต่างๆ อาจกำหนดให้ต้องมีการคำนวณค่าตอบแทนสำหรับค่าล่วงเวลาที่แตกต่างออกไป เครื่องมือแก้โจทย์คณิตประมาณค่าตอบแทนตลอดช่วงชีวิตเพื่อลดค่าแทนของค่าใช้จ่ายทั้งหมดหรือใช้จ่ายถึงงบประมาณ (ดู BudgetRequirement
) ไม่ได้ใช้เพื่อเป็นเครื่องมือในการคำนวณเงินเดือน
การแสดง JSON |
---|
{
"baseHourlyRate": number,
"hourlyRateShiftDifferentials": {
string: number,
...
},
"overtimePeriods": [
{
object ( |
ช่อง | |
---|---|
baseHourlyRate |
ค่าตอบแทนสำหรับการทำงานนอกเวลาทำงาน หากพนักงานมีหลายอัตรา ระบบจะใช้ส่วนต่างของราคาเทียบกับอัตรารายชั่วโมงพื้นฐานนี้ นอกจากนี้ หากมีหลายราคา อัตรารายชั่วโมงพื้นฐานควรเป็นอัตราต่ำสุดของอัตราเหล่านี้ |
hourlyRateShiftDifferentials |
ส่วนต่างของราคารายชั่วโมง ซึ่งจ่ายเพิ่มเติมจาก ออบเจ็กต์ที่มีรายการคู่ |
overtimePeriods[] |
รายการระยะเวลาทั้งหมดที่ต้องมีการคำนวณค่าล่วงเวลา ช่วงเวลาเหล่านี้ต้องไม่ทับซ้อนกัน |
OvertimePeriod
ระยะเวลาที่กำหนดไว้เป็นประจำและเกิดซ้ำ (โดยทั่วไปคือ 168 ชั่วโมงหรือ 24 ชั่วโมงต่อเนื่องกัน 24 ชั่วโมง) ซึ่งใช้ในการกำหนดจำนวนค่าตอบแทนเมื่อเวลาผ่านไป แต่ละช่วงเวลาจะมีตัวคูณช่วงเวลาทำงาน (เช่น 1.5) เมื่อเทียบกับ baseHourlyRate
และขีดจำกัดของจำนวนชั่วโมงที่ถือว่าเป็นงานปกติ (ไม่ใช่ทำงานเกินเวลา) การเปลี่ยนแปลงใดๆ ที่ซ้อนทับกับกรอบเวลา startDateTime
(รวม) และ endDateTime
(ไม่รวม) จะนับรวมอยู่ในจำนวนชั่วโมงทั้งหมดที่ทำงานในช่วงระยะเวลานั้น หากการทับซ้อนกันเพียงบางส่วน ระบบจะนับเฉพาะชั่วโมงที่ทับซ้อนกันเท่านั้น
การแสดง JSON |
---|
{ "overtimeMultiplier": number, "startDateTime": { object ( |
ช่อง | |
---|---|
overtimeMultiplier |
ตัวคูณที่ใช้คำนวณอัตราต่อชั่วโมงต่อช่วงเวลา (ต้องมากกว่าหรือเท่ากับ 1.0) โดยทั่วไปอัตรารายชั่วโมงจะคำนวณเป็น |
startDateTime |
เวลาเริ่มต้นสำหรับช่วงต่อเวลา หากการเปลี่ยนแปลงคาบเกี่ยวกันในครั้งนี้ จะนับชั่วโมงของการเปลี่ยนแปลงดังกล่าวจาก |
endDateTime |
เวลาสิ้นสุดสำหรับช่วงต่อเวลา หากการเปลี่ยนแปลงคาบเกี่ยวกันในครั้งนี้ จะนับชั่วโมงของการเปลี่ยนแปลงนั้นสูงสุด |
maximumRegularHours |
จำนวนเวลาทำงานสูงสุดที่จ่ายในอัตราปกติ (ไม่ใช่ทำงานล่วงเวลา) จำนวนนี้ต้องเป็นค่าบวก |
Shift
กะการทำงานจะระบุกรอบเวลาที่คงที่ซึ่งพนักงานจะทำงานได้
การแสดง JSON |
---|
{ "id": string, "locationId": string, "startDateTime": { object ( |
ช่อง | |
---|---|
id |
รหัสที่ไม่ซ้ำกันที่กำหนดให้การเปลี่ยนแปลงนี้ |
locationId |
รหัสสถานที่ตั้งที่การเปลี่ยนแปลงนี้มีผล ช่องนี้สามารถเว้นว่างได้ |
startDateTime |
เวลาเริ่มต้นของกะ (รวม) |
endDateTime |
เวลาสิ้นสุดของการเปลี่ยนแปลง (ไม่รวม) ขณะนี้เครื่องมือแก้โจทย์คณิตอนุญาตให้เล่นในกะที่สั้นกว่า 24 ชั่วโมงเท่านั้น |
breakRules[] |
รายการกฎช่วงพักที่เกิดขึ้นระหว่างการเปลี่ยนแปลง พนักงานที่ทำการเปลี่ยนแปลงนี้จะได้รับการพักการทำงานทุกๆ |
BreakRule
กฎที่กําหนดว่าช่วงพักหนึ่งๆ จะเริ่มต้นได้ในกะและระยะเวลาของช่วงพักเมื่อใด รายการของช่วงพักที่เป็นไปได้ทั้งหมดที่ถือว่าอยู่จะคิดเพิ่มขึ้นทีละ ruleIncrementMinutes
ตัวอย่างเช่น ถ้ากฎช่วงพักโฆษณากำลังจำลองช่วงพักโฆษณา 30 นาทีที่สามารถเริ่มต้นระหว่าง 10:00 ถึง 11:00 และการเพิ่มของกฎเป็น 20 นาที รายการช่วงพักที่ถือว่าได้คือ [10:00, 10:30], [10:20, 10:50], [10:40, 1.0]
การแสดง JSON |
---|
{ "earliestStartTime": { object ( |
ช่อง | |
---|---|
earliestStartTime |
เวลาเริ่มต้นของการพักเร็วที่สุด (รวม) ตั้งค่าได้เฉพาะ |
latestStartTime |
เวลาเริ่มต้นล่าสุดของช่วงพัก (รวมด้วย) ตั้งค่าได้เฉพาะ |
durationMinutes |
ระยะเวลาของช่วงพักเป็นนาที |
ruleIncrementMinutes |
[ไม่บังคับ] การเพิ่มเวลาเป็นนาทีสำหรับช่วงพักทั้งหมดที่พิจารณาได้ในกฎช่วงพักนี้ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น |
CoverageRequirement
ข้อกำหนดด้านความคุ้มครองจะระบุจำนวนพนักงานที่จำเป็นสำหรับบทบาทและ/หรือทักษะในระยะเวลาที่กำหนดและในสถานที่หนึ่งๆ ช่วงเวลาของวันที่และเวลา ณ สถานที่ใดสถานที่หนึ่งจะทับซ้อนกันไม่ได้ หรือจะระบุรายการรหัส Shift แทนกรอบเวลาและสถานที่ก็ได้ มีเพียงพนักงานที่ได้รับมอบหมายตามบทบาทที่เฉพาะเจาะจง (หรือที่มีทักษะเฉพาะ) เท่านั้นที่จะทำตามข้อกำหนดนี้ได้
สำหรับบทบาทและ/หรือทักษะที่กำหนด ข้อกำหนดด้านความคุ้มครองจะได้รับการปฏิบัติตามเมื่อพนักงานอย่างน้อย targetEmployeeCount
คนทำงานในช่วงเวลาของกรอบเวลา (หรือสำหรับทุกๆ กะของshiftIds
) ในทางตรงกันข้าม ข้อกำหนดความคุ้มครองจะถูกละเมิดหากมีในระหว่างกรอบเวลา (หรือสำหรับกะใดๆ ใน shiftIds
) มีพนักงานน้อยกว่า targetEmployeeCount
คนที่ทำงานในกรอบเวลานั้น พนักงานที่ทำงานมากกว่า targetEmployeeCount
คนยังคงปฏิบัติตามข้อกำหนดได้ แต่เครื่องมือแก้โจทย์คณิตมีจำนวนพนักงานมากเกินไป
การแสดง JSON |
---|
{ "startDateTime": { object ( |
ช่อง | |
---|---|
startDateTime |
เวลาเริ่มต้นสำหรับข้อกำหนดด้านการคุ้มครอง (รวม) หากตั้งค่า |
endDateTime |
เวลาสิ้นสุดสำหรับข้อกำหนดการครอบคลุม (ไม่รวม) หากตั้งค่า |
locationId |
สถานที่ที่ต้องการพนักงาน |
shiftIds[] |
หากตั้งค่าไว้ บทบาทและทักษะจะถูกนำไปใช้กับรหัส Shift ทั้งหมดในรายการนี้ กรณีที่ ShiftId ไม่ว่างเปล่า ค่า |
roleRequirements[] |
จำนวนพนักงานที่กำหนดซึ่งได้รับการกำหนดตามบทบาทที่ระบุในกรอบเวลา ต้องระบุ |
skillRequirements[] |
จำนวนพนักงานที่กำหนดซึ่งมีทักษะตามที่ระบุและได้รับการกำหนดให้เข้ากะในกรอบเวลา ต้องระบุ |
RoleRequirement
จำนวนพนักงานที่จำเป็นจะได้รับการมอบหมายบทบาทที่ระบุไว้ระหว่างกรอบเวลา
การแสดง JSON |
---|
{
"roleId": string,
"targetEmployeeCount": integer,
"priority": enum ( |
ช่อง | |
---|---|
roleId |
รหัสบทบาทสำหรับข้อกำหนด |
targetEmployeeCount |
จำนวนพนักงานที่ต้องการได้รับมอบหมายบทบาทในช่วงเวลานั้น |
priority |
ระดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดทรัพยากรทั้งหมดคือ |
SkillRequirement
จำนวนพนักงานที่กำหนดที่ทำงานในช่วงเวลาดังกล่าวและมีทักษะตามที่ระบุ
การแสดง JSON |
---|
{
"skillId": string,
"targetEmployeeCount": integer,
"priority": enum ( |
ช่อง | |
---|---|
skillId |
รหัสทักษะของข้อกำหนด |
targetEmployeeCount |
จำนวนพนักงานที่ต้องการพร้อมทักษะที่กำหนดซึ่งทำงานอยู่ในกรอบเวลานั้น |
priority |
ระดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดทรัพยากรทั้งหมดคือ |
BudgetRequirement
ข้อกำหนดด้านงบประมาณสำหรับช่วงเวลาที่กำหนด
การแสดง JSON |
---|
{ "totalBudget": number, "startDateTime": { object ( |
ช่อง | |
---|---|
totalBudget |
งบประมาณทั้งหมดสำหรับช่วงเวลาที่ระบุ ต้องระบุงบประมาณรวมหากลำดับความสำคัญคือ หากไม่ได้ตั้งค่า |
startDateTime |
เวลาเริ่มต้นที่จะใช้งบประมาณนี้ หากไม่ได้ระบุเวลาเริ่มต้น ระบบจะกำหนดให้เป็นเวลาเริ่มต้นเร็วที่สุดของกะทั้งหมด |
endDateTime |
เวลาสิ้นสุดที่จะใช้งบประมาณนี้ หากไม่ได้ระบุเวลาสิ้นสุด ระบบจะตั้งค่าเป็นเวลาสิ้นสุดสุดท้ายของการเปลี่ยนแปลงทั้งหมด |
priority |
ระดับความสำคัญเพื่อให้เป็นไปตามข้อกำหนดด้านงบประมาณในกรอบเวลาที่ระบุ ลำดับความสำคัญเริ่มต้นคือ โปรดทราบว่าหากลำดับความสำคัญนี้สูงกว่าลำดับความสำคัญของข้อจำกัดอื่นๆ และหาก |
ShiftAssignment
พนักงานที่จะเข้ารับหน้าที่ประจำ
การแสดง JSON |
---|
{
"employeeId": string,
"shiftId": string,
"roleId": string,
"breaks": [
{
object ( |
ช่อง | |
---|---|
employeeId |
รหัสพนักงานที่กำหนด |
shiftId |
รหัส Shift ที่กำหนดให้กับพนักงาน |
roleId |
รหัสบทบาทที่พนักงานได้รับมอบหมายสำหรับกะ |
breaks[] |
รายการช่วงพักสำหรับงานกะนี้ |
พัก
ระยะเวลาที่พนักงานขัดจังหวะการทำงานระหว่างกะ
การแสดง JSON |
---|
{
"startDateTime": {
object ( |
ช่อง | |
---|---|
startDateTime |
เวลาเริ่มต้นของการพัก |
durationMinutes |
ระยะเวลาของช่วงพักเป็นนาที |
SolutionStatus
สถานะโซลูชัน (กำหนดการ) ที่ให้ไว้ในคำตอบของเครื่องมือแก้โจทย์
Enum | |
---|---|
SOLUTION_STATUS_UNSPECIFIED |
สถานะที่ไม่ได้ระบุสำหรับคำตอบ |
FEASIBLE |
กำหนดเวลาที่แสดงผลเป็นไปได้ แต่อาจไม่เหมาะสม |
OPTIMAL |
กำหนดเวลาที่แสดงผลเหมาะสมที่สุด |
INFEASIBLE |
ไม่มีกำหนดการที่เป็นไปได้สำหรับข้อจำกัดที่ระบุ เครื่องมือแก้โจทย์คณจะแสดงค่านี้หากไม่เป็นไปตามเงื่อนไขย่อยของข้อจำกัดที่มีระดับความสำคัญเป็น PRIORITY_MANDATORY |
NOT_SOLVED |
ไม่พบกำหนดการ |
NOT_SOLVED_DEADLINE_EXCEEDED |
ไม่พบกำหนดการในเวลาที่กำหนด |