您正在查看顶级算法流程图。流程图中的某些单独步骤可能需要使用自己的详细流程图。然而,在强调简洁的公开论文中,许多细节经常被省略。可能根本不提供被认为是“旧帽子”的标准内部优化问题的详细信息。
总体思路是,优化算法可能需要解决一系列通常更简单的优化问题。在顶级算法中包含3甚至4级优化算法的情况并不少见,尽管其中一些是标准优化器的内部功能。
即使决定何时终止算法(在层次结构级别之一),也可能需要解决边优化问题。例如,可以解决一个非负约束线性最小二乘问题,以确定用于评估KKT最优评分的拉格朗日乘数,该KKT最优评分用于决定何时宣布最优。
如果优化问题是随机的或动态的,则可能还有其他层次的优化级别。
这是一个例子。顺序二次规划(SQP)。通过迭代求解Karush-Kuhn-Tucker最优性条件来处理初始优化问题,该优化条件从初始点开始,目标是问题的拉格朗日方程的二次逼近以及约束的线性化。解决了生成的二次程序(QP)。解决的QP具有信任区域约束,或者从当前迭代到QP的解决方案进行行搜索,而QP本身就是一个优化问题,以便找到下一个迭代。如果使用的是拟牛顿法,则必须解决优化问题才能确定对Lagrangian的Hessian的拟牛顿更新-通常这是使用诸如BFGS或SR1等封闭形式公式的封闭形式优化,但这可能是数值优化。然后解决新的QP,等等。如果QP不可行(包括开始),则解决优化问题以找到可行的点。同时,在QP求解器内部可能会调用一两个级别的内部优化问题。在每次迭代结束时,可以解决一个非负线性最小二乘问题,以确定最优分数。等等。
如果这是一个混合整数问题,那么作为高级算法的一部分,可以在每个分支节点上执行整个shebang。类似地,对于全局优化器-局部优化问题用于在全局最优解上产生一个上限,然后放松一些约束以产生一个下界优化问题。为了解决一个混合整数或全局优化问题,可能会解决成千上万甚至来自分支和边界的“简单”优化问题。
这应该开始给您一个想法。
编辑:响应我在回答后添加到问题中的鸡肉和鸡蛋问题:如果存在鸡肉和鸡蛋问题,那么它不是一个定义明确的实用算法。在我给出的示例中,没有鸡肉和鸡蛋。更高级别的算法步骤将调用已定义或已经存在的优化求解器。SQP迭代地调用QP解算器来解决子问题,但是QP解算器比原始问题解决了更简单的问题QP。如果存在更高级别的全局优化算法,则可以调用SQP求解器来求解局部非线性优化子问题,然后SQP求解器又调用QP求解器来求解QP子问题。没有小鸡和鸡蛋。
注意:优化机会“无处不在”。与普通的Joe或Jane相比,优化专家(例如开发优化算法的专家)更有可能看到这些优化机会,并将其视为此类机会。由于对算法的偏爱,他们很自然地会发现在较低级别的优化算法之外构建优化算法的机会。优化问题的制定和解决方案可作为其他(高级)优化算法的基础。
编辑2:响应OP刚刚添加的赏金请求。描述SQP非线性优化器SNOPT的论文https://web.stanford.edu/group/SOL/reports/snopt.pdf特别提到了QP求解器SQOPT,该文件已单独记录,用于解决SNOPT中的QP子问题。