問題タブ [gringo]
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.
answer-set-programming - 解答セット プログラミング: 互いに嫌いな 2 人の生徒が同じグループにならないように生徒をグループに割り当てる方法
私はアンサーセットプログラミングの初心者です。次のように、すべての生徒を異なるグループにグループ化したいと考えています。 1. 各グループには 3 ~ 4 人の生徒がいます。3. また、同じ学生を別のグループに割り当てることはできません。
私は次のように書いています:
各グループに含めることができる生徒数の制約を追加しましたが、他の 2 つの条件をどのように満たすかについての手がかりがありません。
どうぞよろしくお願いいたします。ありがとう。
answer-set-programming - Gringo 3 で Clingo 4.5 を使用する
PCGBookの第 8 章の演習からコードを実行しようとしています。彼らは clgo を使用していますが、使用しているバージョンについては言及していません。Potassco の sourceforge (バージョン 4.5.4) から Clingo の最新バージョンをダウンロードすると、レクサー エラーが発生します。これは、Gringo 3 と Gringo 4 の間で構文が変更されたためだと思われます。 Potassco の Web サイトでは、Gringo の両方のバージョンをダウンロードすることで修正する方法が示されていますが、両方を参照する方法については言及されていません。 Clingo でプログラムを実行しています。Gringo 3.0.0 をダウンロードして gringo.exe を置き換えましたが、clingo.exe は最新バージョンの Gringo でコンパイルされています。
Gringo 3 で Clingo の最新バージョンまたは互換性のある最新バージョンをダウンロードするにはどうすればよいですか?
logic - クリンゴは変数範囲を適用します
私はクリンゴについてあまり知りません。問題を明確に共有できれば幸いです。
現在、私は
各 X、Y 値の結果を返します。X-XX と Y-YY の範囲を取得するにはどうすればよいですか。
例: ルールは for を生成cellUseCount(1,5,1)
しtarget(1,5,1,1)
ます。しかし、私はしたいcellUseCount(1,1,1), cellUseCount(1,2,1), cellUseCount(1,3,1), cellUseCount(1,4,1), cellUseCount(1,5,1)
ですtarget(1,5,1,1)
。どうすればそれを実装できますか?
前もって感謝します。
traveling-salesman - タイム ウィンドウを使用した巡回セールスマン問題
追加の制約 - 時間枠で TSP 問題を解決しようとしています。
すべての標準的な仮定が適用されます。
- 指定された都市で開始および終了します。
- 各都市は 1 回だけ訪れます。
- 移動コスト (ここでは移動時間) の観点から最適な経路を見つけようとします。
さらに、各都市には独自の時間枠の形式があります、都市を訪問できる時間を制限します。
- 閉園時間後の都市への訪問はできません。
- 開店時間前にどの都市にも到着し、開店を待つことができます。その場合、待ち時間は全体の経過時間に加算されますが、移動に費やされた時間には加算されません。したがって、 time_spent_travellingとtotal_time_passedは、追跡する必要がある 2 つの異なるものです。
total_time_passedに関して最適解を見つける制約を書くことができましたが、最適なtime_spent_travellingを見つける必要があります。
ここに私の論理があります:
そして、ここにサンプルデータがあります (clingo で実行するには ~ 30 秒かかります):
MAX 関数を使用して、実際の到着時間または都市の営業時間のいずれか遅い方を選択して、特定の都市への到着時間を計算しました。それはうまく機能したので、最初に考えたのは、この行を次のように変更して、場所のファクトに追加のフィールドを追加することでした:
このようにして、 location はtime_spent_travellingとtotal_time_passedの両方に関する情報を保持します。これは 5 つの都市では問題なく機能しますが、20 の都市では計算が長すぎます (15 分後にあきらめました)。プログラムは両方の状況でほぼ同時に実行されると予想していましたが、どうやらここで理解できないことがあります。 .
待機時間も別の事実として保存しようとしましたが、計算時間に同じように影響しているようで、#minimize 関数でそれを考慮するという別の問題が発生し、解決できませんでした。
だからここに私の質問があります:
- time_spent_travellingの最適値を計算するにはどうすればよいですか?ただし、待機時間を正しく考慮していますか?
- 上記で説明したように、コードの小さな変更が、なぜ解決プロセスにこれほど大きな計算上の影響を与えるのでしょうか?
最近 clingo を使い始めましたが、この問題に対する簡単な解決策が見つからない可能性が高いです。宣言型プログラミングに慣れすぎて、プログラムの書き方を変えるのはちょっと難しいです。
私が提供したコードは、クリンゴで簡単に実行できます。
clingo logic data
私の出力:
ここでの結果は、この特定の例では 9 である待機時間を考慮に入れています (378 は移動のみに費やされた時間です)。