无法通过附加构造约束(scipy.optimize.minimize)

时间:2019-06-06 12:10:22

标签: python scipy scipy-optimize scipy-optimize-minimize

为解决二次最小问题,我使用了scipy.Optimize.Minimize

首先,我初始化函数和一些要点:

def func(x):
    return 1/4*(x[0]**2+x[1]**2) + x[2]

P1=[]
for i in range(3):
    P1.append((rd.uniform(-1,1), rd.uniform(-1,1)))

P2=[]
for i in range(3):
    P2.append((rd.uniform(-1,1), rd.uniform(-1,1)))

但是,我有一个关于约束的问题。 当我这样做时,没有错误,它可以正常工作:

cons = [{'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[0][0] - x[1] * P1[0][1] - (P1[0][0] ** 2 + P1[0][1] ** 2)},
        {'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[1][0] - x[1] * P1[1][1] - (P1[1][0] ** 2 + P1[1][1] ** 2)},
        {'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[2][0] - x[1] * P1[2][1] - (P1[2][0] ** 2 + P1[2][1] ** 2)}]

for i in range(len(P2)):
    cons.append({'type': 'ineq', 'fun': lambda x: -x[2] + x[0]*P2[i][0] + x[1]*P2[i][1] + (P2[i][0]**2+P2[i][1]**2)})

但是当我这样做时,它返回RuntimeWarning:在double_scalars中遇到无效的值,并且不起作用:

cons=[]
for i in range(0, len(P1)):
    cons.append({'type': 'ineq', 'fun': lambda x: x[2] - x[0] * P1[i][0] - x[1] * P1[i][1] - (P1[i][0] ** 2 + P1[i][1] ** 2)})

for i in range(len(P2)):
    cons.append({'type': 'ineq', 'fun': lambda x: -x[2] + x[0]*P2[i][0] + x[1]*P2[i][1] + (P2[i][0]**2+P2[i][1]**2)})

PS: 结束了:

x0 = np.array([0, 0, 0])
res = minimize(func, x0, constraints=cons)

在不起作用的情况下,我不知道我的错误在哪里。 预先谢谢你:)

0 个答案:

没有答案
相关问题