したがって、行列内の最小値を次のようにして見つけたいと思います。行インデックスと列インデックスを一度使用して行列の値の最小の和を求めよう
[[ 1000. 930. 940. 740.]
[ 1000. 1000. 990. 670.]
M1= [ 1000. 1000. 1000. 680.]
[ 1000. 1000. 1000. 1000.]]
2つのマトリックス値の合計は、インデックスが0,1,2,3に一度使用されるように選択する必要があります。しかし、行列の値の合計も最小限に抑える必要があります。
この場合、解はM1[2][3]
とM1[0][1]
になります。 間違っているのはM1[2][3]
とM1[1][3]
です。これは合計が低くなりますが、一意のインデックス番号は含まれません。
解決策はNxN行列に対して機能するはずです.Nは偶数です。だから8×8行列のために、私は4つの要素を探したい。そのようにインデックス番号。 0,1,2,3,4,5,6,7は一度使用されます。したがって、4つの行列値。 もう1つの制約は、マトリックスが上部の円周行列にintrestの値のみを含むことです。したがって、行列要素は1000であり、これらの要素は最小合計を見つける際に無視することができます。
ハンガリーのアルゴリズムを変更しようとしましたが、これは成功しませんでした。 誰かが私の望むアルゴリズムを知っていますか?おそらく私が悪用する可能性のあるPythonパッケージ
または、私はこの行列を約200X200要素で最大限にしなければならないスマートな解決法を持っています。
これは理論的な質問ですか、試験ですか?本当の問題か?スパース行列や大きな値の違いなど、データにいくつかの制約がありますか?シンプルなブルートフォースピッキングはn = 200で有望ではありません。 – stefan
その例のように、そのダイアゴナル行列。個人的なプロジェクトのために、私は複数のオブジェクト間の差異を最小限に抑えたいと思っていました。 –
対角線の制約が役立つことがあります。私はあなたがハンガリーのアルゴリズムを使用することができます転置行列を追加すると思います。 m [i] [j]がm [j] [i]を必要とするという制約を使って、1対1の割り当てを検索します。 – stefan