Trong vấn đề trạm xăng chúng tôi được cho thành phố { 0 , ... , n - 1 } và đường giữa chúng. Mỗi con đường có chiều dài và mỗi thành phố xác định giá của nhiên liệu. Một đơn vị đường có giá một đơn vị nhiên liệu. Mục tiêu của chúng tôi là đi từ một nguồn đến đích theo cách rẻ nhất có thể. Xe tăng của chúng tôi bị giới hạn bởi một số giá trị.
Tôi cố gắng hiểu thuật toán , vì vậy tôi tự viết ra các bước để tính toán giải pháp. Thật không may, tôi đã bị mắc kẹt - tại một số điểm không có cạnh để xem xét, tôi không biết tại sao, có lẽ tôi đang thiếu một cái gì đó.
Ví dụ:
đường:
0 ----------- 1 ------------ 2 -------------- 3
(không phải đơn giản như vậy, nó có thể là bất kỳ biểu đồ nào, tức là có thể có các con đường trong khoảng 0-> 2, 0-> 3, 1-> 3, v.v.)
Nguồn: 0, Đích: 3, Xe tăng: 10 đơn vị
Giá nhiên liệu: 0 : 10 đơn vị, 1 : 10 đơn vị, 2 : 20 đơn vị, 3 : 12 đơn vị
Độ dài: 0-> 1 : 9 đơn vị, 1-> 2 : 1 đơn vị, 2-> 3 : 7 đơn vị
Giải pháp tối ưu: điền 9 đơn vị ở 0 và 8 đơn vị ở 1. Tổng chi phí sau đó là 170 đơn vị (9 * 10 + 8 * 10).
Vì vậy, tôi đã cố gắng tính toán nó như được hiển thị ở đây (đoạn 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?
Tái phát từ tài liệu dường như không hoạt động hoặc nhiều khả năng tôi đã làm gì đó sai.
Ai có thể giúp tôi với điều này?