Python 使用SLSQP的SciPy优化提供了不满足约束的解决方案

Python 使用SLSQP的SciPy优化提供了不满足约束的解决方案,python,scipy,nonlinear-optimization,Python,Scipy,Nonlinear Optimization,我试图最小化函数 B1=0.00299540627439527*x[0]**2+0.00701825276534463*x[0]*x[1]+0.0672877782113971*x[0]+0.00456646480250456*x[1]**2+0.0540808346344827*x[1]+0.29893875491431 在x1=[-10,10]和x2=[-10,10] 给定以下不等式constriant EqX0=[[(x[0]+5)**2+x[1]**2-2.5]]我认为你定义的边界是错误

我试图最小化函数
B1=0.00299540627439527*x[0]**2+0.00701825276534463*x[0]*x[1]+0.0672877782113971*x[0]+0.00456646480250456*x[1]**2+0.0540808346344827*x[1]+0.29893875491431
x1=[-10,10]
x2=[-10,10]
给定以下不等式constriant
EqX0=[[(x[0]+5)**2+x[1]**2-2.5]]我认为你定义的边界是错误的。尝试
边界([-10,-10],[10,10])


请参阅。

如果您提供了一个,那么有人会更容易帮助您。我无法复制,我得到了数值上允许的值
x=[-3.70887367,0.91268439]
。尝试用普通算术替换所有的sympy subs。这将有助于定位问题。但是解决方案
[-10,10]
确实在您指定的范围内。@Stelios但是解决方案不满足约束函数提到的约束。在这种情况下,我认为链接提供了上下文。我看没问题
def Objective2(ax):
    B2=B1.copy()
    B2=B2.subs((x[i],ax[i]) for i in range(len(ax)))
    return ga-B2

def Constraint1(ax):
    EqX0c=EqX0.copy()
    cc=[]
    for pp in range(len(EqX0c)):
        cc.append(-EqX0c[0][pp].subs((x[i],ax[i]) for i in range(len(ax))))
    return cc

con1= {'type': 'ineq','fun': Constraint1}
bounds=Bounds([-10,10],[-10,10])
sol2=minimize(Objective2,x0,method="SLSQP",bounds=bounds,constraints=con1)