web-dev-qa-db-ja.com

この問題を解決するための適切なアルゴリズムは何ですか?

問題は-一連のボックス(A、B、C、D、...)があります。各ボックスには、異なる色のレンガが含まれています。例えば。

Box A - red, blue
Box B - blue, red, green

... and so on...

そして、各ボックスには複数のバージョンがあります-

Box A1 - red, blue
Box A2 - green, red, yellow
...

Box B1 - blue, red, green
Box B2 - blue, red

... and so on ... 

アイデアは、各ボックスのバージョンの1つを選択することです。そのため、ユニークなレンガの総数は最小になります。例えば。この例では-

Box A1 + Box B1 = blue, red, green (3 unique bricks)

だが

Box A2 + Box B1 = blue, red, green, yellow (4 unique bricks)

そう Box A1 + Box B1がより良い選択です。

このようなボックスのコレクションを作成し、レンガの一意の総数が最小になるように、各ボックスの少なくとも1つのバージョンを選択する必要があります。

この問題を解決する既知のアルゴリズムはありますか?

1
Shubham Kanodia

コメントで述べたように、この問題は集合被覆問題と見なすことができます。最適な解に興味がある場合は、混合整数計画法(MIP)ソルバーを使用して解くことができます。オープンソースソルバーの場合、glpkまたはcbcを見ることができます。独自のソルバーに興味がある場合は、Cplex、Gurobi、またはXPress-MPをご覧ください。

次の方法でモデル化できます。

  • 問題の個々のブリックにバイナリ変数を関連付けます。目的関数は、これらの正の変数の合計を最小化することです。

  • ボックスのすべての可能なバリエーションにバイナリ変数を関連付けます。各ボックスに、このボックスのバリエーションに関連付けられたバイナリ変数の合計が1に等しくなければならないことを示す制約を追加します。

  • 最後に、ボックスバリエーションとそのバリエーションの一部であるブリックのすべての組み合わせについて、ボックスバリエーションに関連付けられたバイナリがブリックに関連付けられたバイナリ変数以下であることを示す制約を追加します。

2
Renaud M.