Advertisement
Guest User

Untitled

a guest
Jul 17th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.21 KB | None | 0 0
  1. % jobshop2.ecl
  2.  
  3. :- lib(fd).
  4. :- lib(edge_finder).
  5.  
  6. precede(Op1, Op2) :-
  7.     Op1 = [Date1, Duree1],
  8.     Op2 = [Date2, _],
  9.     Date2 #>= Date1 + Duree1.
  10.  
  11. main(Operations, Makespan) :-
  12.     % Chaque élément : [Duree, Date]
  13.     %                  M1      M2      M3
  14.     Operations = []( []( [5, _], [2, _], [0, _] ),  % Job 1
  15.                      []( [3, _], [4, _], [5, _] ),  % Job 2
  16.                      []( [2, _], [6, _], [3, _] )   % Job 3
  17.                  ),
  18.  
  19.     % Domaine des dates
  20.     H is 12,
  21.     (for(Job, 1, 3), param(Operations, H) do
  22.         (for(Machine, 1, 3), param(Job, Operations, H) do
  23.             Op is Operations[Job, Machine],
  24.             Op = [_, Date],
  25.             Date :: 1..H
  26.         )
  27.     ),
  28.     Makespan :: 1..H,
  29.  
  30.     % Contraintes de précédence
  31.     (for(Job, 1, 3), param(Operations, H) do
  32.         Op1 is Operations[Job, 1],
  33.         Op2 is Operations[Job, 2],
  34.         Op3 is Operations[Job, 3],
  35.         precede(Op1, Op2),
  36.         precede(Op2, Op3),
  37.        
  38.         Op3 = [Date3, Duree3],
  39.         Makespan #>= Date3 + Duree3
  40.     ),
  41.    
  42.     % Contraintes de disjonction
  43.     % ?
  44.    
  45.     % Résolution
  46.     mindomain(Makespan, MakespanMin),   % Signification : FinMin est le minimum des valeurs possibles pour Fin
  47.     Makespan = MakespanMin.     % On fait correspondre la date de fin à sa valeur minimale
  48.                                 % => recherche de la date de fin minimale
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement