私は現在プロローグを学んでおり、主要な制約をモデル化するためにクリンゴを使用しようとしていますが、いくつかの問題に遭遇しました。誰かが私に手を差し伸べてくれることを願っています. ここに私の問題があります:
- キー制約を構築し、clingo で次のようなものを書きたい
:-stu(X,Y1,Y2),stu(X,Z1,Z2),not(Y1=Z1,Y2=Z2).
整合性制約として使用されますが、構文エラーが発生します。私はそれを置く別の方法を試してみましたが、うまくいくようでした。
Y1=Z1:-stu(X,Y1,Y2),stu(X,Z1,Z2).
Y2=Z2:-stu(X,Y1,Y2),stu(X,Z1,Z2).
しかし、プログラムをより簡潔にするために、分離された制約を 1 つの主要な制約にまとめることができるのでしょうか?
- 別の問題は、クリンゴで「何かが存在する」という事実を構築する方法に関するものです。私が達成したいのは、クリンゴを使用して、与えられた2つのルールセットが満足できるかどうかを判断することです。ここに例があります。
ルールの最初のセットは、「ID が 1 で名前が mike の生徒が存在する」ことを示しています。
「同じIDを持つ2人の学生は、同じ名前と年齢を持つ必要があります」(これは重要な制約です):
そこで、Clingo で最初のルール セットを次のように記述します。
stu(1,"mike",v).
:-stu(X,Y1,Y2),stu(X,Z1,Z2),(Y1,Y2)!=(Z1,Z2).
「ID が 1 で年齢が 27 の学生が存在する」という 2 番目のルール セットが与えられているとします。
2 番目のルール セットは Clingo で次のように記述されます。
stu(1,v,27).
私の問題は、単純にこれら 2 つのルール セットをプログラムに入れると、Clingo はそれらが充足可能な原因 ("mike",v) != (v, 27) ではないと判断することです。したがって、ID = 1、名前 = "mike"、年齢 = 27 の生徒がいる場合、2 つのセットのルールは実際には満足できるため、私の解決策 (おそらく存在を構築する方法) には何か問題があるに違いありません。上記のように、Clingo を使用して 2 セットのルールの充足可能性を判断する方法があれば、ありがとう!