Nel problema del distributore di benzina ci vengono date città e strade tra di loro. Ogni strada ha lunghezza e ogni città definisce il prezzo del carburante. Un'unità di strada costa un'unità di carburante. Il nostro obiettivo è di passare da una fonte a una destinazione nel modo più economico possibile. Il nostro serbatoio è limitato da un certo valore.{ 0 , … , n - 1 }
Cerco di capire l'algoritmo , quindi ho scritto manualmente i passaggi per calcolare la soluzione. Purtroppo mi sono bloccato - a un certo punto non ci sono spigoli da considerare, non so perché, forse mi manca qualcosa.
Esempio:
strada:
0 ----------- 1 ------------ 2 -------------- 3
(non funziona deve essere così semplice, potrebbe essere qualsiasi grafico, cioè potrebbero esserci strade tra 0-> 2, 0-> 3, 1-> 3 ecc.)
Fonte: 0, Destinazione: 3, Serbatoio: 10 unità
Prezzi del carburante: 0 : 10 unità, 1 : 10 unità, 2 : 20 unità, 3 : 12 unità
Lunghezze: 0-> 1 : 9 unità, 1-> 2 : 1 unità, 2-> 3 : 7 unità
Soluzione ottimale: riempire 9 unità a 0 e 8 unità a 1. Il costo totale è quindi di 170 unità (9 * 10 + 8 * 10).
Quindi ho provato a calcolarlo come mostrato qui (paragrafo 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?
La ricorrenza dal documento non sembra funzionare o, cosa più probabile, faccio qualcosa di sbagliato.
Qualcuno potrebbe aiutarmi con questo?