3

我正在尝试根据事实制定时间表,事实以 course_meetings(主题,类型,组,描述)的形式,

我决定使用蛮力方法

我将生成所有可能的时间表,看看哪一个会通过所有约束,但是我生成的事实是 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

4

2 回答 2

4

Prolog 中设计了有限域上的约束来完全满足这种需求。无需为此使用 assert/rectract。参见例如library(clpfd)。为了让你熟悉,你可以看看这个例子,一个“简单的学校时间表”CLP 入门

于 2012-04-22T12:17:49.763 回答
2

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

于 2012-04-22T12:15:07.873 回答