에서 주유소 문제를 우리는 주어진 도시 과 그들 사이의 도로. 각 도로는 길이가 있으며 각 도시는 연료 가격을 정의합니다. 도로 1 개는 연료 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 단위
최적 솔루션 : 1에서 0 및 8 단위로 9 단위를 채 웁니다. 총 비용은 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?
문서의 되풀이가 작동하지 않거나 내가 잘못한 것 같습니다.
아무도 나를 도울 수 있습니까?