私が抱えている問題の解決策があるかどうかを見つけようとしています。私は X 人と Y のポジションを配置しています。ポジションよりも人数が多い場合もありますが、デフォルトのケースでは X==Y です。一人が移動しなければならない距離が最小になるように人を配置したい。したがって、人が 1 ~ 5 で位置が AE の場合:
1 2 3 4 5
A B C D E
私がすでに持っていた些細な実装では、{A2, B3, C4, D5, E1} を割り当てていました。その結果、E は他の誰よりもはるかに遠くまで移動しました。 、つまり、他のすべての人はもう少し先に進みますが、最悪の場合ははるかに小さくなります。
私は現在、距離(昇順)でソートされた各位置を含む、各人の配列を作成しています。次に、最高の位置までの距離が最も長いプレーヤーが最初になるように、すべての人の配列を逆に並べ替えます。私は彼をポジションに割り当て、次にそのポジションを他の各プレイヤーのリストから削除し、逆の並べ替えを繰り返し、すべてのポジションが満たされるまで繰り返します。
これにより妥当な結果が得られますが、非常に非効率的です (各配列から要素を削除し、毎回再ソートする)。
明らかに、問題は人や位置までの距離に対処する必要はありませんが、各リソースが特定のフィットネスでタスクを実行できるようにリソースを割り当てることと言えます。すべてのツールが少し不適切なタスクを実行していることを意味する場合でも、それが理にかなっている場合。
ここでミラーリングしている古典的な最適化の問題があると思われますが、どれがどれかはわかりません。