問題タブ [sicstus-prolog]
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 - タスク スケジュール 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リソースの制限は、回避できない多くの問題の最初のものであるため、もちろん機能しません...
cygwin - Windows7 64bit マシンの Sicstus Prolog 4.2 で「save_program/1」が壊れていますか?
Windows7 64bit インストールで Cygwin プロンプトから sicstus を起動し、prolog プログラムを作成しました。次に、現在のフォルダーにファイル「test.sav」を作成する次のコマンドを使用して保存しました。
このファイルを実行しようとすると、不可解なエラー メッセージが表示されます。
ファイルの先頭を見ると、次のようになります。
また、別の方法でファイルをロードしようとしました:
なぜこれが機能しないのか、誰かが私に説明してもらえますか? ここで何か間違ったことをしていますか?ありがとう!
編集: Per の提案に従って、ファイル名を test.sav から test.bat に変更しました。これが起こります:
prolog - 可変ドメインを非連続範囲に定義する方法
私は SICStus Prolog から始めています。たとえばStartingTimes
、変数を定義して、リストで定義されたドメインを持たせたいと考えています。[1, 5, 10]
SICStus Prolog でそれを行うにはどうすればよいですか?
私は次のようなことをします:
しかし、それは恐ろしいことです。それを行う簡単な方法があるはずです。たぶんfd_sets
?
注:マニュアルでそれがどのように行われるかを調べようとしましたが、プロローグは一般的な言葉を使用しており、そのためにグーグルを使用するのは本当に難しいです.
debugging - clpfd プログラムをデバッグするには?
SICStus Prolog (clpfd) にプログラムがあり、実行中に何が起こっているのかを知りたいlabeling
です。試してみtrace
ましたが、冗長すぎて実際に何が起こっているのかを理解するのが難しくなっています (どの値がどの変数に割り当てられているか、制約がどのように伝播されているかなど)。
私のプログラムの短縮版:
ヒントをありがとう!
注:「ドメイン地獄」も削除したいのですが、Prolog を理解する限り、1 つの変数 (たとえば Domain_01) を使用することはできません。
prolog - 変数のドメインを clpfd の名前の列挙として設定することは可能ですか?
この方法で変数のドメインを指定できます。
また
しかし、次のように指定したい変数があります:
それは可能ですか?もちろん、名前を整数にエンコードすることは可能ですが、本当に必要なのでしょうか?
prolog - 次のプログラムを短くするには?
以下のプログラムを短くしたいと思います。だけでなく、数十の変数があることをイメージするだけX
ですY
。問題は、各変数のドメインを個別に定義する必要があることです。プログラムが長くなり、透明性が低下するため、好きではありません。
入力:
結果:
最初は、次のように書くだけで解決できると思いました。
しかし、Dom1 が 1 つの値で統一されているため (これは clpfd で何が起こるかを表す適切な用語ですか?)、結果は次のようになるため、機能しません。
ありがとう!
prolog - CLPFDの変数に値を割り当てる方法は?
マニュアルには、バックトラッキングを介して昇順で変数 (X と呼びましょう) に値を割り当てる述語がありindomain/1
ます。
カスタムのラベル付け述語を作成しようとしているときに、変数 X に割り当てられる値の順序を変更したいと考えています。私はこのコードを思いつきました:
しかし、それが正しいかどうかはよくわかりません。また、それが適切な方法であるかどうかもわかりません。
module - SICStus Prolog のモジュールからのすべての関係を一覧表示する
SICStus Prolog インタープリターでロードされたモジュールで定義されたすべての関係のリストを取得する方法はありますか?
prolog - CLPFD で次のシナリオの変数を定義する方法は?
一連の変数がT_1, T_2, ..., T_N
あり、CLPFD で次の疑似コードを書き直したいと思います。
どうやってやるの?
私はcountを使用します:
しかし、より経験豊富なプログラマーはこのように記述しないと思います。