mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-07-04 18:43:15 +02:00
122 lines
4.1 KiB
Modula-2
122 lines
4.1 KiB
Modula-2
# 1. Zbiory
|
|
set Samochody;
|
|
set Ladowarki;
|
|
|
|
# 2. Parametery
|
|
# Najwczesniejszy mozliwy czas rozpoczecia ladowania samochodu s na ladowarce l
|
|
param E{s in Samochody, l in Ladowarki};
|
|
# Czas ladowania samochodu s na ladowarce l
|
|
param D{s in Samochody, l in Ladowarki};
|
|
# Czas odjazdu samochodu s
|
|
param O{s in Samochody};
|
|
# Zysk z realizacji kursu przez samochód s
|
|
param Z{s in Samochody};
|
|
|
|
# Zmienna decyzyjna
|
|
# zmienna okreslajaca godzine rozpoczecia ladowania samochodu s
|
|
var u{s in Samochody}, >= 0, <= 24;
|
|
# zmienna binarna okreslajaca czy kurs zostanie wykonany
|
|
var y{s in Samochody}, binary;
|
|
# zmienna binarna okreslajaca czy samochód i jest ladowany po samochodzie j na ladowarce l
|
|
var v{i in Samochody, j in Samochody, l in Ladowarki}, binary;
|
|
# zmienna binarna okreslajaca czy samochód s jest ladowany jako pierwszy na ladowarce l
|
|
var p{s in Samochody, l in Ladowarki}, binary;
|
|
# zmienna binarna okreslajacy czy samochód s jest ladowany na ladowarce l
|
|
var k{s in Samochody, l in Ladowarki}, binary;
|
|
var z{i in Samochody, l in Ladowarki}, >= 0, <= 24;
|
|
var x{i in Samochody, j in Samochody, l in Ladowarki}, >= 0, <= 24;
|
|
var a{i in Samochody, l in Ladowarki}, >= 0, <= 24;
|
|
# a = (u[s, l] + D[s, l]) * k[s, l]
|
|
# Funkcja celu
|
|
maximize Q: sum {s in Samochody} y[s]*Z[s];
|
|
|
|
# Ograniczenia
|
|
subject to
|
|
# Samochód nie moze rozpoczac swojego ladownia przed najwczesniejszym mozliwym czasie ladowania.
|
|
Ogr_1{s in Samochody, l in Ladowarki}:
|
|
u[s,l] >= E[s, l];
|
|
# Samochód moze byc ladowany maksymalnie na jednej ladowarce
|
|
Ogr_2{s in Samochody}:
|
|
sum {l in Ladowarki} k[s, l] = y[s];
|
|
# Ladowanie danego samochodu na danej ladowarce moze rozpoczac sie tylko po zakonczeniu poprzedniego ladowania.
|
|
Ogr_3{i in Samochody, j in Samochody, l in Ladowarki: (i != j)}:
|
|
z[i,l] >= x[i, j, l];
|
|
# k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l])
|
|
Ogr_4{i in Samochody, l in Ladowarki}:
|
|
v[i, i, l] = 0;
|
|
# k[i, l] * u[i, l] >= [u[j, l] + D[j, l]) * v[i, j, l])
|
|
# Samochód realizujacy dostawe musi ukonczyc ladowanie przed godzina odjazdu
|
|
Ogr_5{s in Samochody}:
|
|
sum {l in Ladowarki} a[s, l] <= O[s];
|
|
# (u[s, l] + D[s, l]) * k[s, l] <= O[s];
|
|
Ogr_6{j in Samochody}:
|
|
sum {i in Samochody, l in Ladowarki} v[i, j, l] <= 1;
|
|
Ogr_7{i in Samochody}:
|
|
sum {j in Samochody, l in Ladowarki} v[i, j, l] <= 1;
|
|
# Samochód musi byc albo ladowany jako pierwszy albo byc któryms w kolejnosci ladowania albo nie byc w ogóle ladowanym.
|
|
Ogr_8{j in Samochody, l in Ladowarki}:
|
|
p[j, l] + sum {i in Samochody} v[i, j, l] = k[j, l];
|
|
# Samochód w danej kolejnosci, moze byc tylko raz na wszystkich ladowarkach
|
|
Ogr_9{l in Ladowarki}:
|
|
sum {s in Samochody} p[s, l] <= 1;
|
|
### Linearyzacja z
|
|
Ogr_z1{i in Samochody, l in Ladowarki}:
|
|
z[i,l] <= 24*k[i,l];
|
|
Ogr_z2{i in Samochody, l in Ladowarki}:
|
|
z[i,l] <= u[i,l];
|
|
Ogr_z3{i in Samochody, j in Samochody, l in Ladowarki}:
|
|
z[i,l] >= u[i,l]-24*(1-k[i,l]);
|
|
### Linearyzacja x
|
|
Ogr_x1{i in Samochody, j in Samochody, l in Ladowarki}:
|
|
x[i, j, l] <= 24*v[i, j, l];
|
|
Ogr_x2{i in Samochody, j in Samochody, l in Ladowarki}:
|
|
x[i, j, l] <= (u[j,l] + D[j, l]);
|
|
Ogr_x3{i in Samochody, j in Samochody, l in Ladowarki}:
|
|
x[i, j, l] >= (u[j,l] + D[j, l])-24*(1-v[i, j, l]);
|
|
### Linearyzacja a
|
|
Ogr_a1{s in Samochody, l in Ladowarki}:
|
|
a[s, l] <= 24*k[s, l];
|
|
Ogr_a2{s in Samochody, l in Ladowarki}:
|
|
a[s, l] <= (u[s, l] + D[s, l]);
|
|
Ogr_a3{s in Samochody, l in Ladowarki}:
|
|
a[s, l] >= (u[s, l] + D[s, l]) - 24*(1-k[s, l]);
|
|
|
|
solve;
|
|
display Q;
|
|
display {s in Samochody, l in Ladowarki: k[s, l] > 0}: u[s, l];
|
|
|
|
data;
|
|
|
|
set Samochody := s1, s2, s3, s4, s5;
|
|
|
|
set Ladowarki := l1, l2, l3;
|
|
|
|
param E :=
|
|
s1 l1 0 s1 l2 0 s1 l3 0
|
|
s2 l1 0 s2 l2 0 s2 l3 0
|
|
s3 l1 0 s3 l2 0 s3 l3 0
|
|
s4 l1 0 s4 l2 0 s4 l3 0
|
|
s5 l1 2 s5 l2 2 s5 l3 2;
|
|
|
|
param D :=
|
|
s1 l1 4 s1 l2 4 s1 l3 8
|
|
s2 l1 1 s2 l2 1 s2 l3 2
|
|
s3 l1 5 s3 l2 5 s3 l3 10
|
|
s4 l1 3 s4 l2 3 s4 l3 6
|
|
s5 l1 6 s5 l2 6 s5 l3 12;
|
|
|
|
param O :=
|
|
s1 8
|
|
s2 5
|
|
s3 6
|
|
s4 4
|
|
s5 9;
|
|
|
|
param Z :=
|
|
s1 100
|
|
s2 10
|
|
s3 200
|
|
s4 20
|
|
s5 330;
|
|
|
|
end; |