Julia から Python に変換したいソフトウェアを偶然見つけました (Julia の経験はあまりありません)。私が抱えている主な問題は、コメント #PROBLEM BELOW/ABOVE でマークしたセクションで何が起こっているのか正確に理解できないことです。
skaters_teams は 180 x 10 の行列 (180 人のスケーターと 10 チーム) であり、チームはバイナリ配列として格納されます。ここで、skators_teams[0] はプレーヤー 0 の配列を与えます ex:[1, 0, 0, 0, 0, 0, 0 、0、0、0]。
m = Model(solver=GLPKSolverMIP())
# Variable for skaters in lineup
@defVar(m, skaters_lineup[i=1:num_skaters], Bin)
# Variable for goalie in lineup
@defVar(m, goalies_lineup[i=1:num_goalies], Bin)
# One goalie constraint
@addConstraint(m, sum{goalies_lineup[i], i=1:num_goalies} == 1)
# Eight Skaters constraint
@addConstraint(m, sum{skaters_lineup[i], i=1:num_skaters} == 8)
# between 2 and 3 centers
@addConstraint(m, sum{centers[i]*skaters_lineup[i], i=1:num_skaters} <= 3)
@addConstraint(m, 2 <= sum{centers[i]*skaters_lineup[i], i=1:num_skaters})
# between 3 and 4 wingers
@addConstraint(m, sum{wingers[i]*skaters_lineup[i], i=1:num_skaters} <= 4)
@addConstraint(m, 3<=sum{wingers[i]*skaters_lineup[i], i=1:num_skaters})
# between 2 and 3 defenders
@addConstraint(m, 2 <= sum{defenders[i]*skaters_lineup[i], i=1:num_skaters})
@addConstraint(m, sum{defenders[i]*skaters_lineup[i], i=1:num_skaters} <= 3)
# Financial Constraint
@addConstraint(m, sum{skaters[i,:Salary]*skaters_lineup[i], i=1:num_skaters} + sum{goalies[i,:Salary]*goalies_lineup[i], i=1:num_goalies} <= 50000)
# exactly 3 different teams for the 8 skaters constraint
@defVar(m, used_team[i=1:num_teams], Bin)
#PROBLEM BELOW
@addConstraint(m, constr[i=1:num_teams], used_team[i] <= sum{skaters_teams[t, i]*skaters_lineup[t], t=1:num_skaters})
@addConstraint(m, constr[i=1:num_teams], sum{skaters_teams[t, i]*skaters_lineup[t], t=1:num_skaters} <= 6*used_team[i])
#PROBLEM ABOVE
@addConstraint(m, sum{used_team[i], i=1:num_teams} == 3)
次のようにループしていますか?
for i in range(num_teams):
for t in range(num_skaters):
m += sum(skaters_teams[i][t]*skaters_lineup[t]) >=ut[i]
m += sum(skaters_teams[i][t]*skaters_lineup[t]) <=6*ut[i]
また、 で 3 つのパラメーターを使用することに関するドキュメントが見つかりません@addConstraint
。1 つ目は追加する問題で、3 つ目は追加する制約です。2番目は何ですか?
@addConstraint(m, constr[i=1:num_teams], sum{skaters_teams[t, i]*skaters_lineup[t], t=1:num_skaters} <= 6*used_team[i])