疑问:find_min_box_constrained是否会在边界处直接终止?
关于
find_min_box_constrained是否会在边界直接终止的解答 嘿,我来帮你梳理下这个问题~
先看你给出的调用代码和迭代输出:
你设置的盒约束是lb = {0,0,0,0}、ub = {2,2,2,2},用了L-BFGS搜索策略(最多100次迭代),还有目标函数变化停止策略(阈值1e-15,且开启了verbose模式),优化的目标函数是targetf,同时传入了它的导数。
从你的迭代输出能看到,迭代到第5次还在继续(输出被截断了),而且目标函数值一直在逐步减小——从初始的3786.68降到了294.481,这就说明这个函数并不会碰到边界就直接终止。
再给你拆解下它的行为逻辑:
find_min_box_constrained是带盒约束的优化函数,它的终止完全由你指定的停止策略决定,不是碰到边界就停。你用的objective_delta_stop_strategy(1e-15),意思是只有当相邻迭代间目标函数的变化量小于1e-15时,才会停止优化;同时你还设置了L-BFGS的最大迭代次数是100次,这也是一个终止条件。- 当优化过程中某个参数要超出你设定的上下界时,函数会把参数强行拉回可行域(比如参数要超过2就拉回2,低于0就拉回0),但这不会触发终止,它会继续基于这个可行的参数值,在盒约束范围内继续搜索更优的目标函数值,直到满足你设定的停止条件之一。
举个直观的例子:假设某次迭代中某个参数计算后变成了2.1,函数会把它修正为2,但接下来的迭代还是会围绕这个修正后的参数值继续调整其他参数,或者微调这个参数(当然不会超出2),尝试让目标函数再降一点,直到目标函数的变化小到你设定的阈值,或者迭代次数用完。
你的输出正好印证了这一点——迭代还在进行,目标函数还在下降,说明就算碰到了边界(如果有的话),它也没停下来,而是在继续优化。
内容的提问来源于stack exchange,提问作者bonifaz
相关产品推荐
相关产品推荐

