दिए गए DesignShippingNetworkRequest
से लाइनर शिपिंग नेटवर्क के डिज़ाइन और शेड्यूल करने की समस्या (LSNDSP) को हल करता है.
LSNDSP, ऑप्टिमाइज़ेशन की एक जटिल समस्या है. इसका मकसद, लाइनर के शिपिंग नेटवर्क के लिए सबसे सही डिज़ाइन और शेड्यूल तय करना है. इसका मकसद नेटवर्क के काम करने में आने वाली कुल लागत को कम करना है, साथ ही पोर्ट के बीच कार्गो की ज़्यादा से ज़्यादा मांग को पूरा करना है.
LSNDSP को दो मुख्य उप-समस्याओं में बांटा जा सकता है: नेटवर्क डिज़ाइन और शेड्यूलिंग. नेटवर्क डिज़ाइन सब-प्रॉब्लम, नेटवर्क के लिए आने वाले पोर्ट के सेट, हर रूट पर डिप्लॉय किए जाने वाले जहाज़ों की संख्या, और वे रूट तय करता है जिन पर जहाज़ों का इस्तेमाल करना है. शेड्यूलिंग सबप्रोसेस में, जहाज़ों के लिए सेलिंग शेड्यूल तय किया जाता है. इसके लिए, पोर्ट के बीच से शिप करने में लगने वाला समय, कार्गो को लोड और अनलोड करने में लगने वाला समय, और पोर्ट के बीच कार्गो ट्रांसपोर्टेशन की मांग को ध्यान में रखा जाता है.
आसान शब्दों में कहें, तो एलएसएनडीएसपी यह तय करने की समस्या है कि किन पोर्ट को सेवा देनी है, कितने जहाज़ों का इस्तेमाल करना है, और जहाज़ों को शेड्यूल कैसे करना है, ताकि कार्गो की मांग को पूरा करने के लिए ज़्यादा से ज़्यादा रेवेन्यू जनरेट किया जा सके और नेटवर्क चलाने में आने वाला खर्च भी कम हो. एलएसएनडीएसपी का एक चुनौती भरा सबकॉम्पोनेंट कार्गो रूटिंग है. इससे तय होता है कि रेवेन्यू बढ़ाने के लिए, कौनसी मांग पूरी करनी होंगी और कार्गो को कौनसे रूट असाइन करने होंगे.
एचटीटीपी अनुरोध
POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork
यह यूआरएल gRPC ट्रांसकोडिंग सिंटैक्स का इस्तेमाल करता है.
अनुरोध का मुख्य भाग
अनुरोध के मुख्य हिस्से में, यहां दिए गए स्ट्रक्चर का डेटा शामिल होता है:
JSON के काेड में दिखाना |
---|
{ "requestId": string, "solverParameters": { object ( |
फ़ील्ड | |
---|---|
requestId |
कोई समस्या है या आईडी के लिए अनुरोध करें. |
solverParameters |
सॉल्वर के लिए पैरामीटर. |
ports[] |
जहाज़ों से जुड़ी सेवाओं में जिन पोर्ट को शामिल किया जाना है उनकी सूची. अनुरोध में सिर्फ़ इस सूची में मौजूद पोर्ट आईडी शामिल होने चाहिए. |
legCandidates[] |
जहाज़ों की सेवाओं में शामिल किए जाने वाले संभावित कर्मचारियों की सूची. अनुरोध में केवल इस सूची में मौजूद लेग कैंडिडेट आईडी ही होने चाहिए. |
vesselClasses[] |
जहाज़ों की सेवाएं देने के लिए जहाज़ों की कैटगरी की सूची. ध्यान दें कि एक ही क्लास के सभी जहाज़ पूरी तरह आपस में बदले जा सकते हैं. अनुरोध में सिर्फ़ इस सूची में मौजूद जहाज़ के क्लास आईडी शामिल होने चाहिए. |
commodityDemands[] |
संभावित कमोडिटी (जैसे, कंटेनर) से जुड़ी ज़रूरतों को जहाज़ सेवाओं की मदद से पूरी करने की सूची. |
vesselServices[] |
ऑप्टिमाइज़ेशन के लिए, मान्य जहाज़ सेवाओं के नेटवर्क (आम तौर पर, नेटवर्क की मौजूदा स्थिति) का इस्तेमाल किया जा सकता है. |
जवाब का मुख्य भाग
इस जवाब में, अनुरोध में पास किए गए LSNDSP इंस्टेंस का समाधान दिया जाता है. इसमें जहाज़ों की सेवाओं और कमोडिटी डिमांड पाथ का एक मान्य नेटवर्क मौजूद होता है. हर लेग से जाने वाली कमोडिटी की कुल मांग, इस लेग को चलाने वाले जहाज़ की कैटगरी की क्षमता से ज़्यादा नहीं हो सकती. ध्यान दें कि जहाज़ों से जुड़ी ऐसी कोई भी सेवा मौजूद नहीं है जिसकी मांग पूरी न हुई हो. यह लाइनर के शिपिंग नेटवर्क के डिज़ाइन और शेड्यूल करने से जुड़ी समस्याओं का एक कारगर समाधान है.
अगर एपीआई सही से जुड़ जाता है, ताे जवाब के मुख्य भाग में नीचे दिए गए स्ट्रक्चर शामिल होता है.
JSON के काेड में दिखाना |
---|
{ "requestId": string, "vesselServices": [ { object ( |
फ़ील्ड | |
---|---|
requestId |
अनुरोध का वह आईडी जिससे यह जवाब जुड़ा है. |
vesselServices[] |
जहाज़ों का नेटवर्क. जहाज़ों की हर क्लास के लिए, इस्तेमाल किए जाने वाले जहाज़ों की कुल संख्या, इस क्लास के लिए उपलब्ध जहाज़ों की संख्या से ज़्यादा नहीं हो सकती. |
commodityDemandPaths[] |
उन सभी कमोडिटी डिमांड पाथ की सूची जिनसे कमोडिटी की पॉज़िटिव डिमांड को शिप किया जाता है. ध्यान दें कि अगर कोई मांग नहीं भेजी गई है, तो हो सकता है कि कुछ कमोडिटी डिमांड आईडी शामिल न किए जाएं. इसके अलावा, कमोडिटी की मांग को आंशिक तौर पर पूरा किया जा सकता है. हर कमोडिटी की मांग के लिए, पूरे किए गए कुल आइटम की संख्या, कुल मांग से ज़्यादा नहीं हो सकती. आखिर में, commodityDemandPaths, वैटServices (CommodityDemandPath की परिभाषा देखें) पर निर्भर करते हैं. |
SolverParameters
एलएसएनडीएसपी के सिंगल समाधान को कंट्रोल करने वाले पैरामीटर.
JSON के काेड में दिखाना |
---|
{ "timeLimit": string } |
फ़ील्ड | |
---|---|
timeLimit |
वह ज़्यादा से ज़्यादा समय जो सॉल्वर को समस्या पर बिताना चाहिए. इस वैल्यू के लिए कोई तय सीमा नहीं है. साथ ही, इसमें कम्यूनिकेशन का ओवरहेड शामिल नहीं होता. इस समस्या को हल करने में लगने वाला अनुमानित समय, वैल्यू से थोड़ा ज़्यादा हो सकता है. सेकंड में कुल नौ दशमलव अंक, जो ' |
पोर्ट
पोर्ट, जैसे किसी टर्मिनल या पोर्ट के सभी टर्मिनल.
JSON के काेड में दिखाना |
---|
{ "id": string, "minimumPortStayDuration": { object ( |
फ़ील्ड | |
---|---|
id |
इस पोर्ट के लिए असाइन किया गया यूनीक आईडी. |
minimumPortStayDuration |
पोर्ट कॉल के दौरान ठहरने की कम से कम अवधि. ज़्यादातर अध्ययनों में यह माना जाता है कि पोर्ट आम तौर पर ज़्यादा मूव काउंट वाले बड़े जहाज़ों को ज़्यादा क्रेन असाइन करते हैं, क्योंकि ये ज़्यादा जगह लेते हैं. |
minimumTransshipmentDuration |
किसी दिए गए पोर्ट पर ट्रांसशिपमेंट का कम से कम समय. इसमें कंटेनर को अनलोड करने और उसे दूसरे जहाज़ पर फिर से लोड करने की अवधि भी शामिल है. |
transshipmentCost |
एक कंटेनर को ट्रांसशिपिंग करने का शुल्क. आम तौर पर यह शुल्क, लोड और डिस्चार्ज में लगने वाले कुल समय से कम होगा, क्योंकि ट्रांसशिपिंग के लिए पोर्ट पर कस्टम पेपरवर्क की ज़रूरत नहीं होती. |
vesselClassCosts |
इस पोर्ट को कॉल करने में आने वाली लागत, जहाज़ के क्लास आईडी के हिसाब से मैप की गई है. इस मैप में एंट्री होने पर ही जहाज़ की कैटगरी इस पोर्ट को कॉल कर सकती है. एक ऑब्जेक्ट, जिसमें |
कुल समय
अवधि (पोर्ट में ठहरने/ट्रांसशिप, डिमांड ट्रांज़िट) को हर घंटे के हिसाब से तय किया जाता है.
JSON के काेड में दिखाना |
---|
{ "hours": string } |
फ़ील्ड | |
---|---|
hours |
कुल समय तय करने वाले घंटों की संख्या. |
VesselCost
इस पोर्ट पर कॉल करने और ठहरने का वेसल शुल्क, ठहरने की कुल अवधि (fixedCost
+ hourlyCost
* घंटे) के लीनियर फ़ंक्शन के तौर पर बताया गया है.
JSON के काेड में दिखाना |
---|
{ "fixedCost": number, "hourlyCost": number } |
फ़ील्ड | |
---|---|
fixedCost |
इस पोर्ट को कॉल करने का तय शुल्क. |
hourlyCost |
इस पोर्ट पर ठहरने के लिए हर घंटे का शुल्क. |
LegCandidate
वेसल सर्विस लेग कैंडिडेट. एक ही दो पोर्ट के बीच एक से ज़्यादा लेग कैंडिडेट हो सकते हैं, उदाहरण के लिए यह दिखा सकता है कि समुद्र के अलग-अलग रास्ते और/या जहाज़ों की रफ़्तार कैसी है.
JSON के काेड में दिखाना |
---|
{
"id": string,
"departurePortId": string,
"arrivalPortId": string,
"duration": {
object ( |
फ़ील्ड | |
---|---|
id |
इस पद के उम्मीदवार को असाइन किया गया यूनीक आईडी. |
departurePortId |
जाने वाले पोर्ट का आईडी. |
arrivalPortId |
पहुंचने के पोर्ट का आईडी. |
duration |
पैर की अवधि. |
vesselClassCosts |
इस लेग कैंडिडेट को जहाज़ की किसी खास क्लास को असाइन करने की लागत. इसमें जहाज़ के संचालन की लागत, बंकर की कीमत, चार्टर का शुल्क शामिल हो सकता है. इस मैप में प्रवेश करने के बाद ही इस लेग कैंडिडेट पर जहाज़ों की क्लास भेजी जा सकती है. एक ऑब्जेक्ट, जिसमें |
VesselClass
वेसल क्लास, यानी एक ही प्रॉपर्टी को शेयर करने वाले जहाज़ों का ग्रुप. एक ही क्लास से दो जहाज़ों के बीच अंतर करने का कोई तरीका नहीं है.
JSON के काेड में दिखाना |
---|
{ "id": string, "containerCapacity": string, "vesselCount": string } |
फ़ील्ड | |
---|---|
id |
जहाज़ की इस श्रेणी को असाइन किया गया यूनीक आईडी. |
containerCapacity |
वेसल क्लास कपैसिटी (कंटेनर में). |
vesselCount |
जहाज़ों की इस श्रेणी में जहाज़ों की संख्या. |
CommodityDemand
कमॉडिटी डिमांड, यानी वह मांग जिसे शिपर पूरा कर सकता है.
JSON के काेड में दिखाना |
---|
{
"id": string,
"originPortId": string,
"destinationPortId": string,
"containerCount": string,
"freightRate": number,
"maximumTransitDuration": {
object ( |
फ़ील्ड | |
---|---|
id |
इस कमोडिटी डिमांड के लिए असाइन किया गया यूनीक आईडी. |
originPortId |
ऑरिजिन पोर्ट का आईडी. |
destinationPortId |
डेस्टिनेशन पोर्ट का आईडी. |
containerCount |
डिलीवर किए जाने वाले कंटेनर की ज़्यादा से ज़्यादा संख्या. |
freightRate |
हर कंटेनर के लिए फ़्रेट रेट (जिसमें मांग पूरी न करने पर जुर्माना भी लग सकता है). इसे ऑरिजिन और डेस्टिनेशन पर, हर कंटेनर के लिए लोड और डिस्चार्ज करने पर लगने वाला शुल्क हटा देना चाहिए. |
maximumTransitDuration |
ज़्यादा से ज़्यादा ट्रांज़िट समय (अगर सेट किया गया है, तो यह पॉज़िटिव होना चाहिए). ट्रांज़िट समय उस समय से तय किया जाता है जब इस मांग को पूरा करने वाला पहला जहाज़, ऑरिजिन पोर्ट से उस समय तक पहुंचता है जब इस मांग को पूरा करने वाला आखिरी जहाज़, डेस्टिनेशन पोर्ट पर पहुंचता है. |
VesselService
वेसेल सेवा, जिसका इस्तेमाल कमॉडिटी की मांग को पूरा करने के लिए किया जा सकता है. अहम जानकारी: एक मौजूदा अनुमान है कि सेवाओं को हफ़्ते में एक बार चलाया जा रहा है और पोर्ट के रहने का समय एक हफ़्ते से ज़्यादा नहीं हो सकता. वेसल सर्विस लेग के नीचे दिए गए क्रम का इस्तेमाल करें: datastudioServiceLegs { legक्याId: "0->1" originDepartureTime {} destinationArrivalTime { day: 3 hourOfDay: 12 } } vesselServiceLegs { legCandidateId: "1->0" Originफ़्लाइट { days: 4 }Destinationफ़्लाइट { day: 7 hourOfDay: 12 } } इन लेग में एक हफ़्ते की सर्विस लाइनें तय की जाती हैं. ये सर्विस लाइन दो पोर्ट से होकर गुज़रती हैं और दोनों पोर्ट में 12 घंटे तक ठहरने का समय होता है.
JSON के काेड में दिखाना |
---|
{
"vesselClassId": string,
"vesselServiceLegs": [
{
object ( |
फ़ील्ड | |
---|---|
vesselClassId |
सेवा देने वाला वेसेल क्लास आईडी. |
vesselServiceLegs[] |
मान्य जहाज़ सेवा के लिए, इन प्रॉपर्टी में शामिल हैं: 1. इसे खाली नहीं छोड़ा जा सकता. 2. एक के बाद एक पैर, destinationPortId और originPortId का मेल खाना ज़रूरी है (आखिरी और पहली पैरों के लिए भी शामिल है). |
VesselServiceLeg
जहाज़ों की सेवा का एक हिस्सा.
JSON के काेड में दिखाना |
---|
{ "legCandidateId": string, "originDepartureTime": { object ( |
फ़ील्ड | |
---|---|
legCandidateId |
असाइन किए गए लेग कैंडिडेट आईडी. |
originDepartureTime |
हफ़्ते के शेड्यूल के हिसाब से, ऑरिजिन पोर्ट पर रवानगी का समय. |
destinationArrivalTime |
हफ़्ते के शेड्यूल के मुताबिक, डेस्टिनेशन पोर्ट पर पहुंचने का समय. |
ScheduleTime
शेड्यूल का समय (वेसल/मांग पर रवाना होने/आने वाली फ़्लाइट) का समय, दिए गए घंटे के हिसाब से हर हफ़्ते की फ़्रीक्वेंसी के हिसाब से तय किया जाता है.
JSON के काेड में दिखाना |
---|
{ "day": string, "hourOfDay": integer } |
फ़ील्ड | |
---|---|
day |
शेड्यूल के हिसाब से दिन. दिन 0 पहला संभावित दिन होता है. |
hourOfDay |
शेड्यूल के समय के लिए दिन का घंटा 0 और 23 के बीच का कोई पूर्णांक होना चाहिए. |
CommodityDemandPath
वे अलग-अलग सेवाएं और पोर्ट जो किसी कमोडिटी की मांग का एक छोटा हिस्सा इस्तेमाल कर रहा है. नीचे इस्तेमाल किए गए इंडेक्स, रिस्पॉन्स के तौर पर जहाज़ों की सेवाओं के क्रम और अलग-अलग जहाज़ सेवाओं में सर्विस लेग के क्रम पर आधारित हैं.
JSON के काेड में दिखाना |
---|
{
"commodityDemandId": string,
"containerCount": string,
"vesselServiceLegIds": [
{
object ( |
फ़ील्ड | |
---|---|
commodityDemandId |
कमोडिटी डिमांड आईडी पूरा किया गया. |
containerCount |
इस पाथ से जाने वाले कंटेनर की संख्या. हर कमोडिटी की मांग के लिए, पूरे किए गए कुल आइटम की संख्या, कुल मांग से ज़्यादा नहीं हो सकती. |
vesselServiceLegIds[] |
इस रास्ते से जाने वाले जहाज़ों की सेवा के लेग आईडी की सूची. मान्य कमोडिटी डिमांड पाथ के लिए, इन प्रॉपर्टी में शामिल हैं: 1. पहले लेग का ExportPortId, कमॉडिटी डिमांड के originPortId से मेल खाना चाहिए. 2. आखिरी लेग का डेस्टिनेशन पोर्ट आईडी, कमोडिटी डिमांड के डेस्टिनेशन पोर्ट आईडी से मेल खाना चाहिए. 3. एक के बाद एक पैर, आने वाली पोर्ट की आईडी और फ़्लाइट पोर्ट करने में लगने वाली जगह की जानकारी का डेटा एक जैसा होना चाहिए. 4. अगर इस कमोडिटी डिमांड के लिए दी गई है, तो ज़्यादा से ज़्यादा ट्रांज़िट समय, पाथ की कुल अवधि से ज़्यादा या उसके बराबर होना चाहिए. |
VesselServiceLegId
कमॉडिटी डिमांड पाथ में एक जहाज़ की सर्विस लेग का इस्तेमाल किया गया. उदाहरण के लिए, मान लीजिए कि दो जहाज़ सेवाएं उपलब्ध हैं. पहली तीन भुजाओं (इंडेक्स 0, 1, और 2) से बनी है और दूसरी दो (इंडेक्स 0 और 1) से. इसके अलावा, पहली सेवा का पहला चरण दूसरी सेवा के दूसरे चरण के प्रस्थान पोर्ट पर आता है. एक कमॉडिटी पाथ में तीन जहाज़ सेवा लेग आईडी शामिल हैं: {vesselServiceIndex: 0,VendorServiceLegIndex: 2} {vesselServiceIndex: 0,VendorServiceLegIndex: 0} {vesselServiceIndex: 1, ValServiceLegIndex: 1} का मतलब यह है कि कंटेनर पहली पोत सेवा से लगातार दो लेग सेवा ले जाते हैं (ध्यान दें कि हर जहाज़ सेवा के लिए लगातार 2 और 0 पोत का चक्र होता है).
JSON के काेड में दिखाना |
---|
{ "vesselServiceIndex": integer, "vesselServiceLegIndex": integer } |
फ़ील्ड | |
---|---|
vesselServiceIndex |
जहाज़ सेवा का इंडेक्स. |
vesselServiceLegIndex |
जहाज़ सेवा से पांव का इंडेक्स, |