Method: scheduling.solveShiftGeneration

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

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

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

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

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

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

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

object (SolverConfig)

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

shiftTemplates[]

object (ShiftTemplate)

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

employeeDemands[]

object (EmployeeDemand)

ज़रूरी है. कर्मचारियों की कुल मांग, जिसमें shiftTemplates से हुए बदलाव को पूरा करना ज़रूरी है.

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

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

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

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

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

enum (ShiftGenerationSolutionStatus)

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

employeeSchedules[]

object (EmployeeSchedule)

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

demandCoverageViolations[]

object (DemandCoverageViolation)

दिए गए employeeSchedules में, असाइन किए गए employee_counts के आधार पर डिमांड कवरेज के उल्लंघन. अनुरोध में दिए गए employeeDemands को एक साथ दिखाया जाता है -- अगर दो employee_demand इंटरवल ओवरलैप करते हैं, तो इंटरवल के ओवरलैप वाले हिस्से में मांग का योग निकाला जाता है.

SolverConfig

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

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

string (Duration format)

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

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

सेकंड में कुल नौ दशमलव अंक, जो 's' पर खत्म होते हैं. उदाहरण: "3.5s".

multiDaySchedule

boolean

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

shiftEventsCanChange

boolean

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

ShiftTemplate

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

JSON के काेड में दिखाना
{
  "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 हैं.

JSON के काेड में दिखाना
{
  "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 से 9,99,99,99,999 के बीच होना चाहिए.

EventTemplate

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

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

string

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

minimumMinutesAfterShiftStart

integer

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

maximumMinutesAfterShiftStart

integer

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

durationMinutes

integer

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

startTimeIncrementMinutes

integer

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

EmployeeDemand

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

JSON के काेड में दिखाना
{
  "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 के हिसाब से शिफ़्ट की क्रम वाली सूची, जिसे कई कर्मचारियों को असाइन किया जाना है.

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

string

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

shifts[]

object (ShiftWithEvents)

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

employeeCount

integer

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

ShiftWithEvents

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

JSON के काेड में दिखाना
{
  "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 में इवेंट के शुरू और खत्म होने का समय अलग-अलग हो सकता है.

इवेंट

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

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

string

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

startDateTime

object (DateTime)

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

endDateTime

object (DateTime)

इवेंट खत्म होने की तारीख और समय. यह मान मिनट तक बताया गया है; सेकंड और इससे छोटी इकाइयां नहीं दी जाती हैं.

DemandCoverageViolation

दिए गए इंटरवल के लिए, डिमांड कवरेज के उल्लंघन की जानकारी देता है. बताए गए पूरे अंतराल के दौरान कर्मचारी की मांग एक ही रहती है.

JSON के काेड में दिखाना
{
  "startDateTime": {
    object (DateTime)
  },
  "endDateTime": {
    object (DateTime)
  },
  "coverageViolation": integer
}
फ़ील्ड
startDateTime

object (DateTime)

मांग के इंटरवल के लिए शुरू होने की तारीख और समय (इसमें भी शामिल है). यह मान मिनट तक बताया जाता है.

endDateTime

object (DateTime)

मांग के इंटरवल के खत्म होने की तारीख और समय (खास तौर पर). यह मान मिनट तक बताया जाता है.

coverageViolation

integer

किसी खास अवधि के दौरान कवरेज से जुड़ा उल्लंघन. पॉज़िटिव वैल्यू का मतलब है कि मांग अब ज़्यादा कवर की गई है. वहीं, नेगेटिव वैल्यू से पता चलता है कि मांग पूरी तरह से कवर की गई है.