【发布时间】:2017-06-30 00:49:33
【问题描述】:
目标:
maximize :((((alpha1*5000)+(alpha2*0.49431))-5000) + (((alpha1*5000)+(alpha2*0.49431))-0.49431))
约束:
mod(alpha) <= 1
代码:
from scipy.optimize import minimize
alpha = [0,0];v1 = 5000
v2 = 0.49431537320810676
def objective(alpha,sign = -1.0):
alpha1 = alpha[0]
alpha2 = alpha[1]
return sign*((((alpha1*5000)+(alpha2*0.49431537320810676))-5000) + (((alpha1*5000)+(alpha2*0.49431537320810676))-0.49431537320810676))
def constraint1(alpha):
return (1- abs (alpha[0]))
def constraint2(alpha):
return (1- abs (alpha[1]))
con1 = {'type':'ineq','fun':constraint1}
con2 = {'type':'ineq','fun':constraint2}
cons = [con1,con2]
sol = minimize(objective,alpha,method='SLSQP',constraints = cons)
我已经在目标函数中给出了符号,以将优化更改为最大化。
解决方案:
(sol.x)
>>>>[ 1.00104909 0.99560862]
我已经给出了 alpha 小于 1 的约束,但得到的解决方案大于 1。
【问题讨论】:
-
您正在使用 NLP 求解器来求解 LP。这几乎总是一个坏主意。此外,您使用不可微函数 abs(x),而此 NLP 求解器假定平滑函数。这只是解决问题的一种不好的方法。
标签: python scipy linear-programming