我用三个变量(w,V,m)解决(约束的)非线性最小化问题。给定w,(V,m)的最小化问题是(约束的)线性的。线性最小化问题是针对[w_0,w_1]中的w定义的。
我设置问题的方法是,给定w,我正在解决约束线性程序,然后我将w最小化为w,bounds = ((w_0, w_1),)
范围为w作为边界。当w的最小化搜索到它的边界之外时,即在没有定义线性程序的区域,我遇到了问题。
有没有办法限制搜索不超出提供的范围? 如果没有替代品?通过更严格的界限?如果传递一个超出边界值的值,使目标函数返回一个大值吗?
我很抱歉无法提供最小的工作示例。
这是一些伪代码:
from scipy.optimize import linprog,minimize
def objective(w):
A_ub,b_ub = constraints(w)
results = linprog(c,A_ub = A_ub,b_ub=b_ub)
return results.fun
bounds = ((w_0,w_1),)
x0 = (w_0+w_1)/2
minimize(objective,x0,bounds)
答案 0 :(得分:0)
可以将解决约束优化问题的方法分为两类:
因此,使用可行的方法对您的情况很自然。可悲的是,scipy的文档对于可用算法的这一特性有点不清楚。
我很确定,L-BFGS-B是这里的方式(因为你只需要绑定约束!)
答案 1 :(得分:0)
可能有用的是重新参数化/重新定义变量w
,以便它永远不会离开边界。如果x
介于-infinity和infinity之间,那么
w = a +(b-a)/(1 + exp(-x))
将在(a,b)区间内。
为了清楚起见,您应该将x
设置为minimize
函数中的优化参数,并将w
包含在此公式中。无论你得到什么x
,你都可以保证w
将在界限范围内。
这什么时候不好?当然,如果你认为你可能在a或b处有一个角点解决方案。除此之外,我认为它通常有效,但请报告回来看它是否适合你。