我在解决一个三变量(w,V,m)的非线性最小化问题。给定w,极小化问题对于(V,m)是(约束)线性的。在[wu0,wu1]中定义了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)
可能有用的方法是重新参数化/重新定义变量
w
,这样它就不会离开边界。如果x
介于-无穷大和无穷大之间,那么w=a+(b-a)/(1+exp(-x))
将在(a,b)时间间隔内。在
为了清楚起见,您应该将
x
设置为要在minimize
函数中进行优化的参数,并将w
包含在这个公式中。无论您得到什么x
,您都可以保证w
将在范围内。在什么时候这是个坏主意?当然,如果你认为你可能有一个角落的解决方案,在a或b。除此之外,我认为它通常是有效的,但请报告回来看看它是否对你有效。在
我们可以将求解约束优化问题的方法分为两类:
所以使用一种可行的方法是很自然的。可悲的是,scipy的文档对于可用算法的这一特性有点不清楚。在
我很确定,L-BFGS-B就是这样(因为您只需要绑定约束!)在
相关问题 更多 >
编程相关推荐