Я пытаюсь максимизировать деление двух величин в 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 ??