Method: shipping.designShippingNetwork

दिए गए DesignShippingNetworkRequest से लाइनर शिपिंग नेटवर्क के डिज़ाइन और शेड्यूल करने की समस्या (LSNDSP) को हल करता है.

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

LSNDSP को दो मुख्य उप-समस्याओं में बांटा जा सकता है: नेटवर्क डिज़ाइन और शेड्यूलिंग. नेटवर्क डिज़ाइन सब-प्रॉब्लम, नेटवर्क के लिए आने वाले पोर्ट के सेट, हर रूट पर डिप्लॉय किए जाने वाले जहाज़ों की संख्या, और वे रूट तय करता है जिन पर जहाज़ों का इस्तेमाल करना है. शेड्यूलिंग सबप्रोसेस में, जहाज़ों के लिए सेलिंग शेड्यूल तय किया जाता है. इसके लिए, पोर्ट के बीच से शिप करने में लगने वाला समय, कार्गो को लोड और अनलोड करने में लगने वाला समय, और पोर्ट के बीच कार्गो ट्रांसपोर्टेशन की मांग को ध्यान में रखा जाता है.

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

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

POST https://optimization.googleapis.com/v1/shipping:designShippingNetwork

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

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

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

JSON के काेड में दिखाना
{
  "requestId": string,
  "solverParameters": {
    object (SolverParameters)
  },
  "ports": [
    {
      object (Port)
    }
  ],
  "legCandidates": [
    {
      object (LegCandidate)
    }
  ],
  "vesselClasses": [
    {
      object (VesselClass)
    }
  ],
  "commodityDemands": [
    {
      object (CommodityDemand)
    }
  ],
  "vesselServices": [
    {
      object (VesselService)
    }
  ]
}
फ़ील्ड
requestId

string

कोई समस्या है या आईडी के लिए अनुरोध करें.

solverParameters

object (SolverParameters)

सॉल्वर के लिए पैरामीटर.

ports[]

object (Port)

जहाज़ों से जुड़ी सेवाओं में जिन पोर्ट को शामिल किया जाना है उनकी सूची. अनुरोध में सिर्फ़ इस सूची में मौजूद पोर्ट आईडी शामिल होने चाहिए.

legCandidates[]

object (LegCandidate)

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

vesselClasses[]

object (VesselClass)

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

commodityDemands[]

object (CommodityDemand)

संभावित कमोडिटी (जैसे, कंटेनर) से जुड़ी ज़रूरतों को जहाज़ सेवाओं की मदद से पूरी करने की सूची.

vesselServices[]

object (VesselService)

ऑप्टिमाइज़ेशन के लिए, मान्य जहाज़ सेवाओं के नेटवर्क (आम तौर पर, नेटवर्क की मौजूदा स्थिति) का इस्तेमाल किया जा सकता है.

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

इस जवाब में, अनुरोध में पास किए गए LSNDSP इंस्टेंस का समाधान दिया जाता है. इसमें जहाज़ों की सेवाओं और कमोडिटी डिमांड पाथ का एक मान्य नेटवर्क मौजूद होता है. हर लेग से जाने वाली कमोडिटी की कुल मांग, इस लेग को चलाने वाले जहाज़ की कैटगरी की क्षमता से ज़्यादा नहीं हो सकती. ध्यान दें कि जहाज़ों से जुड़ी ऐसी कोई भी सेवा मौजूद नहीं है जिसकी मांग पूरी न हुई हो. यह लाइनर के शिपिंग नेटवर्क के डिज़ाइन और शेड्यूल करने से जुड़ी समस्याओं का एक कारगर समाधान है.

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

JSON के काेड में दिखाना
{
  "requestId": string,
  "vesselServices": [
    {
      object (VesselService)
    }
  ],
  "commodityDemandPaths": [
    {
      object (CommodityDemandPath)
    }
  ]
}
फ़ील्ड
requestId

string

अनुरोध का वह आईडी जिससे यह जवाब जुड़ा है.

vesselServices[]

object (VesselService)

जहाज़ों का नेटवर्क. जहाज़ों की हर क्लास के लिए, इस्तेमाल किए जाने वाले जहाज़ों की कुल संख्या, इस क्लास के लिए उपलब्ध जहाज़ों की संख्या से ज़्यादा नहीं हो सकती.

commodityDemandPaths[]

object (CommodityDemandPath)

उन सभी कमोडिटी डिमांड पाथ की सूची जिनसे कमोडिटी की पॉज़िटिव डिमांड को शिप किया जाता है. ध्यान दें कि अगर कोई मांग नहीं भेजी गई है, तो हो सकता है कि कुछ कमोडिटी डिमांड आईडी शामिल न किए जाएं. इसके अलावा, कमोडिटी की मांग को आंशिक तौर पर पूरा किया जा सकता है. हर कमोडिटी की मांग के लिए, पूरे किए गए कुल आइटम की संख्या, कुल मांग से ज़्यादा नहीं हो सकती. आखिर में, commodityDemandPaths, वैटServices (CommodityDemandPath की परिभाषा देखें) पर निर्भर करते हैं.

SolverParameters

एलएसएनडीएसपी के सिंगल समाधान को कंट्रोल करने वाले पैरामीटर.

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

string (Duration format)

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

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

पोर्ट

पोर्ट, जैसे किसी टर्मिनल या पोर्ट के सभी टर्मिनल.

JSON के काेड में दिखाना
{
  "id": string,
  "minimumPortStayDuration": {
    object (Duration)
  },
  "minimumTransshipmentDuration": {
    object (Duration)
  },
  "transshipmentCost": number,
  "vesselClassCosts": {
    string: {
      object (VesselCost)
    },
    ...
  }
}
फ़ील्ड
id

string

इस पोर्ट के लिए असाइन किया गया यूनीक आईडी.

minimumPortStayDuration

object (Duration)

पोर्ट कॉल के दौरान ठहरने की कम से कम अवधि. ज़्यादातर अध्ययनों में यह माना जाता है कि पोर्ट आम तौर पर ज़्यादा मूव काउंट वाले बड़े जहाज़ों को ज़्यादा क्रेन असाइन करते हैं, क्योंकि ये ज़्यादा जगह लेते हैं.

minimumTransshipmentDuration

object (Duration)

किसी दिए गए पोर्ट पर ट्रांसशिपमेंट का कम से कम समय. इसमें कंटेनर को अनलोड करने और उसे दूसरे जहाज़ पर फिर से लोड करने की अवधि भी शामिल है.

transshipmentCost

number

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

vesselClassCosts

map (key: string, value: object (VesselCost))

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

एक ऑब्जेक्ट, जिसमें "key": value पेयर की सूची है. उदाहरण: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

कुल समय

अवधि (पोर्ट में ठहरने/ट्रांसशिप, डिमांड ट्रांज़िट) को हर घंटे के हिसाब से तय किया जाता है.

JSON के काेड में दिखाना
{
  "hours": string
}
फ़ील्ड
hours

string (int64 format)

कुल समय तय करने वाले घंटों की संख्या.

VesselCost

इस पोर्ट पर कॉल करने और ठहरने का वेसल शुल्क, ठहरने की कुल अवधि (fixedCost + hourlyCost * घंटे) के लीनियर फ़ंक्शन के तौर पर बताया गया है.

JSON के काेड में दिखाना
{
  "fixedCost": number,
  "hourlyCost": number
}
फ़ील्ड
fixedCost

number

इस पोर्ट को कॉल करने का तय शुल्क.

hourlyCost

number

इस पोर्ट पर ठहरने के लिए हर घंटे का शुल्क.

LegCandidate

वेसल सर्विस लेग कैंडिडेट. एक ही दो पोर्ट के बीच एक से ज़्यादा लेग कैंडिडेट हो सकते हैं, उदाहरण के लिए यह दिखा सकता है कि समुद्र के अलग-अलग रास्ते और/या जहाज़ों की रफ़्तार कैसी है.

JSON के काेड में दिखाना
{
  "id": string,
  "departurePortId": string,
  "arrivalPortId": string,
  "duration": {
    object (Duration)
  },
  "vesselClassCosts": {
    string: number,
    ...
  }
}
फ़ील्ड
id

string

इस पद के उम्मीदवार को असाइन किया गया यूनीक आईडी.

departurePortId

string

जाने वाले पोर्ट का आईडी.

arrivalPortId

string

पहुंचने के पोर्ट का आईडी.

duration

object (Duration)

पैर की अवधि.

vesselClassCosts

map (key: string, value: number)

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

एक ऑब्जेक्ट, जिसमें "key": value पेयर की सूची है. उदाहरण: { "name": "wrench", "mass": "1.3kg", "count": "3" }.

VesselClass

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

JSON के काेड में दिखाना
{
  "id": string,
  "containerCapacity": string,
  "vesselCount": string
}
फ़ील्ड
id

string

जहाज़ की इस श्रेणी को असाइन किया गया यूनीक आईडी.

containerCapacity

string (int64 format)

वेसल क्लास कपैसिटी (कंटेनर में).

vesselCount

string (int64 format)

जहाज़ों की इस श्रेणी में जहाज़ों की संख्या.

CommodityDemand

कमॉडिटी डिमांड, यानी वह मांग जिसे शिपर पूरा कर सकता है.

JSON के काेड में दिखाना
{
  "id": string,
  "originPortId": string,
  "destinationPortId": string,
  "containerCount": string,
  "freightRate": number,
  "maximumTransitDuration": {
    object (Duration)
  }
}
फ़ील्ड
id

string

इस कमोडिटी डिमांड के लिए असाइन किया गया यूनीक आईडी.

originPortId

string

ऑरिजिन पोर्ट का आईडी.

destinationPortId

string

डेस्टिनेशन पोर्ट का आईडी.

containerCount

string (int64 format)

डिलीवर किए जाने वाले कंटेनर की ज़्यादा से ज़्यादा संख्या.

freightRate

number

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

maximumTransitDuration

object (Duration)

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

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 (VesselServiceLeg)
    }
  ]
}
फ़ील्ड
vesselClassId

string

सेवा देने वाला वेसेल क्लास आईडी.

vesselServiceLegs[]

object (VesselServiceLeg)

मान्य जहाज़ सेवा के लिए, इन प्रॉपर्टी में शामिल हैं: 1. इसे खाली नहीं छोड़ा जा सकता. 2. एक के बाद एक पैर, destinationPortId और originPortId का मेल खाना ज़रूरी है (आखिरी और पहली पैरों के लिए भी शामिल है).

VesselServiceLeg

जहाज़ों की सेवा का एक हिस्सा.

JSON के काेड में दिखाना
{
  "legCandidateId": string,
  "originDepartureTime": {
    object (ScheduleTime)
  },
  "destinationArrivalTime": {
    object (ScheduleTime)
  }
}
फ़ील्ड
legCandidateId

string

असाइन किए गए लेग कैंडिडेट आईडी.

originDepartureTime

object (ScheduleTime)

हफ़्ते के शेड्यूल के हिसाब से, ऑरिजिन पोर्ट पर रवानगी का समय.

destinationArrivalTime

object (ScheduleTime)

हफ़्ते के शेड्यूल के मुताबिक, डेस्टिनेशन पोर्ट पर पहुंचने का समय.

ScheduleTime

शेड्यूल का समय (वेसल/मांग पर रवाना होने/आने वाली फ़्लाइट) का समय, दिए गए घंटे के हिसाब से हर हफ़्ते की फ़्रीक्वेंसी के हिसाब से तय किया जाता है.

JSON के काेड में दिखाना
{
  "day": string,
  "hourOfDay": integer
}
फ़ील्ड
day

string (int64 format)

शेड्यूल के हिसाब से दिन. दिन 0 पहला संभावित दिन होता है.

hourOfDay

integer

शेड्यूल के समय के लिए दिन का घंटा 0 और 23 के बीच का कोई पूर्णांक होना चाहिए.

CommodityDemandPath

वे अलग-अलग सेवाएं और पोर्ट जो किसी कमोडिटी की मांग का एक छोटा हिस्सा इस्तेमाल कर रहा है. नीचे इस्तेमाल किए गए इंडेक्स, रिस्पॉन्स के तौर पर जहाज़ों की सेवाओं के क्रम और अलग-अलग जहाज़ सेवाओं में सर्विस लेग के क्रम पर आधारित हैं.

JSON के काेड में दिखाना
{
  "commodityDemandId": string,
  "containerCount": string,
  "vesselServiceLegIds": [
    {
      object (VesselServiceLegId)
    }
  ]
}
फ़ील्ड
commodityDemandId

string

कमोडिटी डिमांड आईडी पूरा किया गया.

containerCount

string (int64 format)

इस पाथ से जाने वाले कंटेनर की संख्या. हर कमोडिटी की मांग के लिए, पूरे किए गए कुल आइटम की संख्या, कुल मांग से ज़्यादा नहीं हो सकती.

vesselServiceLegIds[]

object (VesselServiceLegId)

इस रास्ते से जाने वाले जहाज़ों की सेवा के लेग आईडी की सूची. मान्य कमोडिटी डिमांड पाथ के लिए, इन प्रॉपर्टी में शामिल हैं: 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

integer

जहाज़ सेवा का इंडेक्स.

vesselServiceLegIndex

integer

जहाज़ सेवा से पांव का इंडेक्स, vesselServiceIndex ने इंडेक्स किया है.