我正在使用scipy.optimize模块来查找最小化输出的最佳输入权重。从我看到的例子中,我们用单侧方程定义约束;然后我们创建一个'不等式'类型的变量。我的问题是优化包如何知道我的约束中的变量之和是否需要小于1或大于1?
...
def constraint1(x):
return x[0]+x[1]+x[2]+x[3]-1
...
con1 = {'type': 'ineq', 'fun': constraint1}
链接到我在我的示例中使用的完整解决方案: http://apmonitor.com/che263/index.php/Main/PythonOptimization
谢谢。
答案 0 :(得分:14)
如果你引用https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/optimize.html并且scrool到约束最小化多变量标量函数(最小化),你可以找到
该算法允许处理受约束的最小化问题 形式:
其中不等式的格式为kode_kategori
。
因此,当您将约束定义为
时C_j(x) >= 0
并将约束的类型指定为
def constraint1(x):
return x[0]+x[1]+x[2]+x[3]-1
它会自动假定约束采用标准格式con1 = {'type': 'ineq', 'fun': constraint1}
,即x[0]+x[1]+x[2]+x[3]-1>=0