WUT_Computer_Science/NotProgramming/MOM/implementacja_gold.mod

49 lines
2.0 KiB
Modula-2
Raw Permalink Normal View History

2024-01-15 18:46:40 +01:00
# 1. Zbiory
set Samochody;
set Ladowarki;
# 2. Parametery
# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l
2024-01-23 22:19:11 +01:00
param E{s in Samochody};
2024-01-15 18:46:40 +01:00
# Czas ladowania samochodu s na ladowarce l
param D{s in Samochody, l in Ladowarki};
# Czas odjazdu samochodu s
param O{s in Samochody};
2024-01-23 22:19:11 +01:00
# Zysk z realizacji kursu przez samochod s
2024-01-15 18:46:40 +01:00
param Z{s in Samochody};
# Zmienna decyzyjna
2024-01-23 22:19:11 +01:00
# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s
var u{s in Samochody}, >= 0, <= 24;
2024-01-15 18:46:40 +01:00
# zmienna binarna okreslajaca czy kurs zostanie wykonany
var y{s in Samochody}, binary;
2024-01-23 22:19:11 +01:00
# zmienna binarna okreslajaca czy samochod i jest ladowany po samochodzie j na ladowarce l
var v{i in Samochody, j in Samochody}, binary;
# zmienna binarna okreslajacy czy samochod s jest ladowany na ladowarce l
2024-01-15 18:46:40 +01:00
var k{s in Samochody, l in Ladowarki}, binary;
# Funkcja celu
maximize Q: sum {s in Samochody} y[s]*Z[s];
# Ograniczenia
subject to
2024-01-23 22:19:11 +01:00
# Samochod nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania.
Ogr_1{s in Samochody}:
u[s] >= E[s] * y[s];
# Samochod moze byc ladowany maksymalnie na jednej ladowarce
Ogr_2{s in Samochody}:
sum {l in Ladowarki} k[s, l] = y[s];
2024-01-15 18:46:40 +01:00
# Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania.
2024-01-23 22:19:11 +01:00
Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: i != j}:
u[i] + 24 * (1 - v[i, j]) >= (u[j] + D[j, l]) - 48 * (2 - k[j, l] - k[i, l]);
Ogr_4{i in Samochody, j in Samochody, l in Ladowarki: i != j}:
v[i, j] + v[j, i] >= k[i, l] + k[j, l] - 1;
# Samochod realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu
Ogr_5{s in Samochody}:
u[s] + sum {l in Ladowarki} (D[s, l] * k[s, l]) <= O[s] * y[s];
2024-01-15 18:46:40 +01:00
solve;
display Q;
2024-01-23 22:19:11 +01:00
display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s];
2024-01-15 18:46:40 +01:00
display {s in Samochody}: y[s];
2024-01-23 22:19:11 +01:00
display {i in Samochody, j in Samochody: v[i, j] > 0}: v[i, j];
display {s in Samochody, l in Ladowarki: k[s, l] > 0}: k[s, l];