Bonjour,
voilà j'ai un sujet en prolog qui trait de la programmation par contrainte mais je n'y arrive pas...
Voilà le sujet :
On dispose de 3 salles pour donner 11 conférences.
La conf 3 avant conf 11
Conf 5 avant 10
Conf 6 avant 11
Participant à 1 suivront aussi [2,3,4,7,8,10]
Participant à 2 suivront aussi [3,4,4,7,8,9,11]
Participant à 3 suivront aussi [5,6,8]
Participant à 4 suivront aussi [6,8,10]
Participant à 5 suivront aussi [7,9,11]
Participant à 6 suivront aussi [7,10]
Participant à 7 suivront aussi [8,9]
Participant à 8 suivront aussi [9,11]
Participant à 9 suivront aussi [10]
La conf 6 a lieu en même temps que la conf 2.
Voici les différentes questions avec ma réponse :
Définir prédicat différents (E soit différent de tous les éléments de L)
%OK
all_inf(L,E) tous les élément de L soient inférieur ou égaux à E.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 differents(_,[]). differents(X,[Y|Ys]) :- X #\= Y, differents(X,Ys).
%ok
On donne le prédicat distribution
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 all_inf([],_). all_inf([T| Q] , E) :- T #=< E, all_inf(Q,E).
%OK
je ne comprends pas ce qu'il fait...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 distribution(_,_,0). distribution(L,N,I):- I > 0, fd_atmost(N,L,I), %fd_atmost(N, ListeC, V) : au plus N variables de ListeC peuvent être égale à V I1 is I - 1, distribution(L,N,I1).
Il faut définir prédicat contraintes
et TOP1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 contraintes([C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11], NBSessions) :- fd_domain([C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11],1,11), fd_domain(NBSessions,1,11), %contraintes de précédences C3 #< C11, C5 #< C10, C6 #< C11, %Contrainte simultaneité %6 avec la 2 C6 #= C2, % Impossibilité differents(C1, [C2,C3,C5,C7,C8,C10]), differents(C2, [C3,C4,C7,C8,C9,C11]), differents(C3, [C5,C6,C8]), differents(C4, [C6,C8,C10]), differents(C5, [C7,C9,C11]), differents(C6, [C7,C10]), differents(C7, [C8,C9]), differents(C8, [C9,C11]), differents(C9, [C10]), % Contraintes sur les NBSessions all_inf([C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11] , NBSessions), distribution([C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11],11, 3), %Labeling fd_labelling([C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11]).
Mais mon prédicat contraintes ne fonctionne pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 top1([C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11], NBSessions) :- fd_minimize(contraintes([C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11], NBSessions),NBSessions), ! .
Pouvez vous m'aider merci par avance.
Partager