我正在尝试了解constraints
优化功能中的scipy
。我想在假设输入值始终为正的情况下最小化函数。所以我的约束函数定义如下:
def apply_constraint(inputs):
return inputs[0] - inputs[0]
如果我所有的输入均为负,会发生什么?我尝试使用负输入,但无法理解结果。约束属性的真正含义是什么?它还会给出负值的结果。
这是我完整的代码。
from __future__ import division
import numpy as np
from scipy.optimize import minimize
def f(x):
Y = ((x + 100) / 100)
return Y[0]
def apply_constraint(inputs):
return inputs[0] - inputs[0]
my_constraints = ({'type': 'eq', "fun": apply_constraint})
min_result = minimize(f, [2], method="SLSQP", options={
'disp': False}, bounds=[(-2, 101)], constraints=my_constraints)
print("Minima found at: X = {}, Y = {}".format(min_result.x, min_result.fun))
答案 0 :(得分:0)
您的约束函数不正确
inputs[0] - inputs[0]
始终为0,应为
def apply_constraint(inputs):
return inputs[0]
约束以type = 'eq'
或type = 'ineq'
两种方式之一起作用
约束函数将被评估并与0
对于相等约束,约束函数将被强制为= 0
对于不等式约束,约束函数将被强制为非负值,即>=0
在这种情况下,请使用上面的约束函数,并且type = 'ineq'
应该起作用