用于约束优化的软件包?


21

我正在寻找解决约束优化问题的方法,在该方法中我知道某些变量(特别是盒装约束)的界限。

argminuf(u,x)

服从

c(u,x)=0
ad(u,x)b

其中u是设计变量的向量,x是状态变量的向量,c(u,x)是等式约束(通常是PDE)。上下约束ab可以在空间上变化。

哪些软件包可以处理这种形式的系统?


1
编辑后的版本看起来不像盒子约束的优化问题。盒约束优化问题将以aub作为约束。是u应该是的函数xcu中是线性的u吗?如果不是,它是否可以二次微分?是f凸在uu中是否可以二次微分u?最后,argminu表示u中达到f最小值的一组点f。您是说minu吗?
Geoff Oxberry

d(u,x)=u是一种特殊情况,但是这种更通用的形式实际上在实践中很常见。如果您的方法只能直接处理上的约束,则始终可以引入额外的变量。通常,我们对达到最小值的值比对的最小值更感兴趣。肖恩添加了[pde]标签,因此您可能会得到一些规律性。他没有说明系统是否是双曲线的,所以我们不要假设。我们不假定是凸的,因为通常不是。uuff
杰德·布朗

涉及或正则化是很常见的,因此我们不应该假设两个导数。fL1W1,1
杰德·布朗

@JedBrown:讲得通;看到提到的“盒子约束”而没有一个明确的盒子约束令人困惑。对于您要谈论的问题类型(设计问题,控制问题),绝对会更有趣,但是优化问题通常使用表示法进行说明,而其解决方案集使用表示法进行描述。uminargmin
Geoff Oxberry 2012年

指定对PDE建模时使用的语言/环境可能会很有用。它可能会限制优化器的选择。
多米尼克2012年

Answers:


18

我决定根据一些评论从根本上编辑我的答案。

我没有用过TAO。通过仔细阅读文档,TAO似乎可以处理约束优化问题(不包括仅盒子约束的特殊情况)的唯一方法是使用Karush-Kuhn-Tucker(KKT)条件将问题转换为变分不等式,即在约束限定条件下是必需的(我通常看到的类型是Slater点条件),在物镜的凸度和约束条件下(通常,类型1凸度)是足够的。如果f如果是非凸的,则使用KKT条件的变分不等式公式不等于原始的优化问题,因此严格来说,如果您想针对该优化问题进行全局最优,则不应将其表示为变分不等式。无论如何,要为PDE约束的优化找到一个全局最优值是很困难的(请参见下文),因此可以忽略此详细信息。鉴于沃尔夫冈所说的话,我会对使用TAO持怀疑态度。我已经对此表示怀疑,因为它没有实现将非线性程序(NLP)求解为NLP的方法,而不是变分不等式。

我不是PDE约束优化的专家;矿山的同事和同事处理ODE约束的优化问题。我知道对于侵入式公式,Larry Biegler(和其他人)将使用搭配方法来离散化PDE,并使它成为非常大,稀疏的NLP,然后他将使用内点方法进行求解。要真正解决全局最优问题,您还需要生成凸松弛,但据我所知,未采用这种方法,因为PDE约束的优化问题会导致NLP如此之大,以至于很难解决它们。全局最优。我之所以提及这些细节,仅是因为问题的制定严重影响了求解程序包的选择。对于非侵入式配方,重复的PDE可为优化算法求解屈服梯度信息。

一些研究ODE约束的优化问题的人使用类似的方法,即使用搭配和数值方法离散化问题,然后放宽所得的NLP来产生用于全局优化算法的凸公式。ODE约束优化的另一种方法是放松问题,然后离散化ODE,这是我实验室中采用的方法。有可能放宽某些受PDE约束的优化问题,但是我不知道在该问题上有任何现成的工作。(这是我实验室中一项潜在的项目。)

最终,重要的不是原始PDE的可区分性,而是决策变量离散化的可区分性。

如果离散问题相对于决策变量是两次可微的,则以下软件包将计算局部解:

  • IPOPT是由IBM的AndreasWächter开发的开源内部点求解器。这是一个非常高质量的代码。作为内点求解器,它对于具有大型稀疏Jacobian矩阵的目标函数更好,并且对于PDE约束优化非常有用
  • SNOPT是一种商用顺序二次编程求解器,是另一种高质量代码。它对于具有较小且密集的Jacobian矩阵的目标函数更好,因此我不希望它对PDE约束的优化有用,但是您可以尝试一下。
  • NLopt是由麻省理工学院的史蒂文·约翰逊(Steven Johnson)编写的小型开源代码,其中包含许多非线性优化算法的基本实现。所有算法都应足以解决约束约束的问题。
  • fmincon 在Matlab中实现了用于非线性优化的多种算法(包括内部点和顺序二次编程)
  • GAMSAMPL都是用于建模优化问题的商业建模语言,并且包含与大量非线性规划求解器的接口。我知道GAMS有一个可用于较小问题的试用版,问题实例也可以提交给NEOS服务器以寻求解决方案。

但是,离散化可能仅与决策变量有关一次,在这种情况下,在计算局部解时应使用投影的最速下降法或其他一阶优化方法。由于许多研究都集中在可以使用二阶方法的问题上(并且当您可以使用它们时,它们的优越收敛性使它们成为更好的选择),因此,我找不到许多并非解决方案的最速降实现解决作业问题。在GNU科学图书馆有一个实现,但它只是用于演示目的。您可能需要编写自己的实现。

如果问题仅在决策变量方面是连续的,则可以使用直接方法在本地解决。Kolda,Lewis和Torczon对直接方法进行了出色的调查。这些方法中最广为人知的是Nelder-Mead单纯形算法。不能保证在多个维度上都收敛到局部最小值,但是无论如何它已经发现了相当大的实际用途。

软件包的选择实际上取决于您要使用的语言来解决问题,如果解决受限约束的问题只是您要实现的算法的一部分(或者如果这是算法中的唯一步骤,在这种情况下,建模语言变得更适合生产代码),问题的类型和大小以及是否需要并行处理。


4

我们尝试过TAO,但发现它对于不平等约束问题不是很有用。至少从2003年开始,它基本上只处于维护模式,除了跟踪其所基于的PETSc中的更改的更新之外,没有任何真正的新功能。


3

另一种选择是OPT ++。它使用高效的非线性内点求解器支持线性和非线性约束,提供对函数精度的控制(如果需要数值微分),对步长的控制等。我通常会优化大型隐式函数(例如FEM),其中这些类型的控件可能很有用。


您能否详细说明为什么OPT ++是一个很好的软件包?您(或您的同事)对此有任何经验吗?
Geoff Oxberry 2012年

明确地说,我没有理由说OPT ++优于您先前列出的那些,因为我对这些没有任何经验(尽管我将其中一些标记为要签出)。但是我确实有OPT ++的经验,并且发现它适合我的需求。它使用高效的非线性内点求解器支持线性和非线性约束,提供对函数精度的控制(如果需要数值微分),对步长的控制等。我通常会优化大型隐式函数(例如FEM),其中这些类型的控件可能很有用。
巴伦(Barron)2012年

2
@Barron:首先,您应该将其放在答案中。:)
JM 2012年

2

如果将问题表述为互补问题,则可以使用TAO(高级优化工具包)。TAO中的某些方法,例如缩减空间方法(主动集方法的一种变体),目前可以作为PETSc(SNESVI)中SNES的一部分使用。


1

所述MINUTE的模块CERNLIB(长因为移植到ROOT)使用所输入的空间变换来呈现框约束到它们运行空间[,+],因此可以无需特殊情况来处理(在一些成本速度,当然)。

我认为MINUTE不能很好地满足您的需求,但是如果您不得不自己编写部分或全部代码,则转换可能会发生。


这种转变看起来很讨厌。难怪它伴随着几个段落。
Geoff Oxberry 2012年

1

正如@Geoff Oxberry指出的那样,有几个软件包可以让您找到本地解决方案。如果您希望能够针对同一问题比较这些不同的NLP求解器,则可以使用RobOptim

尽管RobOptim最初是在考虑机器人优化问题的情况下开发的,但它适用于任何非线性优化问题。它提供了带有多个NLP求解器(例如Ipopt,NAG)的插件的简单C ++接口。如果您不能提供梯度,则可以自动进行有限差分计算。

它是开源的,因此您可以在GitHub上查看源代码: https //github.com/roboptim/

注意:我是该项目的开发人员之一。


1
应该指出,其他答案描述的是求解器,而不是框架。找到一个可接受的框架(驱动程序)要比一个好的求解器容易得多,
Deer Hunter

@DeerHunter当您正在寻找求解器来解决给定的问题时,通常很难先验地知道哪个求解器将计算出最佳解决方案和/或最快。您在谈论一种“好的求解器”,但这实际上取决于您要解决的问题:没有一个“最佳的整体”求解器。此外,求解器API通常会有很大的不同,因此使用一个好的框架可以使您轻松地从一个求解器切换到另一个求解器确实很有帮助。问题是关于“用于约束优化的软件包”,框架也属于此类。
BenC

1

这是受PDE约束的优化程序包的部分列表。

Dolfin Adjoint是FEniCS FEM的一部分:

http://dolfin-adjoint.org/

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约束优化问题的示例:

http://www.mcs.anl.gov/petsc/petsc-3.5/docs/tao_manual.pdf


1
欢迎来到SciComp.SE!仅提供一个链接(可能有用)并不是一个很好的答案。请参阅meta.stackexchange.com/questions/8231。您能否对此进行扩展(计算语言,可以处理哪种约束,实现哪些方法等)?
克里斯蒂安·克拉森2014年

我同意@ChristianClason。用于PDE约束的优化软件的求解器已经有了实质性的发展。但是,此答案基本上没有提供有关那些程序包实际实现的算法的背景知识。
Geoff Oxberry,2015年

0

APM MATLAB和APM的Python包可以解决混合整数微分代数方程系统的大规模(100,000变量)。该软件可作为用于商业或学术用途的网络服务使用。如果要解决PDE系统,则可以离散化一次以将其转换为DAE或ODE形式,然后将其放入APMonitor建模语言中。建模语言使用APOPT,BPOPT,IPOPT,SNOPT和MINOS求解器。


1
请在涉及您的软件的此以及以后的答案中公开您作为APMonitor开发人员的从属关系。有关我们的披露政策的详细信息,请参见常见问题解答。
Geoff Oxberry

杰夫,谢谢你的提示。我从2004年在德克萨斯大学奥斯汀分校的研究生开始从事APMonitor平台的工作。现在,我们在杨百翰大学的研究小组中使用了它,以进行生物,化学,航空航天和其他应用的过程控制和优化(apm.byu.edu/prism)。我免费提供给商业或学术用户。
约翰·海登格伦
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.