数值优化简介

news/2024/10/23 9:23:08/

数值优化这个名字来源于一本书,名为《Numerical Optimization》。

Numerical Optimization这两个单词传递了两个知识领域的概念:
Optimization指的是数学概念上的优化,即求最优解,也可以理解为求函数的最小值的解;
Numerical指的是数值计算,即在计算机上通过编程实现数学公式计算;
因此数值优化主要研究对象是怎么编写计算机程序求解数学领域的最优化问题,特别是计算工程领域的最优方案。

数值优化首先是个数学优化问题,可以简单理解为下面的数学公式

x^{*} = \arg \textit{min} f(x) , x\subset R^{n}

即求函数 f 取得最小值时 x 的取值,其中 x 是一个 n 维向量,f 函数可能是连续的,也可能是离散的,离散问题要比连续问题复杂得多。

在此基础上,x 可能还需要满足一个或多个约束条件,约束条件可能是等式,也可能是不等式。根据约束条件的不同,最小值求解过程及复杂的也不同。相对而言,无约束最简单,等式约束居中,不等式约束最难。

我们可以通过两个简单的例子来认识数学和工程领域的最优解问题:

例1:现有m个仓库存储了同一种原材料,仓储量分别为a_{1},a_{2},a_{3}...a_{m},他们位于地图上不同位置,同时地图上不同位置的n个工厂需要使用此种原材料,其需求量分别为b_{1},b_{2},b_{3}...b_{n},每吨原材料在仓库和工厂之间的运输成本为c_{ij},即第i个仓库到第j个工厂之间的运输成本。求各仓库到各工厂间的原材料运输量x_{ij},使得总运输成本\sum_{i}\sum_{j}^{} c_{ij} * x_{ij}最小。
需要注意这个问题包含了三个隐含的约束条件,分别是:

x_{ij} \geq 0
\sum_{i}x_{ij} \geq b_{j}
\sum_{j}x_{ij} \leq a_{i}

例2:在机器学习的有监督学习中,我们给定一组数据 \left ( x_{i}, y_{i} \right )x_{i} 为样本特征向量,y_{i} 为样本标签值,对于模型 f(x_{i}, \omega ), \omega \in \Omega,求损失函数  \sum_{i=1}^{N}L(y_{i}, f(x_{i}, \omega )) 值最小时 \omega 的取值。

例1是一个有限定条件的求最优解数学问题,例2是一个无限定条件的最优解问题。现时世界中会遇到各种各样的工程或理论难题,从物理到化学,从宏观到微观,从生命到宇宙,我们需要做的就是把这些问题抽象为数学上的求最优解问题,然后借助计算机,通过数值计算的方法来求这个数学上的最优解。

数值计算作为计算机和数学的强交叉领域,以数学理论为基础,在尽可能最大发挥计算机性能的方向上,针对不同的工程问题,构造合适的数学模型,设计相应优化算法,或调用优化算法软件报进行求解。

常见的建模方法

实例目标函数设计约束设计
回归分析最小二乘
最大似然估计
正则化
等价转换
逻辑回归最大似然估计
正则化
支持向量机损失函数(最小距离)等价转换(最小距离)
概率图模型最大似然估计
正则化
损失函数(逆矩阵)
问题本身性质(正定性)
相位恢复最小二乘,松弛松弛(相位提升)
主成分分析损失函数(投影方差)问题本身性质(正交性)
矩阵分离问题正则化(稀疏,低秩)
松弛(凸松弛)
问题本身性质(重构)
字典学习最小二乘
正则化
消除解的不唯一性
K-均值聚类损失函数(组内距离平方和)问题本身性质,等价转换
全变差模型损失函数(保真项)
正则化
小波模型技巧同全变差模型,区别为模型是在小波基下考虑的
强化学习损失函数问题本身性质(MDP)
松弛(神经网络近似)

常见优化算法

无约束优化算法

梯度下降法

Barzilai-Borwein 方法

次梯度算法

经典牛顿法

修正牛顿法

非精确牛顿法

共轭梯度法

拟牛顿法

信赖域算法

最小二乘法

高斯牛顿法

Levenberg-Marquardt 方法

模式搜索法

Rosenbrock方法

单纯形搜索法

Powell法

有约束优化算法

罚函数法

增广拉格朗日函数法

线性规划内点法

Zoutendijk 可行方向法

Topkis-Veinott 可行方向法

Rosen 梯度投影法

约束优化梯度投影方法

既约梯度法

Frank唱Wolfe 方法

Lagrange 方法

起作用集方法

Lemke 方法

路径跟踪法

复合优化算法

近似点梯度法

Nesterov加速算法

近似点算法

分块坐标下降法

对偶算法

交替方向乘子法

随机梯度下降算法

分支定界法

割平面法

0-1规划的隐数法

动态规划算法

序列二次规划方法

常见软件包

G2O

G2O(General Graph Optimization)是一个开源 C++ 框架,用于优化基于图的非线性误差函数。 g2o 被设计为可以轻松扩展到广泛的问题,并且通常可以在几行代码中指定一个新问题。 当前的实现为 SLAM 和 BA 的多种变体提供了解决方案。

SDPT3

这个开源软件包的基本代码是用 MATLAB 来写的,但是关键 的子程序是用 FORTRAN 和 C 语言通过 MEX 文件来完成的。它可以 求解锥规划问题,其中锥可以是半定矩阵锥、二次锥和非负象限中的 一个或者多个的乘积.这个软件主要实现的算法是一种原始 – 对偶内 点法。

MOSEK

这个商业软件包可以求解线性规划、二次锥规划、半定规划、 二次规划等凸优化问题,以及混合整数线性规划和混合整数二次规划 等。它的重点是求解大规模稀疏问题,尤其在求解线性规划、二次锥规划 和半定规划的内点法设计上做得非常有效。除了内点法之外,MOSEK 还实现了线性规划问题的单纯形算法,特殊网络结构问题的网络单纯 形算法以及针对混合整数规划问题的算法。它提供 C, C#, Java, Python, MATLAB 和 R 等接口。

CPLEX

这个商业软件可以求解整数规划问题,非常大规模的线性规 划问题(使用单纯形方法或者内点法),凸和非凸二次规划问题,二次 锥规划问题。它提供 C++, C#, Java, Microsoft Excel 和 MATLAB 接 口,并且提供一个独立的交互式优化器可执行文件,用于调试和其他 目的。

Gurobi

这个商业软件可以求解线性规划(采用单纯形法和并行的内 点法),二次规划(采用单纯形法和内点法),二次约束规划,混合整 数线性规划,混合整数二次规划,混合整数二次约束规划。它提供 C, C++, Java, .NET, Python, MATLAB 和 R 等接口。

IPOPT

这个开源软件可以求解大规模非线性规划问题,主要实现了原 始 – 对偶内点法,并使用滤波(filter)方法代替线搜索。IPOPT 主要 使用 C++ 语言编写,并提供 C, C++, FORTRAN, Java, MATLAB 和 R 等接口。

Knitro

它是用来求解大规模非线性优化问题的商业软件.这个软件提供了四种不同的优化方法,两种内点型方法和两种积极集(active set) 方法,可以用来求解一般非凸非线性规划问题,非线性方程组,线性 规划,二次(线性)约束二次规划问题,线性(非线性)最小二乘问 题,混合整数规划问题以及无导数优化问题,等等。Knitro 支持的编 程语言有 C, FORTRAN, C++, C#, Java, MATLAB, R, Python 等,以及 模型语言 AMPL,AIMMS,GAMS 和 MPL 等。因其具有大量的用户 友善的选项以及自动调试器,全局优化的并行多重启动策略,导数逼 近和检查以及内部预分解器,在实际中被广泛采用。

SDPNAL,SDPNAL+,SSNSDP

处理半定规划问题

OptM,Manopt,ARNT

处理流形优化

常见的优化模型语言

模型语言的发展开始于 19 世纪 70 年代后期,其主要动因是计算机的 出现。在优化模型语言中,优化模型可以写成和数学表达式很类似的方式, 以此给用户带来更便捷的服务.模型的表达式形式是与求解器无关的,不同 的求解器需要用优化模型语言将给定的模型和数据转为其求解的标准形式, 然后再对其进行求解。这类工具有三个优点:一是将容易出错的转化步骤交 给计算机完成,降低错误率;二是在模型和算法之间建立了一个清晰的界 限;三是对于困难的问题,可以尝试不用的求解器,得到更好的结果。

CVX

CVX 是一个以 MATLAB 为基础的优化模型语言,用来求解凸优化问 题.它允许将优化问题的目标函数以及约束用 MATLAB 语法来写。

AMPL

AMPL(a mathematical programming language)是用来描述高复杂 度的大规模优化问题的模型语言.几十个求解器支持 AMPL,包含开源软件 和商业软件,例如 CBC, CPLEX, FortMP, Gurobi, MINOS, IPOPT, SNOPT, Knitro 和 LGO 等,因此可以支持一大类问题的求解.它的一个优点是其语 法与数学表达式非常类似,因此可对优化问题进行非常简洁并且可读的定 义。

YALMIP

YALMIP是一个matlab下的工具箱,支持调用多个solver,例如 cplex, gurobi等。其最大特色在于集成许多外部的最优化求解器,形成一种统一的建模求解语言,提供了Matlab的调用API,减少学习者学习成本。Yalmip常用来解决 linear programming, integer programming等规划问题。


http://www.ppmy.cn/news/625386.html

相关文章

游戏专用Win10 64位 竞技超棒专业版

游戏专用Win10 64位 专业版 是小编专为游戏玩家准备的Win10镜像文件,系统经过优化,启动服务经过精心筛选,保证了系统的优化和稳定,这款系统集成了大家常见的驱动软件,在追求速度的基础上充分保留了原有的性能和兼容性&…

合金重组 Metal Mind V1.0.127最新中文学习版 单机游戏 游戏下载 免安装【388M】

“机器会思考吗?”(Can Machines Think?)——阿兰图灵 机器人法律 ● 第一法则 机器人不得伤害人类,或坐视人类受到伤害;● 第二法则 机器人必须服从人类命令,除非命令与第一法则发生冲突;●…

NTP服务设置开机自启启动失败

文章目录 前言一、NTP服务设置开机自启启动失败原因二、解决办法 前言 Linux服务器设置了ntpd开机自启动,重启服务器ntpd却没有自启动 一、NTP服务设置开机自启启动失败原因 原因:chrony服务与NTP服务冲突导致开机启动未生效 二、解决办法 关闭chrony服务…

字节跳动云原生大数据平台运维管理实践

云原生大数据是大数据平台新一代架构和运行形态。随着字节跳动内部业务的快速增长,传统大数据运维平台的劣势开始逐渐暴露,如组件繁多,安装运维复杂,与底层环境过度耦合;对业务方来说缺少开箱即用的日志、监控、告警功…

索爱SE8头戴蓝牙耳机,带上它外面的世界与我无关

办公室里,有人喜欢戴上耳机,用音乐隔绝外界干扰;跑步时,也有人为了缓解沉闷的枯燥感,戴上耳机聆听这个世界……稍加留意就会发现,耳机在生活中与我们密不可分,它总能给我们带来些许轻松感。 不…

在windows11安装VMware ubuntu

在win11安装虚拟机(win11VMware16ubuntu18.04),遇到的一些情况进行记录: 1.安装VMware 下载 VMware Workstation Pro 2.下载ubuntu 可以在国内镜像源下载,如阿里云: Index of /oldubuntu-releases/releas…

springboot 合入elasticsearch测试

添加依赖 <!-- es --><dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.2.0</version></dependency>配置类 import org.apache.htt…

Linux_CentOS_7.9修改更新默认时区

前言&#xff1a;近期一直在频繁部署虚拟机做系统测试发现Linux默认时区未做更改&#xff0c;这里做个记录留作参考。 查看服务器时区&#xff08;默认为纽约时间&#xff09; [rootorcl3 ~]# timedatectl 系统默认安装的所有时区&#xff0c;找到我们需要的时区 [rootor…