Dans le problème des stations-service, on nous donne villes et des routes entre elles. Chaque route a une longueur et chaque ville définit le prix du carburant. Une unité de route coûte une unité de carburant. Notre objectif est de passer d'une source à une destination de la manière la moins chère possible. Notre réservoir est limité par une certaine valeur.{ 0 , … , n - 1 }
J'essaie de comprendre l'algorithme , j'ai donc noté manuellement les étapes pour calculer la solution. Malheureusement, je suis resté coincé - à un moment donné, il n'y a pas d'arête à considérer, je ne sais pas pourquoi, peut-être que je manque quelque chose.
Exemple:
route:
0 ----------- 1 ------------ 2 -------------- 3
(il ne doit être aussi simple que cela, il peut s'agir de n'importe quel graphique, c'est-à-dire qu'il peut y avoir des routes entre 0-> 2, 0-> 3, 1-> 3, etc.)
Source: 0, Destination: 3, Réservoir: 10 unités
Prix du carburant: 0 : 10 unités, 1 : 10 unités, 2 : 20 unités, 3 : 12 unités
Longueurs: 0-> 1 : 9 unités, 1-> 2 : 1 unité, 2-> 3 : 7 unités
Solution optimale: remplissez 9 unités à 0 et 8 unités à 1. Le coût total est alors de 170 unités (9 * 10 + 8 * 10).
J'ai donc essayé de le calculer comme indiqué ici (paragraphe 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 récurrence du document ne semble pas fonctionner ou, plus probablement, je fais quelque chose de mal.
Quelqu'un pourrait-il m'aider avec ça?