解决较为复杂的非线性规划时,出现了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, a5, a6, a7, a8, a9, a10, l, h, q = args
cons = ({'type': 'eq', 'fun': lambda x: x[0] + x[3] + x[5] - a5}, # 等式约束
{'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)
# 定义约束条件
args2 = (0.5, 1/12, 1125.0, 0.000001, 1500.0, 60.0, 24.0, 400.0, 32.0, 80.0, l1, h1, q1) # a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, l, h, q # 定义约束条件中的参数
cons = constraint(args2)
# 求解优化问题
x0 = np.asarray((0.5, 0.5, 0.5, 0.5, 0.5, 0.5)) # 定义搜索的初值
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)) # 目标函数的优化值
想求解的问题是这个
但是求解后的状态如下
通常是由于约束条件无解。
也就是说,你要检查一下,你给出的约束条件,能否找到满足条件的解。
方案来自 梦想橡皮擦 狂飙组基于 GPT 编写的 “程秘”
"Optimization problem (res1): Inequality constraints incompatible" 这个错误通常表示您的非线性规划问题存在不兼容的不等式约束。
这个错误的原因可能是您的不等式约束之间存在矛盾或冲突,或者可能是由于您设置的变量范围或约束不正确导致的。
解决这个问题需要仔细检查您的约束和变量范围,并确保它们之间没有矛盾或冲突。可以使用不同的优化工具进行测试和调试,或者使用不同的求解器或优化算法,看看是否可以解决这个问题。
另外,也建议您检查一下非线性规划的定义是否正确,是否有可能存在其他问题导致求解不稳定或无解。
该错误的出现一般有以下原因之一:
您可以尝试以下方法来排除该错误:
根据网上查询信息,出现这个错误的可能原因有以下几种:
1、您的初始值不满足所有的不等式约束条件,导致优化算法无法找到可行解。
2、您的不等式约束条件之间存在冲突或矛盾,导致优化算法无法找到可行解。
3、您的不等式约束条件过于复杂或非线性,导致优化算法无法正确处理。
题主可以尝试以下几种方法来解决这个问题:
1、调整您的初始值或约束条件,使其更接近可行域。
2、检查您的约束条件是否有逻辑错误或数值误差。
3、使用其他优化算法或工具,如CVXOPT或IPOPT等。
这个错误通常是由于不等式约束条件不兼容导致的,您可以尝试检查不等式约束条件是否正确,以及是否存在冲突的约束条件。此外,您还可以尝试改变优化算法的参数,以改善优化结果。Optimization problem (res1): Inequality constraints incompatible的错误代表的是该非线性规划中存在不兼容的不等式约束问题。在此情况下,可以尝试分析现有的不等式约束,尝试调整相关参数,让条件约束满足兼容性要求,或者增加约束条件,使得问题能够收敛到可求解的解空间内。