2015-09-11 3 views
1

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

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, где мы можем делать такие вещи? Возможно ли это.

+1

Ознакомьтесь с http://stackoverflow.com/questions/30774270/how-to-convert-quadratic-to-linear-program для получения подробной информации о том, как линеаризовать продукт переменных решения в объекте, преобразование билинейной оптимизации проблему (которую вы описываете) к проблеме линейной оптимизации. – josliber

ответ

-1

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