Деление объективной функции в Pyscipopt - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь максимизировать деление двух величин в PySCIPOpt.Поскольку это деление двух линейных метрик, оно становится нелинейной оптимизацией.

Мой код выглядит примерно так:

model = Model()
x={}
for i in range(0,len(data)):
    x[i] = model.addVar(vtype = 'B',name = 'x(%s)'%i)

data['Index'] = range(0,len(data))
profit = 0
volume = 0
for index in data['Index']:
    profit += x[index] * data['Predicted.Profit'][index]
    volume += x[index] * data['Predicted.Liters.Sold'][index]


model.setObjective(profit/volume,"maximize")

Как только я нажимаю команду setObjective, мой кодЯдро загружается более 20 минут и просто продолжает работать.Я хочу знать, что-то не так с моим определением объективной функции?Могу ли я заниматься чем-то другим?Что-то более эффективное?

Кстати, мой набор данных имеет форму 178848x36

edit

Функция запустилась через двадцать минут!Но выдал ошибку, сказав: AssertionError: данные коэффициенты не являются ни Expr, ни числом, а ProdExpr

Как мне обойти эту ошибку?Так как я хочу оптимизировать деление решений на переменные!Как сделать объявление этой целевой функции более эффективным?

Edit2

Есть ли способ преобразовать ProdExpr в Expr ??

...