Mega Run时间问题(蛮力方法),Prolog

时间:2012-04-22 11:40:39

标签: prolog clpfd

我试图根据事实制定时间表,事实是以课程形式(主题,类型,群组,描述),

我决定使用蛮力方法

我将生成所有可能的计划,并查看哪一个将通过所有约束, 但是我生成的事实是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

2 个答案:

答案 0 :(得分:4)

Prolog设计了对有限域的约束,以满足这种需求。不需要使用assert / rectract。参见例如library(clpfd)。为了让您熟悉,您可以查看this example, a "Simplistic School Time-Tabler"CLP Primer

答案 1 :(得分:2)

尝试所有可能的排列似乎并不是一个好主意。另一种方法可能是将您的约束表达为clp(fd)的有限域约束,并让约束求解器尝试比“尝试一切”更好的策略。