下面是一个简单的python代码:
from scipy.optimize import minimize
def cons_function(x):
return x[0] - 1000
def objective(x):
a = x[0]
return a**5
x0 = [0]
cons_dict = [{'type':'ineq', 'fun': cons_function}]
res = minimize(objective, x0, constraints=cons_dict)
print('x: ', res.x)
print('fun: ',res.fun)
输出如下:
x: [-2.64828354e+12]
fun: -1.3026339977067573e+62
但是,假设x
的值大于1000
,则目标函数的最小值将为10e+15
。
2条答案
按热度按时间vm0i2vca1#
您的初始猜测x0是不可行的,并且与您的约束相矛盾,正如您通过检查返回的优化结果
res
所看到的:您必须始终使用满足所有约束的可行初始猜测。还要注意,您的约束是变量的简单界限,因此建议将其作为界限传递,而不是更一般的约束:
f4t66c6m2#
请查看文档以了解您正在使用的方法。根据优化方法的不同,会使用或甚至忽略约束。https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html
备注
如果没有给出,则根据问题是否有约束或边界,选择BFGS、L-BFGS-B、SLSQP中的一个。