問題タブ [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 - 段取り時間を累積で表現する
スケジューリング問題には多くのファミリーがあります。あるファミリから別のファミリへの移行にマシンの再構成 (セットアップ時間) が必要なジョブ/タスクのファミリがある問題を調査しています。
この問題を解決するために使用cumulatives[2/3]
していますが、セットアップ時間をどのように表現できるかわかりません。
この小さな例では、3 つの異なるファミリーに属する 10 個のタスクがあります。どのタスクもどのマシンでも実行できますが、あるファミリーのタスクから別のファミリーの別のタスクに切り替えるには、セットアップ時間を追加する必要があります。
1 つの有効なスケジュール (最適ではない) は次のようになります。
を使ってこれをどのように表現するのが最善の方法cumulatives[2/3]
ですか? 各タスクの期間をドメイン変数にし、それに追加の制約を追加することによって?
python - Python を使用すると、Sicstus への OS システム コールが無期限にハングする
Web サイトでユーザーからプルーフを受け取り、それを Prolog スクリプトに送信してその有効性をチェックするプルーフチェック アプリケーションを作成しようとしています。
Django、Python 2.7、および Sicstus を使用しています。サーバーの "view.py" ファイルで、Python スクリプト "checkProof.py" を呼び出し、ユーザーが送信する証明の生のテキスト形式を渡します。そのファイル内には、次の機能があります。
proofChecker.pl は、変更されたバージョンの証明 (pFile) を受け取り、それを分析して、フィードバックをフィードバック ファイル (fFile) に出力します。Python スクリプトは、フィードバック ファイルが生成されるまでループし、これを残りのサーバーに返します。
この関数を初めて呼び出すと、すべてが正常に機能し、期待される出力が得られます。この関数を 2 回目に呼び出すと、プログラムは "p.communicate()" で無期限にハングします。
これは、現在、サーバーの再起動の間にアプリケーションを使用して確認できるプルーフは 1 つだけであることを意味します。サーバーは、再起動の間に無制限の数の証明をチェックできる必要があります。
なぜこれが起こっているのか誰にも分かりますか?必要に応じて、追加情報を含めていただければ幸いです。
アップデート
以下のアドバイスに基づいて、問題がどこにあるのかを判断するために、3 種類の呼び出しを試みました。1 つ目は、私がすでにやろうとしていることです。実際の校正コードで Sicstus を呼び出します。2 つ目は、ハードコーディングされた出力を書き込む非常に単純な Prolog スクリプトを呼び出すことでした。3 つ目は、同じことを行う単純な Python スクリプトです。
3 つのケースすべてで、アプリケーションは 2 回目の呼び出しで引き続きハングアップします。これは、問題がSicstus の呼び出しにあるのではなく、一般的なプログラムの呼び出し方法にあることを意味します。これは少し安心ですが、何が間違っているのかまだわかりません。
eclipse - SICStus SPIDER でメタ引数の警告を回避するには?
これはおそらくcomp.lang.prolog-discussionに関連しています。
SICStus SPIDER で Eclipse を使用すると、次のような警告がいくつか表示されます。
コードサンプルは次のとおりです。
SPIDER 警告を取り除くにはどうすればよいですか? 単に警告を抑制することにはあまり興味がありません。SPIDER IDE の最新バージョン (0.0.51) と SICStus Prolog 4.2.3 を使用しています。
prolog - Prolog で新しいファクトをファイルに追加する
ファイル「relations.pl」に新しい事実を追加することに関して、Prolog で問題が発生しました。事実を得るたびに、それらを保存して使用します
唯一の問題は、新しい事実を挿入し、同じ事実があればそれ以上保存しないようにしたいということです。
とにかくこれを行うことはありますか?ありがとうございました、
url - Eclipse RCP ClassCastException BundleURLConnection から JarURLConnection へ
クラスとメソッドを使用して、 Eclipse RCP アプリケーションの一部としてJavaからSICStusサーバーを起動するために、 SICStus のJasperインターフェイスを使用しようとしています。SICStus
startServer()
http://sicstus.sics.se/sicstus/docs/3.12.7/html/sicstus/Jasper.html http://sicstus.sics.se/sicstus/docs/4.0.8/html/jasper/se/sics /ジャスパー/SICStus.html
私が知っている一般的な方法 (プラグイン プロジェクトとしてラップする、インポートしてビルド パスに追加する、ユーザー ライブラリを作成する) を使用して、SICStus インストールから jasper.jar を含めようとしました。ただし、SICStus クラスをインスタンス化すると、以下に示すスタック トレースが表示されます。のソースのトリガー行は次のSICSTus.class
とおりです。
Eclipse が依存関係をロードし、キャストを行うことができないため、classURL
変数をインスタンス化にキャストしようとすると失敗します。クラスは、製品構成に関連付けられた Eclipse プラグイン プロジェクトからロードする必要があります。問題は、Eclipse クラスローダに回避策はありますか? Eclipse プラグインでこのクラスを使用する方法について誰かアドバイスはありますか?JarURLConnection
BundleURLConnection
前もってありがとう、-ジョン
スタックトレース:
clpfd - Sicstus 4.2.3 と 4.3.0 の time_out の違いによるラベル付け
Sicstus 4.2.3 では、次のようにすることができます。
Sicstus 4.3.0 で同じことを行うと、次のようになります。
Lr
4.3.0 で何が起こったのですか?
また、4.3.0 で取得したソリューションが最適なソリューションであるか、最適でないソリューションであるかをどのように判断しますか?
prolog - timeout_out での最大化の使用
Sicstus 4.3.0 には、最適化問題のすべての解を列挙する新しい洗練された機能があります minimize(:Goal,?X,+Options)
。
新しい検索ヒューリスティックをテストする場合、検索に長い時間がかかることを意味する検索スペースが大きいため、大域的最適解を証明できないことがよくあります。
しかし、多くの場合 (特に産業上の問題の場合)、「十分な」解決策を見つけるだけで十分です。
だから問題に:
「十分な」ソリューションをかなり速く見つけるという問題がありますが、グローバル最適を証明することはできません。したがって、最大化を使用して、検索中に検索ヒューリスティックがどのように動作するかを確認したいと思いますが、グローバル最適化を待ちません。
新しい 4.3.0 バージョンでは、次のようにできます。
Ls
その後、グローバル最適のトレースで見つかったすべてのソリューションを含むリストが完成します。
しかし、グローバル最適化を待ちたくないので、次のtime_out
ように追加します。
MaxLabelingTime
これにより、すべてのソリューションが見つかりますが、各バックトラック間でより多くの時間を費やすことはありません。しかし、それtime_out
以降のキックEs
がインスタンス化されない場合、この方法は失敗します。
私の解決策/回避策は次のとおりです。
これは期待どおりに機能しますが、これが良いアプローチであるかどうかはわかりません。
prolog - 累積の検索ヒューリスティック
他のいくつかの質問 (累積の使用 、累積によるセットアップ時間の表現) を通じて、 の使用に関する優れたフィードバックcumulatives
と、最適なソリューションに到達するための検索を支援する方法について得ました。
ただし、これらの質問では、単純化されたおもちゃの例のみを使用しました.
より大きな問題に移ると、最適解にたどり着くのに苦労します。
要するに、以下が適用される特定のマシンセットでスケジュールするタスクがあります。
- 各タスクには 1 ~ 1000 のランダムな期間があります
- タスクの約 20% はグローバル リソースを消費できます。つまり、同じリソースを使用する他のタスクを同時にスケジュールすることはできません。
- タスクの約 20% は、使用可能なすべてのマシンで実行できません。
元:
この小さな例では、5 台のマシンで 20 個のタスクをスケジュールします。したがって、t4、t7、t15 使用リソース r1 は、異なるマシンでスケジュールされていても、同時に実行することはできません。t4、t15、t16、t20 は r2 などを使用します。t3 は m3 と m4 でのみ実行でき、t4 は m2 と m3 でのみ実行できます。
完全なモデルを次に示します。
これまでのところ、私の最善のヒューリスティックは、MachineId 変数を次の順序で並べることです。最初に多くのリソースを使用するタスクごとに並べ替え、次に特定のマシンでのみ実行可能なタスクごとに並べ替え、最後に残りを並べ替えます。
より良い動作をする可能性のある、より良い検索ヒューリスティックおよび/または対称性の破れの提案はありますか?
prolog - プロローグ - コンストレイント - ライトアップ/あかり
ライトアップ パズルを解こうとしていますが、制約を明確にするのに苦労しています。
私の主な述語は次のとおりです。
はRows
行列の形式です。たとえば、すべての自由な正方形がある場合です。
私が使用するすべての行を処理するには:
行列の各要素をgatherLeft
調べて、処理中の四角形の行と列の右、上、下のカーディナル ギャザーを呼び出します。アイデアは、行と列の各交点 - 必要に応じてクロス - は、最大で 1 つの電球を持つことができるということです。
しかし、私がこのようなことをすると:
または、この sum(VarList, #=<, 1)
私の意図は「各クロスには最大で 1 つの電球を付けることができる」ということですが、最終的にはすべてのスペースを選択してしまい、「ボード全体に最大で 1 つのライトを付けることができます」と言ってしまいます。そして、空のボードになってしまいます。
編集
後世のために、私が思いついた解決策は次のとおりです。
すべての正方形は、最大 1 つのライトを持つことができるので、sum([H], #=<, 1)
.
正方形を取ると、その列と行は最大で 1 つのライトを持つことができるので、sum(Row, #=<, 1)
.
正方形の近傍には少なくとも 1 つのライトが必要なので、sum(VarList, #>=, 1)
.
現在は機能しているようです。