Method: scheduling.solveShiftGeneration

कर्मचारी की मांग को पूरा करने के लिए, दिए गए शिफ़्ट टेंप्लेट से शिफ़्ट जनरेट करके, दिए गए SolveShiftGenerationRequest में शिफ़्ट जनरेट करने से जुड़े सवाल को हल किया जाता है.

एचटीटीपी अनुरोध

POST https://optimization.googleapis.com/v1/scheduling:solveShiftGeneration

यह यूआरएल gRPC ट्रांसकोडिंग सिंटैक्स का इस्तेमाल करता है.

अनुरोध का मुख्य भाग

अनुरोध के मुख्य हिस्से में, इस तरह का डेटा शामिल होता है:

जेएसओएन के काेड में दिखाना
{
  "solverConfig": {
    object (SolverConfig)
  },
  "shiftTemplates": [
    {
      object (ShiftTemplate)
    }
  ],
  "employeeDemands": [
    {
      object (EmployeeDemand)
    }
  ]
}
फ़ील्ड
solverConfig

object (SolverConfig)

ज़रूरी नहीं. सॉल्वर के लिए पैरामीटर.

shiftTemplates[]

object (ShiftTemplate)

ज़रूरी है. शिफ़्ट जनरेट करने के नियम तय करने वाले शिफ़्ट टेंप्लेट का सेट.

employeeDemands[]

object (EmployeeDemand)

ज़रूरी है. कर्मचारियों की कुल मांग, जो shiftTemplates के आधार पर जनरेट हुई शिफ़्ट में शामिल होनी चाहिए. हर EmployeeDemand में दिए गए DateTime इंटरवल अलग-अलग होने चाहिए. साथ ही, हो सकता है कि ये एक-दूसरे के बीच न हों.

जवाब का मुख्य भाग

Shift जनरेट करने से जुड़ी समस्या से जुड़ा जवाब. अगर solutionStatus का मान SOLVED है, तो सॉल्वर से जनरेट किए गए मान्य शिफ़्ट का सेट employeeSchedules में दिया जाता है. मान्य शिफ़्ट शेड्यूल के लिए, इन प्रॉपर्टी में ये चीज़ें होती हैं:

  1. employeeSchedules में जनरेट किया गया हर शिफ़्ट, ShiftTemplate में दिए गए नियमों का पालन करता है.
  2. हर शिफ़्ट में चुना गया हर इवेंट, उससे जुड़े ShiftTemplate.Event में दिए गए नियमों का पालन करता है.
  3. एक ही ShiftTemplate से जनरेट किए गए शिफ़्ट के सेट को असाइन किए गए कर्मचारियों की संख्या, उस टेंप्लेट के maximumEmployeeCount से ज़्यादा नहीं है.
  4. असाइन किए गए कर्मचारियों का सेट, हर अंतराल में मांग को पूरा करता है.

अगर एपीआई सही से जुड़ जाता है, ताे जवाब के मुख्य भाग में नीचे दिए गए स्ट्रक्चर शामिल होता है.

जेएसओएन के काेड में दिखाना
{
  "solutionStatus": enum (ShiftGenerationSolutionStatus),
  "employeeSchedules": [
    {
      object (EmployeeSchedule)
    }
  ]
}
फ़ील्ड
solutionStatus

enum (ShiftGenerationSolutionStatus)

लौटाए गए समाधान की स्थिति. अगर solutionStatus, SOLVED नहीं है, तो employeeSchedules खाली रहेगा.

employeeSchedules[]

object (EmployeeSchedule)

सॉल्वर के जनरेट किए गए शिफ़्ट के सेट और हर शेड्यूल के लिए असाइन किए गए कर्मचारियों की संख्या.

SolverConfig

Shift जनरेशन की समस्या को हल करने के लिए अतिरिक्त पैरामीटर तय करता है.

जेएसओएन के काेड में दिखाना
{
  "timeLimit": string,
  "multiDaySchedule": boolean,
  "shiftEventsCanChange": boolean
}
फ़ील्ड
timeLimit

string (Duration format)

सॉल्वर को सवाल हल करने में ज़्यादा से ज़्यादा समय देना चाहिए. अगर यह अवधि सेट नहीं है, तो डिफ़ॉल्ट तौर पर एक मिनट दिखेगा. समय सीमा का चुनाव समस्या के आकार पर निर्भर करना चाहिए. उदाहरण के लिए, सात दिनों के लिए दो ShiftTemplates, शुरू होने के ~20, और हफ़्ते में दो दिन की छुट्टी वाले दो इवेंट को हल करने के लिए, ये वैल्यू दी जा रही हैं: तेज़ समाधान के लिए 10 सेकंड (और सबसे कम बेहतर), (10, 300 सेकंड), अच्छी क्वालिटी के समाधानों के लिए 300 से ज़्यादा. बड़ी फ़ाइलों के लिए, ऐप्लिकेशन को ज़्यादा से ज़्यादा समय तक इस्तेमाल करना पड़ सकता है.

यह वैल्यू तय सीमा से ज़्यादा नहीं होनी चाहिए और इसमें कम्यूनिकेशन से जुड़े ओवरहेड शामिल नहीं होते. समस्या हल करने में लगने वाला अनुमानित समय, इस वैल्यू से कुछ ज़्यादा हो सकता है.

सेकंड में दी गई अवधि, जिसमें नौ भिन्नांक हो सकते हैं. साथ ही, यह 's' पर खत्म होता है. उदाहरण: "3.5s".

multiDaySchedule

boolean

अगर सही हो, तो सॉल्वर EmployeeSchedule जनरेट करता है.इनमें कई शिफ़्ट शामिल होते हैं. उदाहरण के लिए, एक हफ़्ते का शेड्यूल जनरेट करने के लिए. अगर ऐसा नहीं है, तो हर EmployeeSchedule में सिर्फ़ एक शिफ़्ट शामिल है. कई दिनों के शेड्यूल के हिसाब से, शिफ़्ट की शुरुआत का समय सभी दिनों में एक जैसा होता है. साथ ही, ऐसे शेड्यूल में छुट्टी वाले दिनों की संख्या, शिफ़्ट टेंप्लेट की मदद से तय की जाती है. डिफ़ॉल्ट रूप से गलत पर सेट होती है.

shiftEventsCanChange

boolean

सही होने पर, कई दिनों के EmployeeSchedule में ऐसे शिफ़्ट शामिल हो सकते हैं जिनके लिए इवेंट के शुरू और खत्म होने का समय सभी दिनों के हिसाब से अलग-अलग होता है. अगर ऐसा नहीं है, तो किसी EmployeeSchedule की सभी शिफ़्ट में, इवेंट के शुरू और खत्म होने का समय एक ही होना चाहिए. दोनों ही मामलों में, कई दिनों के शेड्यूल के सभी शिफ़्ट के शुरू और खत्म होने का समय एक ही होता है. इसलिए, अगर multiDaySchedule गलत है, तो इस पैरामीटर को अनदेखा कर दिया जाता है. इस पैरामीटर को 'सही है' पर सेट करने से, समाधान में ज़्यादा समय लग सकता है. डिफ़ॉल्ट रूप से गलत पर सेट होती है.

ShiftTemplate

शिफ़्ट जनरेट करने के लिए नियम तय करने वाला टेंप्लेट. शिफ़्ट, काम की एक यूनिट है.इसमें इवेंट के शुरू होने और खत्म होने का समय तय किया जाता है. साथ ही, इसमें इवेंट, जैसे कि लंच, ब्रेक वगैरह शामिल हो सकते हैं. जवाब में शिफ़्ट को किसी खास तारीख के लिए असाइन किया जाएगा.

जेएसओएन के काेड में दिखाना
{
  "id": string,
  "earliestStartTime": {
    object (TimeOfDay)
  },
  "latestStartTime": {
    object (TimeOfDay)
  },
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer,
  "daysOffCountPerWeek": integer,
  "eventTemplates": [
    {
      object (EventTemplate)
    }
  ],
  "minimumIntereventGapMinutes": integer,
  "maximumEmployeeCount": integer
}
फ़ील्ड
id

string

इस टेंप्लेट का यूनीक आईडी.

earliestStartTime

object (TimeOfDay)

दिन का वह सबसे कम समय जब शिफ़्ट शुरू हो सकता है. यह वैल्यू घंटे और मिनट के साथ दिखती है. साथ ही, सेकंड और नैनो सेकंड को अनदेखा किया जाता है.

latestStartTime

object (TimeOfDay)

दिन का वह सबसे नया समय जब शिफ़्ट शुरू हो सकता है. यह वैल्यू घंटे और मिनट के साथ दिखती है. साथ ही, सेकंड और नैनो सेकंड को अनदेखा किया जाता है. अगर यह वैल्यू earliestStartTime से कम है, तो इस टेंप्लेट से जनरेट होने वाला शिफ़्ट आधी रात से पहले या बाद में शुरू हो सकता है.

durationMinutes

integer

इस टेंप्लेट से जनरेट होने वाली शिफ़्ट की तय अवधि.

startTimeIncrementMinutes

integer

समय की बढ़ोतरी (मिनट में) से, earliestStartTime और latestStartTime के बीच शुरू होने के संभावित समय का सेट जनरेट किया जाता है. उदाहरण के लिए, अगर शुरुआत का सबसे पहले समय 8:00 है, शुरू होने का सबसे नया समय 8:30 है, और शुरू होने का समय 10 मिनट है, तो इस शिफ़्ट टेंप्लेट के शुरू होने के सभी संभावित समय ये हैं: 8:00, 8:10, 8:20, और 8:30.

daysOffCountPerWeek

integer

हर हफ़्ते मिलने वाले दिनों की तय संख्या. अगर किसी कर्मचारी को उस दिन शुरू होने वाली शिफ़्ट के लिए काम असाइन नहीं किया जाता है, तो उसके लिए छुट्टी की एक तय तारीख होती है. एक हफ़्ता सात दिन का होता है और रविवार से शुरू होता है.

eventTemplates[]

object (EventTemplate)

हर शिफ़्ट के लिए इवेंट जनरेट करने के नियम. तय किए गए हर इवेंट के लिए, हर शिफ़्ट में सिर्फ़ एक इवेंट शामिल किया जाएगा.

minimumIntereventGapMinutes

integer

एक इवेंट के खत्म होने और अगला इवेंट शुरू होने के बीच के कम से कम मिनट.

maximumEmployeeCount

integer

इस टेंप्लेट से जनरेट की गई सभी शिफ़्ट में कर्मचारियों को ज़्यादा से ज़्यादा कितने कर्मचारी असाइन किए जा सकते हैं.

TimeOfDay

दिन का समय दिखाता है. तारीख और टाइम ज़ोन या तो अहम नहीं हैं या इन्हें कहीं और बताया गया है. एपीआई, लीप सेकंड की अनुमति दे सकता है. मिलते-जुलते टाइप google.type.Date और google.protobuf.Timestamp हैं.

जेएसओएन के काेड में दिखाना
{
  "hours": integer,
  "minutes": integer,
  "seconds": integer,
  "nanos": integer
}
फ़ील्ड
hours

integer

24 घंटे के फ़ॉर्मैट में, दिन के घंटे. यह 0 से 23 के बीच होना चाहिए. एपीआई, कारोबार के बंद होने जैसे मामलों में "24:00:00" वैल्यू दिखाने का विकल्प चुन सकता है.

minutes

integer

दिन के मिनट. यह संख्या 0 से 59 के बीच होनी चाहिए.

seconds

integer

समय के सेकंड. यह आम तौर पर 0 से 59 के बीच होना चाहिए. अगर एपीआई लीप-सेकंड की अनुमति देता है, तो हो सकता है कि एपीआई वैल्यू 60 की अनुमति दे.

nanos

integer

नैनोसेकंड में सेकंड के हिस्से. यह 0 से 99,99,99,999 के बीच होना चाहिए.

EventTemplate

शिफ़्ट के दौरान होने वाले किसी एक इवेंट को जनरेट करने के लिए, नियमों के बारे में बताने वाला टेंप्लेट. किसी इवेंट में मीटिंग, ब्रेक, लंच वगैरह हो सकता है.

जेएसओएन के काेड में दिखाना
{
  "id": string,
  "minimumMinutesAfterShiftStart": integer,
  "maximumMinutesAfterShiftStart": integer,
  "durationMinutes": integer,
  "startTimeIncrementMinutes": integer
}
फ़ील्ड
id

string

इस टेंप्लेट का यूनीक आईडी.

minimumMinutesAfterShiftStart

integer

शिफ़्ट शुरू होने के बाद, इस इवेंट को शुरू होने में लगने वाले कम से कम मिनट.

maximumMinutesAfterShiftStart

integer

शिफ़्ट शुरू होने के बाद, इस इवेंट को शुरू होने में ज़्यादा से ज़्यादा मिनट लगेंगे.

durationMinutes

integer

इस इवेंट के मिनट में तय अवधि.

startTimeIncrementMinutes

integer

समय की बढ़ोतरी (मिनट में) से, minimumMinutesAfterShiftStart से maximumMinutesAfterShiftStart के बीच इवेंट शुरू होने के संभावित समय का सेट जनरेट किया जाता है. उदाहरण के लिए, अगर शिफ़्ट शुरू होने के बाद के कम से कम मिनट 30 हैं, शिफ़्ट शुरू होने के बाद ज़्यादा से ज़्यादा 45 मिनट, और शुरू होने के समय में 5 मिनट की बढ़ोतरी है, तो इवेंट शिफ़्ट शुरू होने के 30, 35, 40 या 45 मिनट बाद हो सकता है.

EmployeeDemand

दिए गए तारीख और समय के अंतराल में, मांग को पूरा करने के लिए ज़रूरी कर्मचारियों की संख्या बताता है.

जेएसओएन के काेड में दिखाना
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "employeeCount": integer
}
फ़ील्ड
startDateTime

object (DateTime)

दी गई मांग के लिए, समयावधि की शुरुआत की जानकारी. इसमें, यह जानकारी भी शामिल है. ये वैल्यू, हर मिनट तक पढ़ी जाती हैं. साथ ही, सेकंड और छोटी इकाइयों को अनदेखा किया जाता है.

endDateTime

object (DateTime)

दी गई मांग के लिए, समयावधि खत्म हो गई है (खास तौर पर). ये वैल्यू, हर मिनट तक पढ़ी जाती हैं. साथ ही, सेकंड और छोटी इकाइयों को अनदेखा किया जाता है.

employeeCount

integer

इस अंतराल के लिए मांग को पूरा करने के लिए ज़रूरी कर्मचारियों की संख्या.

ShiftGenerationSolutionStatus

सॉल्वर के जवाब के तौर पर दी गई समाधान की स्थिति.

Enums
SHIFT_GENERATION_SOLUTION_STATUS_UNSPECIFIED जवाब के लिए स्थिति तय नहीं है.
SHIFT_GENERATION_SOLVED सॉल्वर को दी गई समयसीमा में समस्या का हल मिल गया.
SHIFT_GENERATION_NOT_SOLVED किसी समस्या की वजह से, सॉल्वर शिफ़्ट जनरेट नहीं कर पाया.
SHIFT_GENERATION_NOT_SOLVED_DEADLINE_EXCEEDED दी गई समयसीमा में, मांग पूरी करने के लिए शिफ़्ट जनरेट नहीं किए जा सके.

EmployeeSchedule

एक ShiftTemplate के हिसाब से शिफ़्ट की क्रम वाली सूची, जिसे कई कर्मचारियों को असाइन किया जाना है.

जेएसओएन के काेड में दिखाना
{
  "shiftTemplateId": string,
  "shifts": [
    {
      object (ShiftWithEvents)
    }
  ],
  "employeeCount": integer
}
फ़ील्ड
shiftTemplateId

string

शिफ़्ट के इस सेट को जनरेट करने के लिए इस्तेमाल किए गए टेंप्लेट का आईडी.

shifts[]

object (ShiftWithEvents)

उन शिफ़्ट की सूची जिनमें employeeCount कर्मचारियों को असाइन किया गया है. शेड्यूल के लिए चुने गए शिफ़्ट और इवेंट एक ही टेंप्लेट से जनरेट किए गए हैं. बदलावों को समय के हिसाब से क्रम में लगाया जाता है और ये ओवरलैप नहीं होते. अगर SolverConfig.multi_day_schedule सही है, तो उस दिन की शुरू होने वाली शिफ़्ट न होने से किसी दिन की छुट्टी को साफ़ तौर पर दिखाया जाता है.

employeeCount

integer

उन कर्मचारियों की संख्या जिन्हें मांग को पूरा करने के लिए, शिफ़्ट के इस सेट में असाइन किया जाना चाहिए.

ShiftWithEvents

शुरू और खत्म होने की तारीख के साथ-साथ, सॉल्वर से जनरेट किए गए शिफ़्ट के तय इवेंट की सूची भी बताता है.

जेएसओएन के काेड में दिखाना
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "events": [
    {
      object (Event)
    }
  ]
}
फ़ील्ड
startDateTime

object (DateTime)

शिफ़्ट के शुरू होने की तारीख और समय. यह वैल्यू, मिनट के हिसाब से तय की जाती है. इसमें सेकंड और छोटी यूनिट शामिल नहीं होती हैं.

endDateTime

object (DateTime)

शिफ़्ट खत्म होने की तारीख और समय. यह वैल्यू, मिनट के हिसाब से तय की जाती है. इसमें सेकंड और छोटी यूनिट शामिल नहीं होती हैं.

events[]

object (Event)

इस शिफ़्ट में शामिल इवेंट की सूची, जो ShiftTemplate.Event के साथ ठीक से मैप की गई है और उसी क्रम में मैप की गई है. अगर SolverConfig.shift_events_can_change सही है, तो इस शेड्यूल के सभी ShiftWithEvents के लिए इवेंट के शुरू और खत्म होने का समय अलग-अलग हो सकता है.

इवेंट

सॉल्वर से जनरेट की गई शिफ़्ट में किसी खास इवेंट के शुरू और खत्म होने की तारीख का समय बताता है.

जेएसओएन के काेड में दिखाना
{
  "eventTemplateId": string,
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  }
}
फ़ील्ड
eventTemplateId

string

इस इवेंट को जनरेट करने के लिए इस्तेमाल किए गए टेंप्लेट का आईडी.

startDateTime

object (DateTime)

इवेंट शुरू होने की तारीख और समय. यह वैल्यू, मिनट के हिसाब से तय की जाती है. इसमें सेकंड और छोटी यूनिट शामिल नहीं होती हैं.

endDateTime

object (DateTime)

इवेंट खत्म होने की तारीख और समय. यह वैल्यू, मिनट के हिसाब से तय की जाती है. इसमें सेकंड और छोटी यूनिट शामिल नहीं होती हैं.