ガスステーションの問題我々が与えられているの都市とそれらの間の道路。各道路には長さがあり、各都市には燃料の価格が定義されています。道路の1つの単位は燃料の1つの単位を要します。私たちの目標は、できるだけ安価な方法でソースから目的地に行くことです。私たちのタンクはいくつかの値によって制限されています。{ 0 、… 、n − 1 }
アルゴリズムを理解しようとするので、解決策を計算するための手順を手動で書き留めました。残念ながら私は行き詰まりました-ある時点で考慮すべきエッジがありません、理由がわかりません、おそらく何かが足りないのです。
例:
道路:
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ユニット
最適解: 0で9ユニット、1で8ユニットを入力します。合計コストは170ユニット(9 * 10 + 8 * 10)になります。
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?
ドキュメントからの繰り返しが機能しないようであるか、何かが間違っている可能性が高いです。
誰かがこれを手伝ってくれませんか?