目前,我正在使用原始对偶方法来最小化具有简单线性约束的二次问题(具体地,x> = 0)。对于终止条件,我目前正在使用该标准:即错误“e”项必须小于阈值。
然而,计算“e”项是相对昂贵的,因为我需要评估完整的二次函数。是否可以使用更简单/更快的终止条件,例如以下条件之一:
1)如果x中所有变化的总和低于某个阈值,则终止;要么, 2)如果x的最大变化低于某个阈值,则终止?
直觉上,这对我来说是有意义的,但我发现我的直觉在这些最小化问题的一半时间是错误的,所以我不确定我的直觉在理论上是否合理......
答案 0 :(得分:1)
For the termination condition, I'm currently using the standard: ie error "e" term must be less than a threshold value.
你不是在假设,这个目标可以推到0吗?你如何确定这个阈值a-priori?
1) if the sum of all the changes in x is below a certain threshold, then terminate
2) if the max change in x is below a certain threshold, then terminate
您应该查看Karush–Kuhn–Tucker conditions(解决方案的一阶必要条件)
备注:您的问题是盒式约束QP ,实际上比不等式约束的QP 更简单! 这很重要!
现在这可能会影响一些重要的理论工作,然后是一些实施。考虑使用已有的工具!
看看盒子约束的QP求解器(凸或非凸;取决于你的问题)。这些应该是可用的,将为您省去麻烦!
如果给它渐变(与数值微分相对),你甚至可以使用可能已经难以击败的几乎所有可用的LBFGS-B。虽然它更通用,但它通常非常强大! (在python中,使用scipy,使用这将是几行)
L-BFGS-B是用于约束约束优化的有限存储器准牛顿代码,即对于唯一约束形式为l< = x< = u。
的问题。
也可能有其他已有的替代品。 Trust Region Reflective和co。
(旁注:我想知道如你所描述的那样,与你的原始对偶(IPM?)算法中的其他操作相比,评估成本是多么昂贵)