我正在寻找解决约束优化问题的方法,在该方法中我知道某些变量(特别是盒装约束)的界限。
服从
其中是设计变量的向量,是状态变量的向量,是等式约束(通常是PDE)。上下约束和可以在空间上变化。
哪些软件包可以处理这种形式的系统?
我正在寻找解决约束优化问题的方法,在该方法中我知道某些变量(特别是盒装约束)的界限。
服从
其中是设计变量的向量,是状态变量的向量,是等式约束(通常是PDE)。上下约束和可以在空间上变化。
哪些软件包可以处理这种形式的系统?
Answers:
我决定根据一些评论从根本上编辑我的答案。
我没有用过TAO。通过仔细阅读文档,TAO似乎可以处理约束优化问题(不包括仅盒子约束的特殊情况)的唯一方法是使用Karush-Kuhn-Tucker(KKT)条件将问题转换为变分不等式,即在约束限定条件下是必需的(我通常看到的类型是Slater点条件),在物镜的凸度和约束条件下(通常,类型1凸度)是足够的。如果如果是非凸的,则使用KKT条件的变分不等式公式不等于原始的优化问题,因此严格来说,如果您想针对该优化问题进行全局最优,则不应将其表示为变分不等式。无论如何,要为PDE约束的优化找到一个全局最优值是很困难的(请参见下文),因此可以忽略此详细信息。鉴于沃尔夫冈所说的话,我会对使用TAO持怀疑态度。我已经对此表示怀疑,因为它没有实现将非线性程序(NLP)求解为NLP的方法,而不是变分不等式。
我不是PDE约束优化的专家;矿山的同事和同事处理ODE约束的优化问题。我知道对于侵入式公式,Larry Biegler(和其他人)将使用搭配方法来离散化PDE,并使它成为非常大,稀疏的NLP,然后他将使用内点方法进行求解。要真正解决全局最优问题,您还需要生成凸松弛,但据我所知,未采用这种方法,因为PDE约束的优化问题会导致NLP如此之大,以至于很难解决它们。全局最优。我之所以提及这些细节,仅是因为问题的制定严重影响了求解程序包的选择。对于非侵入式配方,重复的PDE可为优化算法求解屈服梯度信息。
一些研究ODE约束的优化问题的人使用类似的方法,即使用搭配和数值方法离散化问题,然后放宽所得的NLP来产生用于全局优化算法的凸公式。ODE约束优化的另一种方法是放松问题,然后离散化ODE,这是我实验室中采用的方法。有可能放宽某些受PDE约束的优化问题,但是我不知道在该问题上有任何现成的工作。(这是我实验室中一项潜在的项目。)
最终,重要的不是原始PDE的可区分性,而是决策变量离散化的可区分性。
如果离散问题相对于决策变量是两次可微的,则以下软件包将计算局部解:
fmincon
在Matlab中实现了用于非线性优化的多种算法(包括内部点和顺序二次编程)但是,离散化可能仅与决策变量有关一次,在这种情况下,在计算局部解时应使用投影的最速下降法或其他一阶优化方法。由于许多研究都集中在可以使用二阶方法的问题上(并且当您可以使用它们时,它们的优越收敛性使它们成为更好的选择),因此,我找不到许多并非解决方案的最速降实现解决作业问题。在GNU科学图书馆有一个实现,但它只是用于演示目的。您可能需要编写自己的实现。
如果问题仅在决策变量方面是连续的,则可以使用直接方法在本地解决。Kolda,Lewis和Torczon对直接方法进行了出色的调查。这些方法中最广为人知的是Nelder-Mead单纯形算法。不能保证在多个维度上都收敛到局部最小值,但是无论如何它已经发现了相当大的实际用途。
软件包的选择实际上取决于您要使用的语言来解决问题,如果解决受限约束的问题只是您要实现的算法的一部分(或者如果这是算法中的唯一步骤,在这种情况下,建模语言变得更适合生产代码),问题的类型和大小以及是否需要并行处理。
另一种选择是OPT ++。它使用高效的非线性内点求解器支持线性和非线性约束,提供对函数精度的控制(如果需要数值微分),对步长的控制等。我通常会优化大型隐式函数(例如FEM),其中这些类型的控件可能很有用。
正如@Geoff Oxberry指出的那样,有几个软件包可以让您找到本地解决方案。如果您希望能够针对同一问题比较这些不同的NLP求解器,则可以使用RobOptim。
尽管RobOptim最初是在考虑机器人优化问题的情况下开发的,但它适用于任何非线性优化问题。它提供了带有多个NLP求解器(例如Ipopt,NAG)的插件的简单C ++接口。如果您不能提供梯度,则可以自动进行有限差分计算。
它是开源的,因此您可以在GitHub上查看源代码: https //github.com/roboptim/
注意:我是该项目的开发人员之一。
这是受PDE约束的优化程序包的部分列表。
Dolfin Adjoint是FEniCS FEM的一部分:
ROL,MOOCHO,Sundance是Trilinos的一部分:
https://github.com/trilinos/trilinos/tree/master/packages/rol/
https://github.com/trilinos/trilinos/tree/master/packages/Sundance/
http://trilinos.org/packages/moocho/
用于PDE约束优化的PYOMO示例:
https://software.sandia.gov/trac/pyomo/browser/pyomo/trunk/examples/dae
TAO手册提供了解决PDE约束优化问题的示例:
该APM MATLAB和APM的Python包可以解决混合整数微分代数方程系统的大规模(100,000变量)。该软件可作为用于商业或学术用途的网络服务使用。如果要解决PDE系统,则可以离散化一次以将其转换为DAE或ODE形式,然后将其放入APMonitor建模语言中。建模语言使用APOPT,BPOPT,IPOPT,SNOPT和MINOS求解器。