3

事実からスケジュールを作成しようとしています。事実は course_meetings(subject,type,group,description) の形式です。

ブルートフォースアプローチを使用することにしました

考えられるすべてのスケジュールを生成し、どれがすべての制約を通過するかを確認しますが、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/recttract を使用する必要はありません。たとえば、 library(clpfd)を参照してください。理解を深めるために、この例、「Simplistic Sc​​hool Time-Tabler」およびCLP Primerを参照してください。

于 2012-04-22T12:17:49.763 に答える
2

考えられるすべての順列を試すのは得策ではないようです。別の方法は、制約を clp(fd) の有限領域制約として表現し、制約ソルバーに「すべてを試す」よりも優れた戦略を試行させることです。

于 2012-04-22T12:15:07.873 に答える