用python解决较为复杂的非线性规划时,出现了Optimization problem (res1): Inequality constraints incompatible的错误
from scipy.optimize import minimize
import numpy as np
def fun(): # 定义目标函数
v = lambda x: x[0] * x[1] + x[2] * x[3] + x[4] * x[5]
return v
def constraint(args): # 定义约束条件函数
a1, a2, a3, a4, a6, a7, a8, a9, a10, l, h = args
cons = ({'type': 'eq', 'fun': lambda x: x[0] + x[3] + x[5] - h}, # 等式约束
{'type': 'ineq', 'fun': lambda x: x[0] - a6 * x[1]},
{'type': 'ineq', 'fun': lambda x: x[2] - a7 * x[3]},
{'type': 'ineq', 'fun': lambda x: x[2] - a8},
{'type': 'ineq', 'fun': lambda x: x[4] - a9 * x[5]},
{'type': 'ineq', 'fun': lambda x: (a4*a3*(x[3]+a1*x[0]+a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1])))/(a2*(x[2]*(x[3]**3)+x[4]*(x[5]**3)+x[1]*(x[0]**3))+x[2]*x[3]*((a1*(x[3]+x[0])+a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1]))**2)+x[4]*x[5]*((a1*(x[5]+x[0])-a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1]))**2)+x[0]*x[1]*(a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1]))**2)-a10},
{'type': 'ineq', 'fun': lambda x: (a4*a3*(x[5]+a1*x[0]-a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1])))/(a2*(x[2]*(x[3]**3)+x[4]*(x[5]**3)+x[1]*(x[0]**3))+x[2]*x[3]*((a1*(x[3]+x[0])+a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1]))**2)+x[4]*x[5]*((a1*(x[5]+x[0])-a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1]))**2)+x[0]*x[1]*(a1*(x[4]*x[5]*(x[5]+x[0])-x[2]*x[3]*(x[3]+x[0]))/(x[2]*x[3]+x[4]*x[5]+x[0]*x[1]))**2)-a10})
return cons
# 输入约束条件参数和常数
l1 = float(input("请输入跨径l(单位是m):"))
print("l = ", l1)
# 梁高h单位为mm
h1 = float((l1/20) * (10**3))
# 均匀荷载q = 10 kN*m
#q1 = float(10)
# 变量x[0]----hw 腹板计算高度
# x[1]----tw 腹板厚度
# x[2]----b1 上翼缘宽度
# x[3]----t1 上翼缘厚度
# x[4]----b2 下翼缘宽度
# x[5]----t2 下翼缘厚度
# 均匀荷载q = 10 kN*m
# 定义边界约束
b = (0.0, None)
bnds = (b, b, b, b, b, b)
# 定义约束条件S
args2 = (0.5, 1/12, 1125.0, 1000000, 60.0, 24.0, 800.0, 32.0, 80.0, l1, h1) # a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, l, h, q # 定义约束条件中的参数
cons = constraint(args2)
# 求解优化问题
x0 = np.asarray((1430.0, 26.0, 700.0, 30.0, 840.0, 40.0)) # 定义搜索的初值
res = minimize(fun(), x0, method='SLSQP', constraints=cons)
print("Optimization problem (res1):\t{}".format(res.message)) # 优化是否成功
print("xOpt = {}".format(res.x)) # 自变量的优化值
print("min f(x) = {:.4f}".format(res.fun)) # 目标函数的优化值
想要求解的实际问题为
Inequality constraints incompatible错误是因为非线性规划问题存在不兼容的不等式约束,或者变量设置的范围不对。
不知道你这个问题是否已经解决, 如果还没有解决的话: