Package google.research.optimization.v1.workforce

ดัชนี

พัก

ระยะเวลาที่พนักงานขัดจังหวะการทำงานระหว่างกะ

ช่อง
start_date_time

DateTime

เวลาเริ่มต้นของช่วงพัก

duration_minutes

int32

ระยะเวลาของช่วงพักเป็นนาที

BreakRule

กฎที่กำหนดว่าช่วงพักสามารถเริ่มต้นภายในกะและระยะเวลาของช่วงพักได้ รายการช่วงพักทั้งหมดที่เป็นไปได้ซึ่งนำมาพิจารณาจะพิจารณาเพิ่มขึ้นทีละ rule_increment_minutes เช่น ถ้ากฎช่วงพักโฆษณาเป็นการสร้างแบบจำลองช่วงพัก 30 นาทีที่สามารถเริ่มต้นระหว่าง 10:00 ถึง 11:00 น. และกฎเพิ่มขึ้น 20 นาที รายการช่วงพักที่นำมาพิจารณา ได้แก่ [10:00, 10:30], [10:20, 10:50], [10:40], 1:40]

ช่อง
earliest_start_time

DateTime

เวลาเริ่มต้นเร็วที่สุดของช่วงพัก (รวม) ตั้งค่าได้เฉพาะ hours และ minutes เท่านั้น

latest_start_time

DateTime

เวลาเริ่มต้นล่าสุดของช่วงพัก (รวม) ตั้งค่าได้เฉพาะ hours และ minutes เท่านั้น

duration_minutes

int32

ระยะเวลาของช่วงพักเป็นนาที

rule_increment_minutes

int32

[ไม่บังคับ] เวลาที่เพิ่มขึ้นเป็นนาทีสำหรับช่วงพักทั้งหมดที่จะพิจารณาในกฎช่วงพักโฆษณานี้ได้ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น duration_minutes

BudgetRequirement

ข้อกำหนดด้านงบประมาณสำหรับช่วงเวลาที่ระบุ

ช่อง
total_budget

double

งบประมาณทั้งหมดสำหรับช่วงเวลาที่ระบุ ต้องระบุงบประมาณรวมหากลำดับความสำคัญคือ PRIORITY_MANDATORY

หากไม่ได้ตั้งค่า total_budget ค่าใช้จ่ายรวมของกำหนดการจะลดลงตาม priority ที่ระบุ ตัวอย่างเช่น หาก priority ของงบประมาณคือ PRIORITY_MEDIUM เครื่องมือแก้โจทย์จะลดต้นทุนก่อนที่จะลดการละเมิดข้อจำกัดที่มีลำดับความสำคัญ PRIORITY_LOW

start_date_time

DateTime

เวลาเริ่มต้นที่งบประมาณนี้จะใช้ หากไม่ได้ระบุเวลาเริ่มต้น ระบบจะกำหนดให้เวลาเริ่มต้นเร็วที่สุดของกะทั้งหมด

end_date_time

DateTime

เวลาสิ้นสุดที่งบประมาณนี้จะใช้ หากไม่ได้ระบุเวลาสิ้นสุด ระบบจะตั้งค่าเป็นเวลาสิ้นสุดล่าสุดของกะทั้งหมดที่ระบุ

priority

Priority

ระดับความสำคัญเพื่อให้เป็นไปตามข้อกำหนดด้านงบประมาณในกรอบเวลาที่ระบุ ลำดับความสำคัญเริ่มต้นคือ PRIORITY_LOW หากตั้งค่าลำดับความสำคัญเป็น PRIORITY_MANDATORY จะต้องตั้งค่า total_budget

โปรดทราบว่าหากลำดับความสำคัญนี้สูงกว่าลำดับความสำคัญตามข้อจำกัดอื่นๆ และหาก total_budget เข้มงวด กำหนดเวลาที่ได้อาจละเมิดทั้งข้อจำกัดด้านพนักงานหรือข้อกำหนดด้านการครอบคลุมเป็นอย่างมาก

CoverageRequirement

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

สำหรับบทบาทและ/หรือทักษะหนึ่งๆ ข้อกำหนดความครอบคลุมจะมีขึ้นเมื่อจำนวนพนักงานอย่างน้อย target_employee_count คนทำงานในทุกช่วงเวลา (หรือทุกกะการทำงานใน shift_ids) ในทางตรงกันข้าม ข้อกำหนดด้านความครอบคลุมถูกละเมิดหากช่วงเวลาใดก็ตาม (หรือบางกะใน shift_ids) มีพนักงานน้อยกว่า target_employee_count ที่ทำงานในกรอบเวลานั้น จำนวนพนักงานที่ทำงานในจำนวนที่มากกว่า target_employee_count ยังคงเป็นไปตามข้อกำหนด แต่เครื่องมือแก้โจทย์จะทำให้จำนวนพนักงานที่มีจำนวนมากเกินไป

ช่อง
start_date_time

DateTime

เวลาเริ่มต้นสำหรับข้อกำหนดการครอบคลุม (รวม) หากมีการตั้งค่า shift_ids ต้องว่างเปล่า

end_date_time

DateTime

เวลาสิ้นสุดสำหรับข้อกำหนดความครอบคลุม (ไม่รวม) หากมีการตั้งค่า shift_ids ต้องว่างเปล่า

location_id

string

สถานที่ที่ต้องการพนักงาน shift_ids มีข้อมูลอยู่ ช่องนี้ต้องว่างเปล่า

shift_ids[]

string

หากตั้งค่าไว้ ระบบจะใช้ข้อกำหนดด้านบทบาทและทักษะแยกกันกับรหัสกะทุกรหัสในรายการนี้ หาก Shift_ids ไม่ว่างเปล่า ในกรณีนี้ start_date_time, end_date_time และ location_id จะต้องว่างเปล่า

role_requirements[]

RoleRequirement

จำนวนพนักงานที่กำหนดไว้สำหรับบทบาทที่ระบุในกรอบเวลา ต้องระบุ role_requirement ไม่เกิน 1 รายการสําหรับรหัสบทบาทแต่ละรายการ ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อกำหนดคือ PRIORITY_MANDATORY เราจะละเมิดข้อจำกัดเหล่านี้หากมีการมอบหมายบทบาทที่ระบุพนักงานน้อยกว่า target_employee_count คนในช่วงเวลาใดก็ตามในระหว่างกรอบเวลา

skill_requirements[]

SkillRequirement

จำนวนพนักงานที่มีทักษะตามที่ระบุและได้รับการกำหนดให้กะการทำงานในช่วงเวลาที่กำหนด ต้องระบุ skill_requirement ไม่เกิน 1 รายการต่อรหัสทักษะแต่ละรหัส ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อกำหนดคือ PRIORITY_LOW เราจะละเมิดข้อจำกัดเหล่านี้หากมีพนักงานน้อยกว่า target_employee_count คนมีทักษะที่กำหนดในระหว่างกรอบเวลา

RoleRequirement

จำนวนพนักงานที่กำหนดไว้สำหรับบทบาทที่ระบุในกรอบเวลา

ช่อง
role_id

string

รหัสบทบาทสำหรับข้อกำหนด

target_employee_count

int32

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

priority

Priority

ระดับลำดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดของทรัพยากรทั้งหมดคือ PRIORITY_MANDATORY

SkillRequirement

จำนวนพนักงานที่กำหนดซึ่งทำงานอยู่ในช่วงกรอบเวลา และมีทักษะตามที่กำหนด

ช่อง
skill_id

string

รหัสทักษะสำหรับข้อกำหนด

target_employee_count

int32

จำนวนพนักงานที่ต้องการซึ่งมีทักษะและพร้อมทำงานในช่วงเวลาที่เหมาะสม

priority

Priority

ระดับลำดับความสำคัญสำหรับข้อจำกัดของข้อกำหนดนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดของทรัพยากรทั้งหมดคือ PRIORITY_LOW

DemandCoverageViolation

ระบุการละเมิดความครอบคลุมของดีมานด์สำหรับช่วงเวลาที่ระบุ ความต้องการของพนักงานจะเท่ากันตลอดช่วงเวลาที่ระบุ

ช่อง
start_date_time

DateTime

วันที่และเวลาเริ่มต้นของช่วงความต้องการ (รวม) ค่านี้ถูกระบุจนถึงระดับนาที

end_date_time

DateTime

วันที่และเวลาสิ้นสุดของช่วงดีมานด์ (ไม่รวม) ค่านี้ถูกระบุจนถึงระดับนาที

coverage_violation

int32

การละเมิดการครอบคลุมในช่วงระยะเวลาที่ระบุ ค่าบวกบ่งชี้ว่ามีดีมานด์ที่ครอบคลุมมากเกินไป ส่วนค่าลบบ่งบอกว่ามีดีมานด์ที่ครอบคลุม

พนักงาน

พนักงานประจำที่จะกำหนดเวลา

ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้พนักงานคนนี้

role_ids[]

string

รหัสบทบาทที่พนักงานรายนี้ทำได้ ต้องระบุอย่างน้อย 1 บทบาท เมื่อมีการมอบหมายพนักงานเป็นกะ พนักงานคนดังกล่าวจะได้รับมอบหมายบทบาทเดียวจากรายการนี้ด้วย พนักงานอาจได้รับมอบหมายหน้าที่อื่นในช่วงกรอบเวลานัดหมาย

skill_ids[]

string

รหัสทักษะที่พนักงานรายนี้มี รายการนี้อาจว่างเปล่า เมื่อมีการมอบหมายกะ พนักงานจะใช้ทักษะย่อยใดๆ ที่ระบุไว้ที่นี่เพื่อให้ครอบคลุมความต้องการทักษะตลอดระยะเวลาของกะงานที่มอบหมาย

shift_preferences[]

ShiftPreference

เปลี่ยนค่ากำหนดของพนักงานคนนี้ กะงานที่ระบุไว้ที่นี่แสดงถึงกะที่พนักงานต้องการกำหนดให้อยู่ในกรอบเวลาการนัดหมาย รหัส Shift ที่ระบุใน shift_preferences ต้องไม่ซ้ำกัน เครื่องมือแก้โจทย์จะพยายามเพิ่มผลรวมของค่า ShiftPreference.preference ให้ได้สูงสุดใน shift_preferences ทั้งหมดที่มี

scheduling_constraints[]

SchedulingConstraint

รายการข้อจำกัดในการจัดตารางเวลาสำหรับพนักงานคนนี้ ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ PRIORITY_MEDIUM ดูรายละเอียดเพิ่มเติมได้ใน Priority enum

resource_constraints[]

ResourceConstraint

คุณจะเพิ่มข้อจำกัดการตั้งเวลาเพิ่มเติมใดๆ ที่ไม่ได้ระบุไว้ใน scheduling_constraints ได้ที่นี่ใน resource_constraints ResourceConstraint มีลักษณะเป็นนามธรรมมากขึ้นสำหรับการจำกัดทรัพยากรของพนักงาน ระดับความสำคัญเริ่มต้นสำหรับแต่ละข้อจำกัดเหล่านี้คือ PRIORITY_MEDIUM ดูรายละเอียดเพิ่มเติมได้ใน Priority enum

shift_requests[]

ShiftRequest

รายการคำขอกะของพนักงาน โดยอาจเป็นการกำหนดให้พนักงานได้รับมอบหมายหรือไม่ได้กำหนดให้ทำงานในบางกะก็ได้ งานที่จัดตารางเวลาแบบตายตัวสำหรับพนักงานจะแสดงด้วย ShiftRequest ที่มีลำดับความสำคัญ PRIORITY_MANDATORY ได้ รหัสกะการทำงานอาจปรากฏในคำขอกำหนดเวลาสูงสุด 1 รายการสำหรับพนักงานคนนี้ ระดับความสำคัญเริ่มต้นสำหรับแต่ละคำขอเหล่านี้คือ PRIORITY_LOW ดูรายละเอียดเพิ่มเติมได้ใน Priority enum

hourly_contract

HourlyContract

สัญญาที่ระบุอัตราค่าจ้างเป็นรายชั่วโมงเป็นประจำและแบบค่าล่วงเวลาสำหรับพนักงาน

EmployeeDemand

ระบุจำนวนพนักงานที่ต้องการเพื่อรองรับความต้องการในช่วง DateTime ที่กำหนด

ช่อง
start_date_time

DateTime

จุดเริ่มต้นของช่วงเวลาสำหรับความต้องการที่ระบุ (รวม) ค่าเหล่านี้จะอ่านได้เป็นนาที และระบบจะไม่สนใจหน่วยวินาทีและหน่วยที่เล็กกว่าทั้งหมด

end_date_time

DateTime

จุดสิ้นสุดของช่วงเวลาสำหรับความต้องการที่ระบุ (ไม่รวม) ค่าเหล่านี้จะอ่านได้เป็นนาที และระบบจะไม่สนใจหน่วยวินาทีและหน่วยที่เล็กกว่าทั้งหมด

employee_count

int32

จำนวนพนักงานที่ต้องการเพื่อรองรับความต้องการในช่วงเวลานี้

EmployeeSchedule

รายการกะการทำงานตามลำดับของ ShiftTemplate รายการเดียวที่มอบหมายให้พนักงานหลายคน

ช่อง
shift_template_id

string

รหัสของเทมเพลตที่ใช้ในการสร้างชุดกะนี้

shifts[]

ShiftWithEvents

รายการกะงานที่มอบหมายให้กับพนักงาน employee_count คน การเปลี่ยนแปลงและเหตุการณ์ที่เลือกสำหรับกำหนดการสร้างขึ้นจากเทมเพลตเดียว Shift จะจัดเรียงตามลำดับเวลาและไม่ทับซ้อนกัน หาก SolverConfig.multi_day_schedule เป็นจริง วันหยุดพักผ่อนจะแสดงโดยปริยายเนื่องจากไม่มีกะการทำงานที่เริ่มต้นในวันนั้น

employee_count

int32

จำนวนพนักงานที่ควรกำหนดให้กะการทำงานชุดนี้ครอบคลุมความต้องการ

ShiftWithEvents

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

ช่อง
start_date_time

DateTime

วันที่และเวลาเริ่มต้นของการเปลี่ยนแปลง ค่านี้ระบุถึงระดับนาที ไม่ได้ระบุหน่วยวินาทีและหน่วยที่เล็กกว่า

end_date_time

DateTime

วันที่และเวลาสิ้นสุดของการเปลี่ยนแปลง ค่านี้ระบุถึงระดับนาที ไม่ได้ระบุหน่วยวินาทีและหน่วยที่เล็กกว่า

events[]

Event

รายการเหตุการณ์ที่รวมอยู่ในการเปลี่ยนแปลงนี้ ซึ่งแมปกับส่วนที่ตรงกันทั้งหมด และอยู่ในลำดับเดียวกันกับ ShiftTemplate.Event หาก SolverConfig.shift_events_can_change เป็นจริง เวลาเริ่มต้นและสิ้นสุดของกิจกรรมอาจแตกต่างกันไปใน ShiftWithEvents ทั้งหมดของกำหนดการนี้

เหตุการณ์

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

ช่อง
event_template_id

string

รหัสของเทมเพลตที่ใช้สร้างเหตุการณ์นี้

start_date_time

DateTime

วันที่และเวลาเริ่มต้นของกิจกรรม ค่านี้ระบุถึงระดับนาที ไม่ได้ระบุหน่วยวินาทีและหน่วยที่เล็กกว่า

end_date_time

DateTime

วันที่และเวลาสิ้นสุดของเหตุการณ์ ค่านี้ระบุถึงระดับนาที ไม่ได้ระบุหน่วยวินาทีและหน่วยที่เล็กกว่า

EventTemplate

เทมเพลตที่ระบุกฎสำหรับการสร้างเหตุการณ์เดียวที่เกิดขึ้นระหว่างกะ กิจกรรมอาจเป็นการประชุม ช่วงพัก อาหารกลางวัน ฯลฯ

ช่อง
id

string

รหัสที่ไม่ซ้ำกันของเทมเพลตนี้

minimum_minutes_after_shift_start

int32

จำนวนนาทีขั้นต่ำหลังจากเริ่มกะที่กิจกรรมนี้สามารถเริ่มต้นได้

maximum_minutes_after_shift_start

int32

จำนวนนาทีสูงสุดหลังจากเริ่มกะที่กิจกรรมนี้สามารถเริ่มต้นได้

duration_minutes

int32

ระยะเวลาคงที่เป็นนาทีสำหรับกิจกรรมนี้

start_time_increment_minutes

int32

เวลาที่เพิ่มขึ้น (เป็นนาที) ที่ใช้ในการสร้างชุดเวลาเริ่มต้นของเหตุการณ์ที่เป็นไปได้ระหว่าง minimum_minutes_after_shift_start ถึง maximum_minutes_after_shift_start ตัวอย่างเช่น ถ้าจำนวนนาทีขั้นต่ำหลังจากเริ่มต้นกะการทำงานคือ 30 นาทีสูงสุดหลังจากเริ่มกะการทำงานคือ 45 นาที และเพิ่มเวลาเริ่มต้นคือ 5 นาที เหตุการณ์อาจเกิดขึ้นหลังจากเริ่มกะ 30, 35, 40 หรือ 45 นาที

HourlyContract

ระบุอัตรารายชั่วโมงพื้นฐาน ส่วนต่างของอัตรา และตัวคูณการทำงานล่วงเวลา เพื่อกำหนดค่าตอบแทนสำหรับพนักงาน โปรดทราบว่ากฎระเบียบในที่ต่างๆ อาจต้องมีการคำนวณค่าชดเชยการทำงานล่วงเวลาที่แตกต่างออกไป เครื่องมือแก้โจทย์คณิตจะประมาณค่าชดเชยการทำงานล่วงเวลาเพื่อลดค่าใช้จ่ายรวมหรือเพื่อให้เป็นไปตามงบประมาณ (ดู BudgetRequirement) ไม่ได้มีจุดประสงค์เพื่อให้เป็นเครื่องมือในการคำนวณเงินเดือน

ช่อง
base_hourly_rate

double

ค่าตอบแทนสำหรับการทำงานนอกเวลาทำการ หากพนักงานใช้หลายอัตรา ระบบจะคำนวณส่วนต่างของอัตราจะสัมพันธ์กับอัตราฐานรายชั่วโมงนี้ นอกจากนี้ หากมีหลายอัตรา อัตรารายชั่วโมงฐานควรเป็นอัตราขั้นต่ำของอัตราดังกล่าว

hourly_rate_shift_differentials

map<string, double>

ส่วนต่างราคาต่อชั่วโมง ซึ่งจ่ายเพิ่มเติมจาก base_hourly_rate เช่น หากอัตราพื้นฐานต่อชั่วโมงคือ $30/ชม. "shift_1" จะได้รับเงิน 40 ดอลลาร์สหรัฐ/ชม. และจ่าย "shift_2" ในอัตรา $45/ชม. ตัวแทน Proto ก็จะเป็น base_hourly_rate: 30 hourly_rate_shift_differentials {key: "shift_1" value: 10} hourly_rate_shift_differentials {key: "shift_2" value: 15}

overtime_periods[]

OvertimePeriod

รายการของระยะเวลาทั้งหมดที่ต้องมีการคำนวณต่อเวลา ช่วงเวลาเหล่านี้ต้องไม่ทับซ้อนกัน

OvertimePeriod

ระยะเวลาคงที่และเกิดซ้ำเป็นประจำ (โดยทั่วไปคือ 168 ชั่วโมงหรือ 24 ชั่วโมงติดต่อกัน 7 ชั่วโมง) ที่ใช้กำหนดจำนวนเงินค่าชดเชยการทำงานล่วงเวลา โดยแต่ละระยะเวลาจะมีตัวคูณในช่วงระยะเวลาหนึ่ง (เช่น 1.5) สัมพันธ์กับ base_hourly_rate และขีดจำกัดจำนวนชั่วโมงที่ถือว่าทำงานปกติ (ไม่ใช่การทำงานล่วงเวลา) การเปลี่ยนแปลงใดๆ ที่ทับซ้อนกับกรอบเวลา start_date_time (รวม) และ end_date_time (ไม่รวม) จะนับรวมอยู่ในจำนวนชั่วโมงการทำงานทั้งหมดในระยะเวลานั้นๆ หากส่วนที่ซ้อนทับกันบางส่วน ระบบจะนับเฉพาะชั่วโมงที่ทับซ้อนกันเท่านั้น

ช่อง
overtime_multiplier

double

ตัวคูณเพื่อคำนวณอัตราการทำงานล่วงเวลาต่อชั่วโมง (ต้องมากกว่าหรือเท่ากับ 1.0) โดยทั่วไปแล้ว อัตราค่าดำเนินการต่อเวลารายชั่วโมงจะคำนวณเป็น base_hourly_rate * overtime_multiplier หาก hourly_rate_shift_differentials มีหลายอัตรา เครื่องมือแก้โจทย์จะประมาณอัตราค่าดำเนินการต่อเวลารายชั่วโมงด้วยค่าเฉลี่ยง่ายๆ ของอัตราที่ใช้ได้ในช่วงต่อเวลา หมายเหตุ: ระเบียบข้อบังคับในที่ต่างๆ อาจต้องมีการคำนวณค่าชดเชยการทำงานล่วงเวลาที่แตกต่างออกไป เครื่องมือแก้โจทย์คณิตจะประมาณค่าตอบแทนการทำงานล่วงเวลาเพื่อลดค่าใช้จ่ายรวมหรือเพื่อให้เป็นไปตามงบประมาณ แต่ไม่ได้มีจุดประสงค์เพื่อใช้คำนวณเงินเดือน

start_date_time

DateTime

เวลาเริ่มต้นสำหรับช่วงต่อช่วง หากกะเหลื่อมซ้อนกันในครั้งนี้ ระบบจะนับชั่วโมงของการเปลี่ยนแปลงดังกล่าวจากเวลา start_date_time

end_date_time

DateTime

เวลาสิ้นสุดสำหรับช่วงต่อช่วง หากช่วงเวลาดังกล่าวทับซ้อนกันในครั้งนี้ ระบบจะนับจำนวนชั่วโมงของการเปลี่ยนแปลงดังกล่าวสูงสุดถึง end_date_time

maximum_regular_hours

double

จำนวนเวลาทำงานสูงสุดที่จ่ายในอัตราปกติ (ไม่ใช่การทำงานล่วงเวลา) จำนวนนี้ต้องเป็นจำนวนบวก

ลำดับความสำคัญ

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

ช่อง
priority

Priority

ระดับลำดับความสำคัญของข้อจำกัดทรัพยากรนี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดของทรัพยากรทั้งหมดคือ PRIORITY_MEDIUM

resource_usages

map<string, double>

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

minimum_resource_usage

double

การใช้ทรัพยากรขั้นต่ำเพื่อให้เป็นไปตามข้อจำกัดด้านทรัพยากร

maximum_resource_usage

double

การใช้งานทรัพยากรสูงสุดเพื่อให้เป็นไปตามข้อจำกัดของทรัพยากร

SchedulingConstraint

ข้อจำกัดทางกำหนดเวลาที่เจาะจงสำหรับพนักงานคนหนึ่ง ข้อจำกัดที่ระบุจะใช้ระหว่างช่วงเวลาที่ระบุ [start_date_time, end_date_time) เท่านั้น

ช่อง
priority

Priority

ระดับลำดับความสำคัญสำหรับข้อจำกัดการตั้งเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับข้อจำกัดการตั้งเวลาทั้งหมดคือ PRIORITY_MEDIUM

start_date_time

DateTime

เวลาเริ่มต้นเมื่อข้อจำกัดการจัดตารางเวลานี้มีผล (รวมด้วย)

end_date_time

DateTime

เวลาสิ้นสุดเมื่อข้อจำกัดการตั้งเวลานี้มีผล (ไม่รวม)

ช่องการรวม type ประเภทของข้อจำกัดที่ระบุ ข้อจำกัดแต่ละข้อจะนำมาใช้ภายในกรอบเวลาที่ระบุข้างต้นเท่านั้น type ต้องเป็นค่าใดค่าหนึ่งต่อไปนี้
minimum_minutes

int32

จำนวนนาทีขั้นต่ำที่พนักงานทำงานได้ หากพนักงานได้รับมอบหมายให้อยู่ในกะที่ทับซ้อน (ทั้งหมดหรือบางส่วน) กับกรอบเวลา จำนวนนาทีที่กะนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้

maximum_minutes

int32

จำนวนนาทีสูงสุดที่พนักงานทำงานได้ในกรอบเวลาที่กำหนด หากพนักงานได้รับมอบหมายให้อยู่ในกะที่ทับซ้อน (ทั้งหมดหรือบางส่วน) กับกรอบเวลา จำนวนนาทีที่กะนั้นทับซ้อนกับกรอบเวลาจะรวมอยู่ในจำนวนนี้

minimum_consecutive_work_days

int32

จำนวนวันขั้นต่ำติดต่อกันที่พนักงานทำงานได้ พนักงานจะทำงานในวันที่ใดวันหนึ่ง หากมีเวลาเป็นกะที่เริ่มต้นในวันนั้น กะงานที่มีการมอบหมายพนักงานซึ่งเริ่มต้นในกรอบเวลาดังกล่าวจะรวมอยู่ในจำนวนนี้

maximum_consecutive_work_days

int32

จำนวนวันสูงสุดติดต่อกันที่พนักงานทำงานได้ พนักงานจะทำงานในวันที่ใดวันหนึ่ง หากมีเวลาเป็นกะที่เริ่มต้นในวันนั้น กะงานที่มีการมอบหมายพนักงานซึ่งเริ่มต้นในกรอบเวลาดังกล่าวจะรวมอยู่ในจำนวนนี้

minimum_shift_count

int32

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

maximum_shift_count

int32

จำนวนกะสูงสุดที่พนักงานจะทำงานได้ กะการทำงานที่พนักงานได้รับมอบหมายและคาบเกี่ยวกับกรอบเวลาทั้งหมดจะรวมอยู่ในจำนวนนี้

minimum_rest_minutes

int32

จำนวนนาทีขั้นต่ำที่พนักงานต้องพักหลังจากสิ้นสุดกะการทำงานหนึ่งก่อนที่จะได้รับมอบหมายให้ทำงานอื่น ข้อจำกัดนี้มีผลกับ Shift ทุกคู่ที่รวมอยู่ใน [start_date_time, end_date_time] โดยสมบูรณ์

Shift

กะงานเป็นการกำหนดกรอบเวลาที่ตายตัวที่พนักงานสามารถทำงานได้

ช่อง
id

string

รหัสที่ไม่ซ้ำกันที่กำหนดให้สำหรับการเปลี่ยนแปลงนี้

location_id

string

รหัสตำแหน่งที่การเปลี่ยนแปลงนี้ทำงาน เว้นว่างไว้ได้

start_date_time

DateTime

เวลาเริ่มต้นของการเปลี่ยนแปลง (รวมด้วย)

end_date_time

DateTime

เวลาสิ้นสุดของกะ (ไม่รวม) ปัจจุบันเครื่องมือแก้โจทย์อนุญาตให้สำหรับกะที่มีความยาวไม่เกิน 24 ชม. เท่านั้น

break_rules[]

BreakRule

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

ShiftAssignment

พนักงานที่จะเปลี่ยนบทบาท

ช่อง
employee_id

string

รหัสพนักงานที่กำหนด

shift_id

string

รหัส Shift ที่กำหนดให้พนักงาน

role_id

string

รหัสบทบาทที่พนักงานได้รับมอบหมายสำหรับกะนี้

breaks[]

Break

รายการช่วงพักสำหรับงานกะนี้

ShiftGenerationSolutionStatus

สถานะโซลูชันที่ระบุในคำตอบของโปรแกรมแก้โจทย์

Enum
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED สถานะที่ไม่ได้ระบุสำหรับคำตอบ
SHIFT_GENERATION_SOLVED โปรแกรมแก้โจทย์พบวิธีแก้โจทย์ภายในเวลาที่กำหนด
SHIFT_GENERATION_NOT_SOLVED ปัญหาป้องกันไม่ให้เครื่องมือแก้โจทย์สร้างการเปลี่ยนแปลงได้
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED ระบบไม่สามารถสร้างการเปลี่ยนแปลงเพื่อครอบคลุมความต้องการภายในระยะเวลาที่กำหนด

ShiftPreference

ค่ากำหนดที่เป็นตัวเลขสำหรับรหัส Shift ที่เฉพาะเจาะจง

ช่อง
shift_id

string

รหัส Shift ที่ระบุค่ากำหนด

preference

int32

ค่านิยมที่มากกว่าแสดงถึงการเปลี่ยนแปลงที่ต้องการมากกว่า

ShiftRequest

คำขอของพนักงานที่จะมอบหมายหรือไม่มอบหมายงานให้เข้างาน

ช่อง
priority

Priority

ระดับความสำคัญของคำขอกำหนดเวลานี้ ลำดับความสำคัญเริ่มต้นสำหรับคำขอการตั้งเวลาทั้งหมดคือ PRIORITY_LOW

shift_ids[]

string

รหัสการเปลี่ยนแปลงของคำขอกำหนดเวลา

type

WorkStatus

ประเภทคำขอ เช่น ระบุว่ามีการมอบหมายงานให้หรือไม่ได้มอบหมายคำขอให้กับชุดกะ

ShiftTemplate

เทมเพลตที่ระบุกฎสำหรับการสร้างกะการทำงาน กะคือหน่วยงานที่ระบุเวลาเริ่มต้น เวลาสิ้นสุด และอาจมีกิจกรรม (เช่น อาหารกลางวัน ช่วงพัก เป็นต้น) ในคำตอบจะมีการเปลี่ยนแปลงการทำงานในวันที่ที่เจาะจง

ช่อง
id

string

รหัสที่ไม่ซ้ำกันของเทมเพลตนี้

earliest_start_time

TimeOfDay

เวลาที่เร็วที่สุดในวันที่สามารถเริ่มต้นกะได้ ค่านี้จะระบุด้วยชั่วโมงและนาที โดยจะไม่สนใจวินาทีและนาโน

latest_start_time

TimeOfDay

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

duration_minutes

int32

ระยะเวลาคงที่ของการเปลี่ยนแปลงที่สร้างโดยเทมเพลตนี้

start_time_increment_minutes

int32

เวลาที่เพิ่ม (เป็นนาที) ที่ใช้ในการสร้างชุดเวลาเริ่มต้นที่เป็นไปได้ระหว่าง earliest_start_time ถึง latest_start_time ตัวอย่างเช่น ถ้าเวลาเริ่มต้นเร็วที่สุดคือ 8:00 น. เวลาเริ่มต้นช้าสุดคือ 8:30 น. และเวลาเริ่มต้นที่เพิ่มขึ้นคือ 10 นาที เวลาเริ่มต้นที่เป็นไปได้ทั้งหมดสำหรับเทมเพลตการเปลี่ยนแปลงนี้คือ 8:00, 8:10, 8:20 และ 8:30

days_off_count_per_week

int32

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

event_templates[]

EventTemplate

กฎสำหรับการสร้างเหตุการณ์สำหรับกะแต่ละรายการ จะมี 1 เหตุการณ์ที่แน่นอนในแต่ละกะของแต่ละเหตุการณ์ที่ระบุ

minimum_interevent_gap_minutes

int32

จำนวนนาทีขั้นต่ำระหว่างการสิ้นสุดของเหตุการณ์หนึ่งและการเริ่มต้นเหตุการณ์ถัดไป

maximum_employee_count

int32

จำนวนพนักงานสูงสุดที่สามารถกำหนดให้กับกะทั้งหมดที่สร้างขึ้นโดยเทมเพลตนี้

SolutionStatus

สถานะวิธีแก้โจทย์ (ซึ่งก็คือกำหนดการ) ที่ให้ไว้ในการตอบสนองของเครื่องมือแก้โจทย์

Enum
SOLUTION_STATUS_UNSPECIFIED สถานะที่ไม่ได้ระบุสำหรับคำตอบ
FEASIBLE กำหนดเวลาที่ส่งกลับสามารถทำได้ แต่อาจไม่ดีที่สุด
OPTIMAL กำหนดเวลาที่ส่งคืนเหมาะสมที่สุดแล้ว
INFEASIBLE ไม่มีกำหนดเวลาที่เป็นไปได้สำหรับข้อจำกัดที่ระบุ เครื่องมือแก้โจทย์อาจแสดงผลค่านี้หากไม่เป็นไปตามข้อจำกัดชุดย่อยของข้อจำกัดที่มีระดับความสำคัญ PRIORITY_MANDATORY
NOT_SOLVED ไม่พบกำหนดการ
NOT_SOLVED_DEADLINE_EXCEEDED ไม่พบกำหนดการภายในระยะเวลาที่กำหนด

SolveParameters

พารามิเตอร์ที่ควบคุมการแก้โจทย์ปัญหาการจัดตารางเวลาสำหรับกะการทำงานเพียงวิธีเดียว

ช่อง
time_limit

Duration

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

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

SolverConfig

ระบุพารามิเตอร์เพิ่มเติมเพื่อแก้โจทย์การสร้าง Shift

ช่อง
time_limit

Duration

ระยะเวลาสูงสุดที่เครื่องมือแก้โจทย์ควรใช้กับโจทย์ หากไม่ได้ตั้งค่า ค่าเริ่มต้นจะเป็น 1 นาที การเลือกการจำกัดเวลาควรขึ้นอยู่กับขนาดของปัญหา ตัวอย่างเช่น เมื่อแก้ปัญหาอินสแตนซ์ 7 วันด้วย ShiftTemplates 2 รายการ โดยแต่ละรายการมีเวลาเริ่มต้นที่เป็นไปได้ประมาณ 20 รายการและจัดกิจกรรม 2 รายการโดยมีเวลาเริ่มต้นที่เป็นไปได้ประมาณ 30 รายการ และมีวันหยุด 2 วันต่อสัปดาห์ ค่าที่แนะนําคือ <10 วินาทีสําหรับโซลูชันที่เร็ว (และน่าจะต่ำกว่าประสิทธิภาพ)) (10, 300 วินาที) สําหรับโซลูชันที่มีคุณภาพดี และ >300 วินาทีสำหรับการค้นหาแบบครอบคลุม อินสแตนซ์ขนาดใหญ่กว่าปกติอาจต้องใช้เวลานานขึ้น

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

multi_day_schedule

bool

หากเป็น "จริง" เครื่องมือแก้โจทย์จะสร้าง EmployeeSchedule ที่มีกะ (เช่น เพื่อสร้างกำหนดเวลา 1 สัปดาห์) มิเช่นนั้น EmployeeSchedule แต่ละรายการจะมี 1 Shift เท่านั้น กำหนดการแบบหลายวันจะถือว่าเวลาเริ่มต้นของกะเดียวกันในแต่ละวัน และจำนวนวันหยุดในกำหนดเวลาดังกล่าวจะกำหนดโดยเทมเพลตกะ ทั้งนี้ ระบบตั้งค่าเริ่มต้นไว้ที่ false

shift_events_can_change

bool

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

WorkStatus

พนักงานทำงานอยู่หรือไม่

Enum
WORK_STATUS_UNSPECIFIED สถานะงานที่ไม่รู้จัก
STATUS_WORK สถานะที่แสดงถึงพนักงานทำงานอยู่
STATUS_NOT_WORK สถานะที่แสดงถึงพนักงานที่ไม่ได้ทำงาน