2016-08-29 19 views
-3

3つのマシンに7人のワーカーを割り当てる問題があります。ある従業員がマシンに割り当てられている場合と、その従業員がアイドル状態の場合には、コストがかかります。 3台すべてのマシンが使用されている必要があります。コスト行列は、不均衡なワーカー/マシン割り当て

 M1 M2 M3 
    W1 [72, 74, 74]   [64, 
    W2 [48, 50, 50]   44, 
C = W3 [52, 52, 52]  I = 52, 
    W4 [40, 20, 18]   10, 
    W5 [46, 48, 48]   42, 
    W6 [40, 26, 26]   18, 
    W7 [40, 20, 18]   12] 

です。行列Cは、各マシンに割り当てられる各作業者のコストです。行列Iは、各作業者がアイドル状態になるコストを表す。私は現在、現在のコストマトリックスとコスト行列

 M1 M2 M3 
    W1 [72, 74, 74,64,M,M,M,M,M,M]   
    W2 [48, 50, 50,M,44,M,M,M,M,M]   
C = W3 [52, 52, 52,M,M,52,M,M,M,M]  With M being very big. 
    W4 [40, 20, 18,M,M,M,10,M,M,M]   
    W5 [46, 48, 48,M,M,M,M,42,M,M]   
    W6 [40, 26, 26,M,M,M,M,M,18,M]   
    W7 [40, 20, 18,M,M,M,M,M,M,12]   

と最小コストを決定するためにscipy.optimize.linear_sum_assignmentを使用してい

は、時々、すべてのマシンが割り当てられていないことが起こります。これに対処するために、マシンが最初に選択されていることを確認するために、すべてのアイドルコストに10を掛けました。

私のpythonコードは、しかし、私に最適な答えを与えていません。この種の問題を解決するために使用できる別の機能があるのでしょうか?

コード:

from scipy.optimize import linear_sum_assignment 
C = [[72, 74, 74, 640, M, M, M, M, M, M], 
    [48, 50, 50, M, 440, M, M, M, M, M], 
    [52, 52, 52, M, M, 520, M, M, M, M], 
    [40, 20, 18, M, M, M, 100, M, M, M], 
    [46, 48, 48, M, M, M, M, 420, M, M], 
    [40, 26, 26, M, M, M, M, M, 180, M], 
    [40, 20, 18, M, M, M, M, M , M, 120]] 

row_ind, col_ind = linear_sum_assignment(C) 
print(row_ind) 
print(col_ind) 

私は3台のすべてのマシンが労働者を割り当てられるように強制しながら、割り当てを解決する方法が必要です。コストマトリックスを定義する私のやり方はそうしているようだが、望む答えは出ない(タブー検索を使って得られる)。 scipy.optimize.linear_sum_assignmentに、常に3台のマシンを割り当てるように強制する方法がわかりません。 scipy.optimize.linear_sum_assignmentでこれを実行することも可能ですか、むしろ別のPythonパッケージを使用する必要がありますか?

+0

_私のpythonコードは私に最適な答えを与えません。コードを表示しないとどうすれば助けてくれるのでしょうか? –

+0

ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)がここに適用されます。コードを投稿して問題を正確に記述するまでは、効果的にお手伝いすることはできません。 – Prune

答えて

0

何が間違っているかを確認しました。私は多くのダミーマシンを持っていたので、マシンではなく作業者を割り当てることができました。 (7×7)正方形にマトリックスの寸法を変えると

 M1 M2 M3 
    W1 [72, 74, 74,64,64,64,64]   
    W2 [48, 50, 50,44,44,44,44]   
C = W3 [52, 52, 52,52,52,52,52]  
    W4 [40, 20, 18,10,10,10,10]   
    W5 [46, 48, 48,42,42,42,42]   
    W6 [40, 26, 26,18,18,18,18]   
    W7 [40, 20, 18,12,12,12,12] 

scipy.optimize.linear_sum_assignmentコスト行列を変更することによって、今私に正しい割り当てを与えます。

関連する問題