2016-08-23 16 views
-2

Я наткнулся на часть программного обеспечения, которое я бы хотел конвертировать из Julia в Python (у меня нет большого опыта работы с Julia). Основная проблема, с которой я сталкиваюсь, - это то, что я не понимаю, что происходит в разделе, отмеченном комментариями. #PROBLEM НИЖЕ/ВЫШЕПреобразование Julia JuMP в Python PuLP

skaters_teams - это матрица 180 x 10 (180 фигуристов и 10 команд) и команда хранится как двоичный массив, где skaters_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. Первая проблема заключается в том, что вы добавляете ее, а третья - это ограничение, которое вы добавляете. Что второе?

@addConstraint(m, constr[i=1:num_teams], sum{skaters_teams[t, i]*skaters_lineup[t], t=1:num_skaters} <= 6*used_team[i]) 
+0

Добро пожаловать в переполнение стека! Ниже приведены некоторые рекомендации по заданию вопросов, чтобы получить наиболее полезные ответы от людей: http://stackoverflow.com/help/how-to-ask ** и ** http://stackoverflow.com/help/mcve –

+0

Я думаю, что ключ состоит в том, чтобы (а) прочитать некоторые базовые учебники на языках, чтобы вы начали с понимания основ, (б) опубликовать вопрос с очень конкретной проблемой (т. Е. Когда я это сделаю, я получаю эту ошибку). Просто публиковать общий блок кода и просить его пересмотреть, не соответствует целям этого сайта. Попробуйте прочитать те ссылки, которые я дал выше, и дайте им еще один снимок! –

+0

Вы приближаетесь. Но, тем не менее, «я не понимаю эти строки, объясните им, пожалуйста» слишком широка для этого сайта. Я бы (а) предоставил как можно больше информации о вашем понимании того, что делают линии, (b) объяснить код, который вы написали на основе этого понимания, и (c) объяснить, с какими проблемами вы сталкиваетесь с этим код. Кроме того, чтобы быть предупрежденным, похоже, что это вопрос, относящийся к конкретным модулям в Python и Julia, и может быть, может быть, не так много людей, знакомых с ними, поэтому даже хорошо поставленный вопрос не гарантирует успех. –

ответ

1

После долгой работы с ним я нашел решение. В случае, если у кого-то есть подобные проблемы с мякотью и прыжками, вот что я использовал.

for i in range(num_teams): 
    m += sum(x * st[i] for x,st in zip (skaters_lineup, skaters_teams[:])) >= used_team[i] 
    m += sum(x * st[i] for x,st in zip (skaters_lineup, skaters_teams[:])) <= 6*used_team[i] 
+0

Хорошая работа - рада слышать, что проблема имеет разрешение! –

 Смежные вопросы

  • Нет связанных вопросов^_^