問題タブ [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.
list - プロローグは fd_all_different と is_set をリストします。
私はあなたの誰かがより速いものを知っているかどうか知りたいだけです.
また
誰か知ってる?数独ソルバーのより高速なソリューションが必要です。ありがとう!
recursion - プロローグ再帰オーバーフロー
(サイトではなく)スタックオーバーフローにつながります!カット(!)のせいではないはずです。SWI-Prolog で動作しますか?
lambda - プロローグ:反復
こんばんは、私は単純な問題を抱えています、そして私はプロローグで非常に新しいことをあなたに警告します。同じサイズの3つのリストがあり、それぞれに1、0、または-1のみが含まれているとします。3つのリストのi番目の要素のすべてのiについて、1つだけが非ゼロであることを確認したいと思います。
このコードは、固定されたiに対してそれを行います。
「すべてのIについて、compat1(V1、V2、V3、I)」とはどうすればわかりますか?私は定義しようとしました
興味のあるK=maximum valueで呼び出すことができるようにします。しかし、compat2は機能しません。「;」の後にtrueを返します。無期限に実行されます。
ありがとう!
prolog - CLPFD から最小化できない
私と友人は、CLP 問題を解決するプログラムを書いています。解決策を最適化するために最小化を使用したいのですが、sum(P,#=,S) から取得した数値が 2 つの数値の間 (たとえば 5..7) であると言い続けるため、うまくいきません。ここから数値を抽出したり、何らかの方法で操作したりする良い方法を見つけることができなかったため、あなたの助けを求めています.
この問題は、リストの各要素が 0 から 1 の間でなければならないという gen_var メソッドから発生しているようです。そのため、適切に設定されずに「0..1」として出力される数値があります。
「5..7」のような数値を取得しても最小化を使用する方法や、その数値を操作して 5 のみを取得する方法はありますか? S (リスト内の要素の合計) は、最小化しようとしているものです。
prolog - Prolog でのブール代入
全て。
ブール値を変数に代入したい。
のようなものを試しました。
何も動作しません...
解決策はありますか?
prolog - Prologの特定の間隔からすべての番号を取得する
私はPrologの世界に不慣れで、特定の範囲のすべての要素を返すルールを書きたいと思います。
私は次のようなことをするつもりです
元:
そして、foo(X、2、5)と入力すると、3を返し、次に4を返すはずです。
私のアプローチは間違っているようですが、どちらが正しい方法か知りたいです。
prolog - PROLOG-正しい配置をチェックしています
数字が1〜8の3 * 3グリッドで、移動できる空白のスポット(0)があるパズルがあります。これがパズルの最終状態です。
この「状態」全体は、水平方向に読み取ることにより、state(1,2,3,8,0,4,7,6,5)で表されます。どのピースが適切な場所にあるかを確認する機能が必要です。
私は持っています:
これで、Zは正しい場所にあるピースの数になります。
Zの出力を与える簡単な方法はありますか?どんな助けでもいただければ幸いです。ありがとう。
prolog - `is/2` で十分にインスタンス化された引数がありません
私の「宣言型言語」クラスでは、タングラム パズルを解くプロローグ プログラムを作成する必要があります。パズルは、パズルのポイントの座標のリストによって識別されます。たとえば、puzzle(7,[(0,0),(8,0),(4,4)])
は識別子 7 のパズルで、三角形を表します。
これを解決する私の(素朴な)方法は次のとおりです。実行は を呼び出すことから始まりtangram(Puzzle, Puts)
ます。プログラムは、パズルのすべての可能なピースから始まります。次に、ピースを選び、位置と回転を試して、パズルの有効な位置が得られたら、パズルを配置します。(= プログラムの最後に返される Puts リストにブロックを配置します。) これらすべての可能性をバックトラックします。コードは次のとおりです。
考えられるパズル:
これを実行したときの問題は、次のエラーが発生することです。
トレースすると、Translate の TX 値と TY 値がインスタンス化されていないように見えます。さかのぼってみると、どういうわけか X と Y が placePieces 述語でインスタンス化されていないと思います。値が残っていない場合、述語は失敗するだけですよね?
コードを 5 時間以上調べていますが、間違いを見つけることができないようです。うまくいけば、あなたの1人がこれを見直して、私を正しい方向に戻す時間があることを願っています.
前もって感謝します!
prolog - Prolog を使用した制約論理プログラミングでの経路探索の最適化
超高層ビルとフェンスのパズルを解くための小さなプロローグ アプリケーションに取り組んでいます。
未解決のパズル:
解かれたパズル:
すでに解決済みのパズルをプログラムに渡すと、それを検証するのはほとんど瞬時に行われます。プログラムに非常に小さなパズル (たとえば、2x2、もちろん変更されたルール) を渡すと、解決策を見つけるのも非常に高速です。
問題は、「ネイティブ」サイズの 6x6 のパズルを計算することです。中止する前に、5時間ほど実行したままにしました。時間がかかりすぎます。
最も時間がかかるのは「高層ビル」ではなく「フェンス」であることがわかりました。"skyscrapers" を個別に実行すると、高速なソリューションが得られます。
フェンスのアルゴリズムは次のとおりです。
- 頂点は数字で表され、0 はパスがその特定の頂点を通過しないことを意味し、> 1 はパス内のその頂点の順序を表します。
- 各セルが適切な量の線で囲まれるように制約します。
- つまり、2 つの頂点が連番を持つ場合、それらが接続されていることを意味します。たとえば、1 -> 2、2 -> 1、1 ->
Max
、Max
-> 1 (Max
は、パス内の最後の頂点の番号です。 を介して計算されますmaximum/2
) 。
- つまり、2 つの頂点が連番を持つ場合、それらが接続されていることを意味します。たとえば、1 -> 2、2 -> 1、1 ->
- ゼロ以外の各頂点に、連番を持つ隣接する頂点が少なくとも 2 つあることを確認します。
- (はエッジに沿った頂点の数で、で計算されます)
Max
と等しくなるように制約します。(BoardWidth + 1)^2 - NumberOfZeros
BoardWidth+1
NumberOfZeros
count/4
nvalue(Vertices, Max + 1)
の個別の値の数Vertices
がMax
(つまり、パス内の頂点の数) プラス1
(ゼロ値)であることを確認するために使用します。- a を含む最初のセルを見つけて、
3
効率を高めるためにパスを強制的にそこから開始および終了させます。
効率を上げるにはどうすればよいですか?参照用にコードを以下に示します。
skyscrapersinfences.pro
utils.pro
s1.pro