Gelen benzin istasyonu sorunu biz verilmiştir şehirler aralarında ve yollar. Her yolun uzunluğu vardır ve her şehir yakıtın fiyatını tanımlar. Bir birim yolun maliyeti bir birim yakıttır. Hedefimiz bir kaynaktan hedefe mümkün olan en ucuz şekilde gitmek. Tankımız bir değerle sınırlıdır.
Algoritmayı anlamaya çalışıyorum , bu yüzden çözümü hesaplamak için adımları manuel olarak yazdım. Ne yazık ki takılıp kaldım - bir noktada dikkate alınması gereken kenarlar yok, nedenini bilmiyorum, belki bir şeyleri kaçırıyorum.
Örnek:
yol:
0 ----------- 1 ------------ 2 -------------- 3
(değil bu kadar basit olmalı, herhangi bir grafik olabilir, yani 0-> 2, 0-> 3, 1-> 3 vb. arasında yollar olabilir.)
Kaynak: 0, Hedef: 3, Tank: 10 adet
Yakıt fiyatları: 0 : 10 adet, 1 : 10 adet, 2 : 20 adet, 3 : 12 adet
Uzunluk: 0-> 1 : 9 adet, 1-> 2 : 1 birim, 2-> 3 : 7 birim
Optimal çözüm: 0'da 9 birimi ve 1'de 8 birimi doldurun. Toplam maliyet 170 birimdir (9 * 10 + 8 * 10).
Bu yüzden burada gösterildiği gibi hesaplamaya çalıştım (paragraf 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?
Belgeden tekrarlanma işe yaramıyor ya da yanlış bir şey yapmam daha olası.
Biri bana bu konuda yardımcı olabilir mi?