我试图根据事实制定时间表,事实是以课程形式(主题,类型,群组,描述),
我决定使用蛮力方法
我将生成所有可能的计划,并查看哪一个将通过所有约束, 但是我生成的事实是2.6,我该如何优化它,并且有更好的方法。 对于前 course_meetings(主题,类型,组,教练,说明)。 解决: -
findall([A,B,C,D,E],course_meetings(A,B,C,D,E),L),
permutation(L,L1),
%and apply constrains on it.
我有32个这种格式的事实和排列它的32!〜= 2.6 * 10 ^ 32
答案 0 :(得分:4)
Prolog设计了对有限域的约束,以满足这种需求。不需要使用assert / rectract。参见例如library(clpfd)。为了让您熟悉,您可以查看this example, a "Simplistic School Time-Tabler"和CLP Primer
答案 1 :(得分:2)
尝试所有可能的排列似乎并不是一个好主意。另一种方法可能是将您的约束表达为clp(fd)的有限域约束,并让约束求解器尝试比“尝试一切”更好的策略。