গ্যাস স্টেশন সমস্যার জন্য একটি অ্যালগরিদম বোঝা


11

ইন গ্যাস স্টেশন সমস্যা আমরাও তা প্রদত্ত হই শহর ও তাদের মধ্যে সড়ক। প্রতিটি রাস্তার দৈর্ঘ্য রয়েছে এবং প্রতিটি শহর জ্বালানির দাম নির্ধারণ করে। এক ইউনিট রাস্তার জন্য এক ইউনিট জ্বালানী ব্যয় হয়। আমাদের লক্ষ্য হ'ল কোনও উত্স থেকে সম্ভাব্যতম সাধ্য পথে কোনও গন্তব্যে যাওয়া। আমাদের ট্যাঙ্ক কিছু মান দ্বারা সীমাবদ্ধ।n{0,,n1}

আমি অ্যালগরিদম বোঝার চেষ্টা করি , তাই আমি সমাধানটি গণনা করার পদক্ষেপটি ম্যানুয়ালি লিখেছিলাম। দুর্ভাগ্যক্রমে আমি আটকে গেলাম - এক পর্যায়ে বিবেচনার জন্য কোনও প্রান্ত নেই, কেন জানি না, সম্ভবত আমি কিছু মিস করছি।

উদাহরণ:
রাস্তা:
0 ----------- 1 ------------ 2 -------------- 3
(এটি হয় না এটিকে সহজ হতে হবে, এটি কোনও গ্রাফ হতে পারে অর্থাৎ 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 ইউনিট
অনুকূল সমাধান: 9 ইউনিট 0 এবং 8 ইউনিট 1 এ পূরণ করুন মোট ব্যয় তখন 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) এ প্রথম যুক্তির শর্তে । It's. এটি বর্তমানে

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

তবে তা হওয়া উচিত

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

কোন গ্যাস না রেখে আগমনের জন্য বাধ্য করা। (ফিল-রো (ইউ, কিউ) এর বাগের জন্য নীচের মতো আমার ব্যাখ্যা অনুসারে, আমরা কখনই গ্যাসের দাম নিয়ে আগ্রহী না And এবং সেখানে যেমন সমস্যা রয়েছে, তার সমাধান করার আরও একটি উপায় হ'ল সি (টি) ওভাররাইট করা ) অ্যালগরিদমের শুরুতে 0 সহ

এই ভুলটি (প্রকাশিত অ্যালগরিদমে) ঠিক করা, নিখোঁজ প্রান্তগুলি যুক্ত করার সাথে মিলিত হিসাবে আমি নীচে বর্ণনা করছি (আপনার ভুল :- পি), সমস্ত কিছু কাজ করার জন্য যথেষ্ট হওয়া উচিত be


আপনি যে জিনিসটি মিস করছেন তা হ'ল গ্রাফ জি অবশ্যই সম্পূর্ণ হতে হবে (ধারা 2 এর প্রথম বাক্য, পৃষ্ঠা 4) - এবং যদি এটি সম্পূর্ণ না হয় তবে সর্বনিম্ন পথের দৈর্ঘ্য গ্রহণ করে ওজন সহ কোনও অনুপস্থিত প্রান্ত যুক্ত করতে হবে in গ্রাফ সুতরাং উদাহরণস্বরূপ আপনার উদাহরণের গ্রাফে, (অন্যদের মধ্যে) 1 থেকে 3 এর ওজন 8 (2 দিয়ে পাথের সাথে সমান) হওয়া উচিত, যাতে বাস্তবে জিভি [3] = {0, 2} থাকে}

এটি আপনার জন্য সমস্যার সম্পূর্ণ সমাধান করবে কিনা তা আমি নিশ্চিত নই, তবে এটির সাহায্য করা উচিত।

পৃথকভাবে, আমি মনে করি পি-তে ফিল-রো (ইউ, কিউ) অ্যালগরিদমে একটি বাগ আছে। 6: এই অ্যালগরিদমের Q = 1 কেসটি বিশেষভাবে বিবেচনা করা উচিত তবে তা হয় না। আমি বিশ্বাস করি এটি পরিবর্তন করে স্থির করা যেতে পারে

if c(v) <= c(u)

লাইনে 3 থেকে

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

কোনও চূড়ান্ত পা জোর করে গন্তব্যে পৌঁছাতে। (স্বজ্ঞাতভাবে, আমাদের সর্বদা চূড়ান্ত গন্তব্যে গ্যাসের দাম উপেক্ষা করা উচিত, টি।) এর অন্য একটি উপায় হ'ল শুরুতে সি (টি) দিয়ে 0 লিখুন rite


জন্য কী ঘটে সে সম্পর্কে সতর্কতা অবলম্বন করার পাশাপাশি , অভ্যন্তরীণ লুপটি উপাদানগুলির বাইরে চলে গেলে আপনাকে অর্থবোধক মান সহ সারণী পূরণ করারও যত্ন নেওয়া উচিত। তদুপরি, আমি যদি এটি সঠিকভাবে পড়ছি, অ্যালগরিদমটি কেস (সিএফ। এই সিএস এসই প্রশ্ন ) কে পুরোপুরি উপেক্ষা করবে বলে মনে হচ্ছে , তাই সেখানেও কিছু করা দরকার। সি ( v ) > সি ( ইউ )q=1c(v)>c(u)
fuglede

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 $]] solution আমরা যা প্রত্যাশা করেছি :-)। আমাদের যদি কোনও রুটের প্রয়োজন হয়, তবে আমাদের শুরুতে প্রদত্ত প্রান্তগুলিতে সমাধান থেকে শুরু করে সেই অতিরিক্ত প্রান্তগুলি রূপান্তর করতে সক্ষম হওয়া উচিত (এটি খুব অসুবিধা হওয়া উচিত নয়)।

আমি কেবল আশ্চর্য হই যে কীভাবে আমাদের এই পুনরাবৃত্তিতে ডেডলুপগুলি এড়ানো উচিত। উদাহরণস্বরূপ 0 <-> 1 এর মধ্যে ডেডলুপ থাকতে পারে, কারণ সি (0) <= সি (1) এবং সি (1) <= সি (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 এ দেখতে পাচ্ছি, যেহেতু, আমি আমার প্রয়োজনীয় জ্বালানী সস্তার দামে কিনতে চাই আমি 9 + 1 + 7 = 17 ইউনিট পূরণ করার চেষ্টা করব নগরী 0 তবে, ট্যাঙ্কের ধারণক্ষমতাটি হতে পারে <১ 17, 10 বলুন So সুতরাং, আমি 10 পর্যন্ত পূরণ করব 1 তারপরে 1 এ আমার 1 ইউনিট জ্বালানী বাকী রয়েছে এবং আমাকে আরও 8 ইউনিট অতিক্রম করতে হবে, তাই 1 এ আমি 7 পূরণ করব ইউনিট আরও আমি 2 এ পূরণ করতে পারি না কারণ হার বেশি হবে। আমার, মোট ব্যয় = 10 * 10 + 7 * 10 = 170।

লোভী অ্যালগরিদম উপরে বর্ণিত ধারণাটি অনুসরণ করে। শহরে জ্বালানী ব্যয় i। two দুটি শহর এবং মধ্যে দূরত্ব । "পূর্ণ" হ'ল জ্বালানীর একক যা দিয়ে ট্যাঙ্ক পূর্ণ হয়। "ক্ষমতা" হ'ল সর্বোচ্চ ট্যাঙ্ক ক্ষমতা tankডি আমি আমি Cidijij

i) পূর্ণ = 0

২) জন্য থেকে যাক প্রথম শহর হতে পরে যেমন যে (যেমন কোন যদি তারপর বিদ্যমান )। = more_distance_need_to_travel_till_city_ = । { পূর্ণ, ক্ষমতা} ইউনিট জ্বালানি কিনুন । পূর্ণ = { পূর্ণ, ক্ষমতা} সেট ।i=0n1liCi>Clll=n1dllk=i+1ldk,k+1mindlimindli=l


আপনার উত্তর করার জন্য আপনাকে ধন্যবাদ! দুর্ভাগ্যক্রমে আমি নিজেকে যথেষ্ট পরিষ্কারভাবে নির্দিষ্ট করেছিলাম না। আপনি ধরে নিয়েছেন, এই গ্রাফটি আমার উদাহরণের মতো সহজ হবে তবে এটি কোনও গ্রাফ হতে পারে অর্থাৎ রাস্তা 0-> 2, 1-> 3 ইত্যাদিও হতে পারে
ওয়াজেসিচ কুলিক

হ্যাঁ, আপনি যেমনটি উল্লেখ করেননি যে আমি ধরে নেওয়ার আগে সমস্ত শহরগুলি একটি রৈখিক ফ্যাশনে সংযুক্ত রয়েছে (গ্রাফটি একটি সরল পথ)।
সায়ান বন্দ্যপাধ্যায়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.