【发布时间】:2020-08-05 01:54:31
【问题描述】:
我正在使用 scipy.optimize.minimize 解决一个问题,但是包给出的结果违反了约束。
这种情况非常简单,只给出了一个目标函数和一个约束。代码如下:
import math
import numpy as np
import scipy
from scipy.optimize import minimize
def objective(x):
return np.sum(np.dot(x,x))
n = 5
X_bound=[(0,4) for i in range(n)]
X_guess=[1 for i in range(n)]
_tmp = []
func_list = []
def temp_func(X):
total = 0
for i in range(n):
total = total + np.maximum(X[i] * 5 - 6, 0)
return total/n - 1
func_list.append(temp_func)
for ii in range(len(func_list)):
_tmp.append({'type': 'ineq', 'fun': func_list[ii]})
X_constraint=_tmp
sol=scipy.optimize.minimize(objective,X_guess,method='SLSQP',bounds=X_bound,
constraints=X_constraint)
result = sol.x
result
以上代码给出的结果是
array([5.61582806e-12, 3.56925226e-12, 3.57912934e-12, 3.57912933e-12, 3.57872619e-12])
这显然违反了一个(也是唯一一个)约束。
任何想法我做错了什么?谢谢
【问题讨论】:
标签: python-3.x scipy-optimize scipy-optimize-minimize