在序言中进行简单的计划

时间:2018-12-13 14:54:40

标签: prolog

我正在尝试在Prolog中构建一个非常简单的计划程序。主要目标是根据每个人的限制分配一个人。 编辑:我要计算的唯一班次超过10个,并且有20多人所以,鉴于以下事实:

% shifts
shift(s1).
shift(s2).
shift(s3).
% ...

% person and shift preferences
m(linda, s1).
m(bruce, s1).
m(bruce, s2).
m(bruce, s3).
m(ariel, s2).
m(ariel, s3).

possible(L):-shift(S), m(M,S), L = [S,M].

allpossibleshifts(L):-findall(A,possible(A),DL), sort(DL, L).

输出:

L = [[s1, bruce], [s1, linda], [s2, ariel], [s2, bruce], [s3, ariel], [s3, bruce]]

如您所见,这将返回所有兼容的分配。我需要获得一个完整的解决方案,每个班次分配一个任务,尊重个人喜好。例如,这两个是所需输出的很好的例子:

L = [[t1, linda], [t2, bruce], [t3, ariel]]
L = [[t1, linda], [t2, ariel], [t3, bruce]]

0 个答案:

没有答案