Умножение двух переменных в CVXPY

Мне нужен LP, где вы можете умножить две непостоянные. Вот следующий код, который я пытаюсь выполнить:

import cvxpy as cvx
a = cvx.Variable()
b = cvx.Variable()
c = cvx.Variable()
obj = cvx.Maximize(((0.4270437386 * a) + (0.1737677971 * b) + (0.21763175116 * c) - 0.03)  /  (((((2 * a * 0.424718270)  * b) * (0.195770376 ** 0.5)) * (0.022090814 ** 0.5)) * ((2 * c * -0.041137487) * b * (0.194241184 ** 0.5) * (0.022090814 ** 0.5)) * (2 * a * 0.363033596 * c * (0.195770376** 0.5) * (0.194241184 ** 0.5))))

К сожалению, это вызывает ошибку:

cvxpy.error.DCPError: Cannot multiply two non-constants.

Это происходит из нескольких областей в знаменателе obj, таких как (2 * a * 0.424718270) * b).

Мне интересно, знает ли кто-нибудь о каких-либо программах для LP, где мы можем делать такие вещи? Возможно ли это?


person thefoxrocks    schedule 11.09.2015    source источник
comment
Пожалуйста, проверьте stackoverflow.com/ questions/30774270/ для получения подробной информации о том, как линеаризовать произведение переменных решения в цели, преобразовав задачу билинейной оптимизации (которую вы описываете) в задачу линейной оптимизации.   -  person josliber♦    schedule 11.09.2015


Ответы (1)


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

person Degustaf    schedule 11.09.2015