Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % jobshop2.ecl
- :- lib(fd).
- :- lib(edge_finder).
- precede(Op1, Op2) :-
- Op1 = [Date1, Duree1],
- Op2 = [Date2, _],
- Date2 #>= Date1 + Duree1.
- main(Operations, Makespan) :-
- % Chaque élément : [Duree, Date]
- % M1 M2 M3
- Operations = []( []( [5, _], [2, _], [0, _] ), % Job 1
- []( [3, _], [4, _], [5, _] ), % Job 2
- []( [2, _], [6, _], [3, _] ) % Job 3
- ),
- % Domaine des dates
- H is 12,
- (for(Job, 1, 3), param(Operations, H) do
- (for(Machine, 1, 3), param(Job, Operations, H) do
- Op is Operations[Job, Machine],
- Op = [_, Date],
- Date :: 1..H
- )
- ),
- Makespan :: 1..H,
- % Contraintes de précédence
- (for(Job, 1, 3), param(Operations, H) do
- Op1 is Operations[Job, 1],
- Op2 is Operations[Job, 2],
- Op3 is Operations[Job, 3],
- precede(Op1, Op2),
- precede(Op2, Op3),
- Op3 = [Date3, Duree3],
- Makespan #>= Date3 + Duree3
- ),
- % Contraintes de disjonction
- % ?
- % Résolution
- mindomain(Makespan, MakespanMin), % Signification : FinMin est le minimum des valeurs possibles pour Fin
- Makespan = MakespanMin. % On fait correspondre la date de fin à sa valeur minimale
- % => recherche de la date de fin minimale
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement