Python Scipy最小化';不等式约束不相容';
嗨,我正在尝试最小化一个简单的3变量函数,在x变量中有一些范围成本。。但我发现“不平等约束不相容——有什么想法吗?”?谢谢Python Scipy最小化';不等式约束不相容';,python,scipy,constraints,minimize,Python,Scipy,Constraints,Minimize,嗨,我正在尝试最小化一个简单的3变量函数,在x变量中有一些范围成本。。但我发现“不平等约束不相容——有什么想法吗?”?谢谢 from scipy.optimize import minimize def f(x): return (int(558*x[0]*x[1]*x[2])-(x[2]*(558-int(558*x[0])))-(x[2]*558)) x0 = [0.4, 1.0, 2.0] #real data Ranges #x[0] 0..1 #x[1] 1..
from scipy.optimize import minimize
def f(x):
return (int(558*x[0]*x[1]*x[2])-(x[2]*(558-int(558*x[0])))-(x[2]*558))
x0 = [0.4, 1.0, 2.0]
#real data Ranges
#x[0] 0..1
#x[1] 1..3
#x[2] 5..50
cons=(
{'type': 'ineq','fun': lambda x: x[0]},
{'type': 'ineq','fun': lambda x: 1-x[0]},
{'type': 'ineq','fun': lambda x: x[1]-1},
{'type': 'ineq','fun': lambda x: 3-x[1]},
{'type': 'ineq','fun': lambda x: x[2]-5},
{'type': 'ineq','fun': lambda x: 50-x[2]}
)
res = minimize(f, x0, constraints=cons)
print(res)
全部结果是
fun: -33490.99993615066
jac: array([ 6.7108864e+07, 6.7108864e+07, -8.9300000e+02])
message: 'Inequality constraints incompatible'
nfev: 8
nit: 2
njev: 2
status: 4
success: False
x: array([ 0.4 , 1. , 49.99999993])
你好,我怀疑这个问题来自于使用的数值方法 默认情况下,在约束条件下,
最小化
使用顺序最小二乘规划(SLSQP),这是一种梯度方法。因此,要最小化的函数必须是规则的,但如果使用int
,则不是
使用另一种方法:线性近似约束优化(COBYLA),这是一种不同性质的方法,我得到以下结果
从scipy.optimize导入最小化
def f(x):
返回(int(558*x[0]*x[1]*x[2])-(x[2]*(558 int(558*x[0]))-(x[2]*558))
x0=[0.4,1.0,2.0]
#实际数据范围
#x[0]0..1
#x[1]1..3
#x[2]5..50
缺点=(
{'type':'ineq','fun':lambda x:x[0]},
{'type':'ineq','fun':lambda x:1-x[0]},
{'type':'ineq','fun':lambda x:x[1]-1},
{'type':'ineq','fun':lambda x:3-x[1]},
{'type':'ineq','fun':lambda x:x[2]-5},
{'type':'ineq','fun':lambda x:50-x[2]}
)
res=最小化(f,x0,约束=cons,method=“cobyla”)
打印(res)
用显示器
fun: -55800.0
maxcv: 7.395570986446986e-32
message: 'Optimization terminated successfully.'
nfev: 82
status: 1
success: True
x: array([-7.39557099e-32, 1.93750000e+00, 5.00000000e+01])
你好,我怀疑这个问题来自于使用的数值方法 默认情况下,在约束条件下,
最小化
使用顺序最小二乘规划(SLSQP),这是一种梯度方法。因此,要最小化的函数必须是规则的,但如果使用int
,则不是
使用另一种方法:线性近似约束优化(COBYLA),这是一种不同性质的方法,我得到以下结果
从scipy.optimize导入最小化
def f(x):
返回(int(558*x[0]*x[1]*x[2])-(x[2]*(558 int(558*x[0]))-(x[2]*558))
x0=[0.4,1.0,2.0]
#实际数据范围
#x[0]0..1
#x[1]1..3
#x[2]5..50
缺点=(
{'type':'ineq','fun':lambda x:x[0]},
{'type':'ineq','fun':lambda x:1-x[0]},
{'type':'ineq','fun':lambda x:x[1]-1},
{'type':'ineq','fun':lambda x:3-x[1]},
{'type':'ineq','fun':lambda x:x[2]-5},
{'type':'ineq','fun':lambda x:50-x[2]}
)
res=最小化(f,x0,约束=cons,method=“cobyla”)
打印(res)
用显示器
fun: -55800.0
maxcv: 7.395570986446986e-32
message: 'Optimization terminated successfully.'
nfev: 82
status: 1
success: True
x: array([-7.39557099e-32, 1.93750000e+00, 5.00000000e+01])