問題タブ [clingo]
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.
logic - clingo で重要な制約を実現するにはどうすればよいですか?
私は現在プロローグを学んでおり、主要な制約をモデル化するためにクリンゴを使用しようとしていますが、いくつかの問題に遭遇しました。誰かが私に手を差し伸べてくれることを願っています. ここに私の問題があります:
- キー制約を構築し、clingo で次のようなものを書きたい
整合性制約として使用されますが、構文エラーが発生します。私はそれを置く別の方法を試してみましたが、うまくいくようでした。
しかし、プログラムをより簡潔にするために、分離された制約を 1 つの主要な制約にまとめることができるのでしょうか?
- 別の問題は、クリンゴで「何かが存在する」という事実を構築する方法に関するものです。私が達成したいのは、クリンゴを使用して、与えられた2つのルールセットが満足できるかどうかを判断することです。ここに例があります。
ルールの最初のセットは、「ID が 1 で名前が mike の生徒が存在する」ことを示しています。
「同じIDを持つ2人の学生は、同じ名前と年齢を持つ必要があります」(これは重要な制約です):
そこで、Clingo で最初のルール セットを次のように記述します。
「ID が 1 で年齢が 27 の学生が存在する」という 2 番目のルール セットが与えられているとします。
2 番目のルール セットは Clingo で次のように記述されます。
私の問題は、単純にこれら 2 つのルール セットをプログラムに入れると、Clingo はそれらが充足可能な原因 ("mike",v) != (v, 27) ではないと判断することです。したがって、ID = 1、名前 = "mike"、年齢 = 27 の生徒がいる場合、2 つのセットのルールは実際には満足できるため、私の解決策 (おそらく存在を構築する方法) には何か問題があるに違いありません。上記のように、Clingo を使用して 2 セットのルールの充足可能性を判断する方法があれば、ありがとう!
logic-programming - clingoで個別の値だけでなくすべてを合計する方法は?
次のコードは、1 が 2 回表示されますが、1 と 2 を加算するためではx(3)
なく生成します。クリンゴで合計x(4)
金額を取得する正しい方法は何ですか?
logic-programming - クリンゴで検索スペースを効率的に削減する
制約の問題をスケーリングするのに苦労しています (大きな値の場合、および/または解決策を探すのではなく最適化しようとすると失敗します)。以前の質問からのアドバイスに基づいて、検索スペースを分割するためのいくつかの手順を実行しましたが、まだ行き詰まっています。この計算を最適化するのに役立つテクニックは他にありますか?
これが管理可能になると、次のような最適な構成を選択するための最適化目標をさらに追加したいと考えています。
更新 - 問題の説明
- Pプレイヤーが集まってクイズナイト。DデッキとRルームが 遊べます。
- 各部屋には 3 人または 4 人のプレイヤーしか収容できません (スペースではなく、ゲームのルールによります)。
- 各デッキは最大で 1 回プレイされ、複数の部屋で同時にプレイされるため、ある意味でデッキは「ラウンド」と同義です。
- 各プレイヤーは同じデッキを最大 1 回しかプレイできません。
- 各プレイヤーは、夜間に N 回しかプレイできません (N はほぼ固定されており、4 回です)。
- したがって、夜間に 9 つのデッキがプレイされる場合 (つまり、多数のプレイヤーが存在する場合)、それぞれがこれらの 9 つのデッキのうち 4 つをプレイします。
- したがって、各プレイヤーが各「デッキ/ラウンド」でプレイする必要はありません。実際、各デッキにはライターがいて、通常は参加しているプレイヤーの 1 人です。
- 当然、ライターは自分のデッキをプレイすることはできないため、そのラウンドに参加することはできません。さらに、各デッキ/ラウンドでは、誰かが各部屋で質問を読まなければならないため、16 人のプレイヤーが存在し、4 つの部屋がある場合、16 人のプレイヤー全員がプレイすることは不可能です。それぞれ 3 人のプレーヤーがいる 4 つの部屋 (そして残りの 4 人のプレーヤーが質問を読み上げる) または 4 人のプレーヤーがいる 3 つの部屋 (3 人のプレーヤーが質問を読み上げ、1 つの観戦) を持つことができます。
うまくいけば、これで混乱が解消されます。そうでない場合は、より複雑な例を挙げることができますが、基本的には、4 つの部屋と 30 人のプレーヤーがあるとします。
- プレイする 16 人と、質問を読み上げる 4 人を選択します。
- 次に、1/4 のデッキ/ラウンドをプレイした 16 人と、まだ 0/4 のままの 14 人がいるとします。
- したがって、残りの 14 人にプレイさせる (1 ルームあたり 4、4、3、3 人のプレイヤー) か、引き続きルーム ユーティリティを最大化して、第 2 ラウンド後に全員が少なくとも 1 回プレイし、2/30 人のプレイヤーがすでに 2/ をプレイするようにすることができます。 4 ゲーム。
- そのため、全員がちょうど 4 デッキ/ラウンドをプレイするまで、何人かの人を選び続けます。
PS ラウンドには 2 つの概念があります。1 つは全員が 4 をプレイする個人レベルで、もう 1 つはリーグ レベルで 4 を超えるデッキがいくつかあり、各デッキは出席者全員の目には「ラウンド」と見なされます。 . 私が理解したところでは、これが最初によく理解できなかったセットアップに関する最も紛らわしい部分でした。