属性fooを持つ同じクラスのインスタンスを含む多くの可変サイズのリストがあり、すべてのリストに次のようなルールを適用する必要があります。
- 要素foo=Aがある場合、[B、C、D]にfooを持つ要素はありません。
- 要素foo=Xがある場合、[Y、Z]にfooを含む要素が少なくとも1つ存在する必要があります。
- MIN要素とMAX要素の間に存在する可能性がありますfoo=BAR
上記の3つのルールを組み合わせると、私が必要とする同様の制約を表現するのにおそらく十分です。これはソフトウェアパッケージの依存関係チェックのようなものですが、数量があり、バージョンが不足しています:)
ナイーブなアプローチは次のようになります。
R_CONFLICT={ A: [B,C,D] }
R_DEPENDS ={ X: [ [Y,Z], W, .. } # means: A depends on either Y or Z, and W
R_MIN ={BAR: n, BAZ: m}
R_MAX ={BAR: o, BAZ: p}
# now just loop over lists to check them..
これは制約プログラミングの問題ですか?結果を得るために実際に何かを解決する必要はありません。いくつかの制約に対してリストを検証し、それらが満たされているかどうかを確認する必要があります。この問題をどのように分類し、どのように解決しますか?
価値があるので、私はPythonでコーディングしていますが、ジェネリックプログラミングの答えを歓迎します:)制約プログラミングを掘り下げなければならないことが判明した場合は、おそらくpython-constraintを試すことから始めます。