問題タブ [clpfd]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
prolog - SWIプロローグは終了しません
結果?- is_fakt(X)
の回答のリストを返すのに、いくつかの結果の回答の後にハングするのはなぜですか。PrologがXのすべての可能な値を返すことができない理由がわかりません。
prolog - 述語解決への順序の取得
次の目標を見てください (Markus Triska の clpfd で swi-prolog を使用しています)。
可能なクエリは次のようになります。
注文または何らかの解決策の優先順位を追加したいと考えています。「辞退」が に対する有効な応答でInput=15
ある場合、2 番目の目標はもはや考慮されるべきではないため、それB=decline
は解決策であり、 ではありませんB=offer
。
を追加できることはわかっています!/0
が、その逆は機能しません。この述語に対して考えられるすべての答えを教えてください。
この例を考えると、 aResult=offer
は に対してのみ真であるべきInput 0..10
です。
述語内の順序を考慮しようとするとき、私はあまりにも命令的であると考えていますか?
prolog - アインシュタインのなぞなぞを制約満足の方法でモデル化する方法(Prolog)
私のIAの任務は、アインシュタイン問題を解決することです。
PrologのCSPモデルを使用して解決する必要があります。モデルは与えられていませんが、問題といくつかの入力データだけが与えられています。私の解決策は一般的なものでなければなりません。つまり、一部の入力データについては、解決策を提供する必要があります。問題の次元はNです。たとえば、Nは5(5つの家があります)の場合がありますが、変動する可能性があります。
インターネットで見つけた多くのソリューションは、制約をコードに直接配置しますが、入力データを使用して制約を生成する必要があります。この問題は、MAC(Maintain Arc-Consistency)アルゴリズムを使用して解決する必要があります。
私はそれについてたくさん読んだ(アインシュタインのなぞなぞ)。問題を実装するには、問題の表現が必要です。
問題は、Prologで問題を表現する方法が正確にわからないことです(基本的なPrologを知っている、追加のライブラリを使用していない、clpfdライブラリ(prolog clpソルバー)を使用することは許可されていません)。
入力(14の手がかり)から制約を作成する必要があることはわかっています+同じグループ(国籍など)のすべての変数が異なる必要があるという制約は、次のように述語を実装できます。
例えば:
今、私はこの入力を解析し、リストのリストを取得することができました:
今、私はこの生成された情報を使用していくつかの制約を構築する必要があると思います、私が読んだことから、バイナリ制約(私が思う述語として表される)を使用するのは良い考えですが、私はいくつかの単項制約も持っているので、どうすればよいですか?それらすべてを含めるための制約を表しますか?
もう1つの問題は、リストを検索して変更する必要がないように、変数(計算データがある場所)をどのように表現するかです(プロローグでは、命令型言語のようにリストを変更できないため)。
そこで、変数のリストを使用することを考えました。各変数/要素は3タプルで表されます:( var, domain, attrV
)、varには変数の現在の値が含まれ、ドメインは次のようなリストです:[1、2、3、4、 ..、N]であり、attrVは、対応する属性(たとえば赤)の(Nの)1つの値です。1つの要素は次のようになります(C, [1, 2, 3, 4, 5], red)
。
その他の問題:タプルのキューがあり、制約が満たされない場合はこのキューが変更されるため、プロローグ(AC-3アルゴリズムを使用)にMACアルゴリズムを実装するにはどうすればよいですか?これは変数リストを変更することを意味します、そして再び、Prologのリストをどのように変更すればよいですか。
どんな助けでもいただければ幸いです!
上記のリンクからCSPソルバーを使用して問題の特定のバージョンを解決しようとしましたが、それでも解決策を見つけることができません。この方法で解決策を知ることができるので、解決策を取得したいと思います。一般バージョンの制約を正しく表します。
追加されたコード:
prolog - Prolog制約処理:パッキングスクエア
私はプロローグの制約処理の問題を解決しようとしています。
5x5、4x4、3x3、2x2の4つの正方形を10x10のグリッドに詰める必要があります。それらは重複してはいけません。
私の変数は次のようになります。
Xは5、4、3または2のいずれかです。インデックスiは行を表し、ドメインはグリッド内の列を表します。
私の最初の制約は、正方形の幅と高さを定義しようとします。私はそれをそのように定式化します:
そのため、可能なポイントは、互いにX行と列の範囲内に収まるように制限されます。ただし、Prologはこれらの制約で停止し、次の結果をもたらします。
したがって、他の正方形をチェックすることさえせずに、そこで停止します。私の制約はおそらくきつすぎるでしょうが、その理由や方法がわかりません。助言がありますか?
prolog - 論理プログラムで代数ができるかどうか興味があります
Prolog と Logic Programming に関する短い記事を読みました。論理プログラムで代数ができるかどうか興味があります。式 5+X = 7 で X の変数が何であるかを尋ねて、-2 の答えを得ることができますか?
prolog - タスク スケジュール sicstus プロローグ
私は最近 sicstus プロローグを開始しましたが、この宿題を CLP (制約論理プログラミング) で解決する必要があります。問題、何を探すべきか、何を間違っているかを理解するのを手伝ってください。そう、
建築会社:
- 原材料を入手するために、BC は 25 トンの原材料を輸送するのに 6 日かかるトラックをレンタルする必要があり、1 日あたり 80 ドルの費用がかかります。
- 地上に建設するには 15 トンの原材料が必要で、10 日かかり、1 階あたり 150 ドルの費用がかかります。
- 地下に建設するには20Tの原材料が必要で、23日かかり(掘削のため)、150ドルの費用がかかり、少なくとも1台の掘削機が必要です。これにより、1日あたり75ドルが追加され、掘削時間が3日短縮されます時間)。(1->20日、2->17日)
- クレーンをレンタルすると、すべての建設時間が 25% 短縮され、1 日あたり 120 ドルの費用がかかります。
- 電気チームは、建物の 75% が建設された場合にのみ前進できます。5 日かかり、1 フロアあたり 200 ドルの費用がかかります。建物が完成すると、すべてのフロアの接続が完了するまでにさらに 1 週間かかります。
BC は地上 150 階、地下 15 階の超高層ビルを建設するふりをしていますが、利益を最大化し、所要時間を最小化するには、建物をどのように編成する必要がありますか?
問題を制約充足問題として定義し、CLP で解決して、さまざまなパラメーター (フロアの増減、またはチームの身体位置の調整) を使用して解決できるようにします。
そして、私がこれまでに持っているもの:
5つのリソースを必要とするタスクで累積を使用できず、0リソースの制限は、回避できない多くの問題の最初のものであるため、もちろん機能しません...
prolog - CLPFDを使用したCuFrogの解決
さて、私はCuFrogと呼ばれるこのパズルを持っています。これは、3x3x3の立方体に各位置に数字を入力しますが、一方から他方に移動するときに位置を飛び越えます。たとえば、平らな立方体を考えると、サイド1の(1,1)の右側の有効な位置は、サイド1の(3,1)になります。
だから私はこれを行うためにPrologの制約を使用していて、各変数のドメイン(1から54)を与えました、それらはすべて異なっている必要があり、各位置について、セット内の位置の1つであると言いましたright-left-down-upは、そのような位置の現在の値+1でなければなりません。
また、パズルへのエントリポイントを指定しました。つまり、1番をすでに最初の位置に配置しました。
つまり、変数にラベルを付けているときに、SICStusは私に答えを見つけていません。:(どこかで制限がないか、何か間違ったことをしているようです。誰か助けてもらえますか?
ありがとう。
prolog - Prolog で暗号算術パズルを解く方法
暗号算術パズルを解くための Prolog プログラムを作成する必要があります。
変数 [A, M, P, D, Y] を 0 から 9 の値に割り当てて、方程式 AM+PM を満たす関数 solve([A, M, P, D, Y]) を作成する必要があります。 =日。各変数には異なる値が割り当てられ、A、P、および D は 0 に等しくなりません。
この関数を書き始めましたが、プログラムの実行中に問題が発生しました。A、P、D がゼロにならないという制限を設定しました。アルゴリズムを調べているうちに、D は 1 でなければならないことに気がついたので、プログラムの最初にそれを定義しました。M に対して 2 つの異なる変数 (M1 と M2) を定義し、それらを互いに等しく設定しました。これは、パズル内の異なる M が同じ値に割り当てられる必要があるためです。さまざまな変数に場所を割り当て、パズルに基づいてそれらを合計しました。キャリーイン変数で運ばれる変数を考慮しました。プログラムはコンパイルされますが、関数が実行されません。
私は何を間違っていますか?変数の定義に何か問題がありますか? 2 つの異なる M 変数を定義する必要がありますか、それとも 1 つで十分ですか?
prolog - Prolog-ラテン方格ソリューション
サイズNのラテン方格を見つけるためにPrologでプログラムを書こうとしています。
私は今これを持っています:
prolog - リスト不等式制約
2 つのリストの不等式を制約する制約を構築する Prolog (CLP) 述語を作成しようとしています。
より正式には、2 つのリストを持つA=[A1,...,AN], B=[B1,...,BN]
制約は として定義され(A1 #\= B1) #\/ (A2 #\= B2) #\/ ... #\/ (AN #\= BN)
ます。
任意の長さの 2 つのリストを指定して、この制約を作成する方法がわかりません。これが私の試みです。うまくいかない理由はわかりますが、修正できません。