गैस स्टेशन समस्या के लिए एक एल्गोरिथ्म को समझना


11

में गैस स्टेशन समस्या हम दिया जाता है शहरों { 0 , ... , n - 1 } और उन दोनों के बीच सड़कों। प्रत्येक सड़क की लंबाई है और प्रत्येक शहर ईंधन की कीमत को परिभाषित करता है। सड़क की एक इकाई ईंधन की एक इकाई की लागत। हमारा लक्ष्य सबसे सस्ते संभव तरीके से एक स्रोत से गंतव्य तक जाना है। हमारा टैंक कुछ मूल्य द्वारा सीमित है।n{0,,n1}

मैं एल्गोरिथ्म को समझने की कोशिश करता हूं , इसलिए मैंने समाधान की गणना करने के लिए मैन्युअल रूप से कदम लिखे। दुर्भाग्य से मैं फंस गया - कुछ बिंदु पर विचार करने के लिए कोई किनारा नहीं है, मुझे नहीं पता कि क्यों, शायद मैं कुछ याद कर रहा हूं।

उदाहरण:
सड़क:
0 ----------- 1 ------------ 2 -------------- 3
(यह नहीं है यह सरल होना चाहिए, यह कोई भी ग्राफ़ हो सकता है अर्थात 0- 0- 2, 0-> 3, 1-> 3) आदि के बीच सड़कें हो सकती हैं।

स्रोत: 0, गंतव्य: 3, टैंक: 10 इकाइयों
ईंधन की कीमतें: 0 : 10 इकाइयों, 1 : 10 इकाइयों, 2 : 20 इकाइयों, 3 : 12 इकाइयों की
लंबाई: 0-> 1 : 9 इकाइयों, 1-> 2 : 1 इकाई, 2-> 3 : 7 इकाइयाँ
ऑप्टिमल सॉल्यूशन: 0 में 9 इकाइयाँ भरें और 8 इकाइयाँ। कुल लागत फिर 170 यूनिट्स (9 * 10 + 8 * 10) है।

इसलिए मैंने इसे यहां दिखाए अनुसार गणना करने की कोशिश की (पैराग्राफ 2.2)

GV[u] is defined as:
GV[u] = { TankCapacity - length[w][u] | w in Cities and fuelPrice[w] < fuelPrice[v] and length[w][u] <= TankCapacity } U {0}

so in my case:
GV[0] = {0}
GV[1] = {0}
GV[2] = {0, 3, 9}
GV[3] = {0}

D(u,g) - minimum cost to get from u to t starting with g units of fuel in tank:
D(t,0) = 0, otherwise:
D(u,g) = min (foreach length[u][v] <= TankCapacity)
         { 
           D(v,0) + (length[u][v] - g) * fuelPrice[u]                             : if  fuelPrice[v] <= fuelPrice[u] and g <= length[u][v]
           D(v, TankCapacity - length[u][v]) + (TankCapacity - g) * fuelPrice[u]  : if  fuelPrice[v] > fuelPrice[u]
         }

so in my case:
D(0,0) = min { D(1,0) + 9*10 }  - D(0,0) should contain minimum cost from 0->3
D(1,0) = min { D(2,9) + 10*10 } - in OPT we should tank here only 8 units :(
D(2,9) = min { ??? - no edges which follows the condition from the reccurence 

Nevertheless D(0,0) = 90 + 100 + smth, so it's already too much.

To achieve the optimal solution algorithm should calculate D(2,7) because the optimal route is:   
(0,0) -> (1,0) -> (2, 7) -> (3, 0) [(v, g): v - city, g - fuel in tank]. 
If we look at G[2] there is no "7", so algorithm doesn't even assume to calculate D(2,7), 
so how can it return optimal solutions?

दस्तावेज़ से पुनरावृत्ति काम नहीं लगती है या अधिक संभावना है कि मैं कुछ गलत कर रहा हूं।

किसी ने मुझे इस के साथ मदद कर सकता है?

जवाबों:


7

समस्या min()पी पर समीकरण (4) में पहले तर्क के लिए स्थिति में है। 7. यह वर्तमान में है

c(v) <= c(u) and g < d[u][v]

लेकिन यह होना चाहिए

(c(v) <= c(u) or v = t) and g < d[u][v]

कोई गैस नहीं छोड़े जाने के लिए टी पर आगमन को मजबूर करने के लिए। (जैसा कि फिल-रो (यू, क्यू) में बग के लिए मेरी व्याख्या नीचे दी गई है, हम कभी भी गैस पर गैस की लागत में रुचि नहीं रखते हैं । और वहाँ के साथ, समस्या को ठीक करने का एक और तरीका होगा सी (टी) को अधिलेखित करना। ) एल्गोरिथ्म की शुरुआत में 0 के साथ।)

इस गलती (प्रकाशित एल्गोरिथ्म में) को ठीक करते हुए, लापता किनारों को जोड़कर, जैसा कि मैं नीचे वर्णन करता हूं (आपकी गलती :-P), सब कुछ काम करने के लिए पर्याप्त होना चाहिए।


एक बात जो आप याद कर रहे हैं वह यह है कि ग्राफ जी को पूरा होना चाहिए (धारा 2, पी। 4 का पहला वाक्य) - और अगर यह पूरा नहीं है, तो किसी भी लापता किनारों को जोड़ना होगा, जिसमें न्यूनतम पथ लंबाई लेने से वजन पाया जाता है। लेखाचित्र। उदाहरण के लिए, आपके उदाहरण के ग्राफ में, वज़न 8 (2 के माध्यम से पथ के अनुरूप) के साथ 1 से 3 तक की बढ़त होनी चाहिए, ताकि वास्तव में जीवी [3] = {0, 2}।

मुझे यकीन नहीं है कि यह आपके लिए समस्या को पूरी तरह से हल करेगा, लेकिन यह मदद करनी चाहिए।

अलग से, मुझे लगता है कि पी पर फिल-रो (यू, क्यू) एल्गोरिथ्म में एक बग है। 6: इस एल्गोरिथ्म को केस क्यू = 1 विशेष रूप से व्यवहार करना चाहिए, लेकिन यह नहीं करता है। मेरा मानना ​​है कि इसे बदलकर ठीक किया जा सकता है

if c(v) <= c(u)

3 से लाइन पर

if c(v) <= c(u) or q = 1

किसी भी अंतिम पैर को खाली स्थान पर पहुंचने के लिए मजबूर करना। (सहज रूप से, हमें हमेशा अंतिम गंतव्य पर गैस की कीमत की अवहेलना करनी चाहिए, टी।) इसके चारों ओर एक और तरीका होगा सी (टी) को शुरुआत में 0 के साथ ओवरराइट करना होगा।


q=1c(v)>c(u)

2

@J_random_hacker समाधान का उपयोग करके हमें अपने ग्राफ़ को पूर्ण ग्राफ़ में बदलने और समीकरण (4) से स्थिति को बदलने की आवश्यकता है:

(c(v) <= c(u) or v = t) and g < d[u][v]     

पूरा ग्राफ इस तरह दिखना चाहिए:

यहाँ छवि विवरण दर्ज करें

और अंतिम गणना:

GV[0] = {0}, GV[1] = {0}, GV[2] = {0, 3, 9}, GV[3] = {0, 2}

D(0,0) = min { D(1,0) + 9 * 10 }
D(1,0) = min { D(2,9) + 10 * 10, D(3,0) + 8*10 }
D(3,0) = 0
... etc

so D(0,0) = 170

0 -> 1 -> 3 के माध्यम से पथ [कुल लागत 170 $] समाधान है। यही हमने उम्मीद की थी :-)। यदि हमें एक मार्ग की आवश्यकता है, तो हमें शुरुआत में दिए गए किनारों के समाधान से उन अतिरिक्त किनारों को बदलने में सक्षम होना चाहिए (यह बहुत कठिन नहीं होना चाहिए)।

मुझे केवल आश्चर्य है कि हमें इस पुनरावृत्ति में डेडलूप से कैसे बचना चाहिए। उदाहरण के लिए 0 <-> 1 के बीच डेडलूप हो सकता है, क्योंकि c (0) <= c (1) और c (1) <= c (0)।


भविष्य के संदर्भ के लिए, इस मेटा पोस्ट को देखें :-)
जुहो

1

विचार यह है कि जहां कहीं भी आप प्राप्त करें (लालची एल्गोरिथ्म प्रतिमान) सस्ती दर पर ईंधन प्राप्त करें

कुछ उदाहरण लीजिए। आपके उदाहरण में

स्रोत: 0, गंतव्य: 3, टैंक: 10 इकाइयों ईंधन की कीमतें: 0: 10 इकाइयों, 1: 10 इकाइयों, 2: 20 इकाइयों, 3: 12 इकाइयों की लंबाई: 0-> 1: 9 इकाइयों, 1-> 2: 1 इकाई, 2-> 3: 7 इकाइयाँ

मुझे पहली बार 9 इकाइयों की यात्रा करनी है, इसलिए मुझे अपने टैंक को 0 => 9 इकाइयों (क्षमता> = 9) के साथ भरना होगा। अब, मैं 1,2,3 पर देख सकता हूं कि ईंधन की दर है = = ईंधन दर 0. पर। मैं अपनी जरूरत का ईंधन सबसे सस्ती दर पर खरीदना चाहता हूं, मैं 9 + 1 + 7 = 17 इकाइयों को भरने की कोशिश करूंगा। शहर 0 केवल। लेकिन, टैंक की क्षमता <17 हो सकती है। 10. तो, मैं 10 तक भर जाऊंगा। फिर 1 बजे मेरे पास 1 यूनिट ईंधन बचा है और मुझे 8 इकाइयों को आगे बढ़ाना है, इसलिए 1 पर मैं 7 को भर दूंगा इकाइयाँ अधिक मैं 2 को नहीं भर सकता क्योंकि रेट अधिक होगा। मेरी, कुल लागत = 10 * 10 + 7 * 10 = 170।

Cidijij

i) पूर्ण = 0

i=0n1liCi>Clll=n1dllk=i+1ldk,k+1mindlimindli=l


आपके उत्तर के लिए धन्यवाद! दुर्भाग्य से मैंने खुद को स्पष्ट रूप से पर्याप्त नहीं बताया। आपने मान लिया, वह ग्राफ मेरे उदाहरण के समान सरल होगा, लेकिन यह कोई भी ग्राफ हो सकता है अर्थात वहाँ भी सड़कें हो सकती हैं 0-> 2, 1-> 3 आदि
वोज्शिएक कुलिक

हां, जैसा कि आपने उल्लेख नहीं किया है कि इससे पहले कि मैंने यह मान लिया कि सभी शहर एक रैखिक फैशन में जुड़े हुए हैं (ग्राफ एक सरल मार्ग है)।
सयान बंद्योपाध्याय
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.