了解scipy优化中的约束

时间:2018-09-05 16:21:26

标签: python scipy

我正在尝试了解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))

1 个答案:

答案 0 :(得分:0)

您的约束函数不正确

inputs[0] - inputs[0]始终为0,应为

def apply_constraint(inputs):
    return inputs[0]

约束以type = 'eq'type = 'ineq'两种方式之一起作用

约束函数将被评估并与0

进行比较

对于相等约束,约束函数将被强制为= 0

对于不等式约束,约束函数将被强制为非负值,即>=0

在这种情况下,请使用上面的约束函数,并且type = 'ineq'应该起作用