python pulp, оператор if с использованием pulp.variables

Недавно я столкнулся с проблемой при использовании Pulp.

Я так определяю свою проблему.

point = lp.LpProblem("Maximize the Points", lp.LpMaximize)
#the dict can only be string, so we use a list containing string
students = [str(i) for i in list(range(96))]
groups = [str(i) for i in list(range(24))]

choices = lp.LpVariable.dicts("Choice",(groups,students),0,1, cat = "Integer")

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

point +=  1 * cal_lang() \
        + 1 * cal_leader() \
        + 1 * cal_learn() \
        + 1 * cal_like() \
        - 10 * cal_dislike() , "Maximize the evaluation points"

Между тем, в cal_lang мне нужно вычислить, сколько переменных равно 1, поэтому я использую

if lp.value(choices[group][student]) == 1 :

Однако это не работает, даже если pulp.value определено как.

pulp.value (x) Возвращает значение переменной / выражения x или x, если это число.

print('%%%%%%%%%%%%%%%%%')
print(choices["5"]["5"])
print(type(choices["5"]["5"]))
print(lp.value(choices["5"]["5"]))
print('%%%%%%%%%%%%%%%%%')

Это так запутано. Затем я пытаюсь извлечь тип и значение моих переменных. Код и вывод такие.

%%%%%%%%%%%%%%%%%
Choice_5_5
<class 'pulp.pulp.LpVariable'>
None
%%%%%%%%%%%%%%%%%

Кажется, что я могу извлечь значение моей переменной chioces ["5"] ["5"], которая определена как целое число 0 или 1, и мое "if" не работает.

Как я могу решить эту проблему?


person Chris    schedule 16.03.2018    source источник
comment
В конце концов, сложно следовать вашему коду или тому, что вы делаете. Вы не можете использовать только какой-либо внешний оператор, if-else или внешние функции, действующие на переменные (кроме аффинных форм) внутри модели. Если вы используете varaible.value или что-то подобное, прежде чем что-то делать с окончательным решением, вы, вероятно, делаете что-то не так. Поэтому постарайтесь быть более точными в том, что вы делаете, и постарайтесь минимизировать / извлечь суть вашей проблемы.   -  person sascha    schedule 17.03.2018
comment
Значение переменной не определяется до того, как будет найдено решение. Предлагаю посмотреть на примеры   -  person Stuart Mitchell    schedule 19.03.2018


Ответы (1)


Мне нужно подсчитать, сколько переменных равно 1

Поскольку choices - это двоичная переменная. это очень просто:

 count = sum((i,j), choices(i,j))

(в математической записи). Это можно записать прямо в Pulp с помощью lpSum.

person Erwin Kalvelagen    schedule 17.03.2018