2012-04-22 7 views
3

私は事実のうち、スケジュールを作成しようとしている、事実は メガファイル名を指定して実行時の問題(ブルートフォースアプローチ)、プロローグ

は、私が使用することを決め、course_meetings(件名、タイプ、グループ、記述)の形態であり、 brute-forceのアプローチ

私は可能なすべてのスケジュールを生成し、どちらがすべての制約を通過するかを見てみましょう。 しかし、私は2.6を生成しています。どのように最適化できますか?例: course_meetings(科目、タイプ、グループ、インストラクター、説明) 解決: - !私はこのフォーマットの32個の事実を持っている

findall([A,B,C,D,E],course_meetings(A,B,C,D,E),L), 
permutation(L,L1), 
%and apply constrains on it. 

と順列のためにその32〜= 2.6 * 10^32

+0

があります。アサート/リトラクトと呼ばれるものが出てきました。 –

+0

あなたの仕様の例を見せてください。あなたが守らなければならない制約は何ですか?また、これが宿題やテストの場合は、そう言い、それに応じてあなたの投稿にタグを付けてください。 –

答えて

4

Prologでは、この必要性に完全に適合するように、有限領域に対する制約が設計されています。そのためにassert/rectractを使う必要はありません。例えば、 library(clpfd)。あなたに知ってもらうには、this example, a "Simplistic School Time-Tabler"と、CLP Primer

+0

私はそれを試してみましょう、あなたは現在、タイムテーブルを見ています –

2

すべての可能な順列をしようとすると、良いアイデアではないようです。代わりに、あなたの制約をclp(fd)の有限領域制約として表現し、制約ソルバが "すべてを試してみよう"より良い戦略を試すことができます。

関連する問題