数值优化简介

news2024/11/18 1:45:23

数值优化这个名字来源于一本书,名为《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.coloradmin.cn/o/695976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Java高级语法】(二十二)运行时环境访问支持类:API知识总结分享,深入解析Runtime运行时环境访问支持类~

Java高级语法详解之运行时环境访问支持类 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 Runtime 类常用方法3.2 使用技巧 4️⃣ 应用场景5️⃣ 业务场景实战5.1 场景一:执行外部脚本5.2 场景二:动态加载类 🌾 总结 1️⃣ 概念 Java Runtime 类是…

去面试测试开发你必须要知道的基本知识(建议收藏)

目录 1.对测试开发的理解 2.为什么做测试而不是去做开发 3.如何处理矛盾 4.职业发展 5.你认为测试人员需要具备哪些素质。(你有哪些优点围绕这些来说) 6.你为什么能够胜任这个岗位 7.测试方法 黑盒测试 白盒测试 8.测试的阶段 9.测试的类型 …

SpringBoot - 集成Quartz框架之常用配置

Quartz是一款Java编写的开源任务调度框架,同时它也是Spring默认的任务调度框架。它的作用其实类似于Java中的Timer定时器以及JUC中的ScheduledExecutorService调度线程池,当然Quartz作为一个独立的任务调度框架无疑在这方面表现的更为出色,功…

四章:FTP详细介绍+winServer2008搭建ftp服务器+winServer2008开启端口

目录 一、FTP介绍 二、FTP服务器架设 三、FTP服务器连接验证 四、winServer2008开启端口 一、FTP介绍 FTP就是文件传输协议。用于互联网双向传输,控制文件下载空间在服务器复制文件从本地计算机或本地上传文件复制到服务器上的空间。 我们在工作中经常使用到FTP…

golang,OpenGL,计算机图形学(三)

代码仓库 https://github.com/phprao/go-graphic 颜色 光源照射到物体上,一部分颜色被吸收,另一部分无法吸收的被反射到人眼,于是呈现出了颜色。 当我们把光源的颜色与物体的颜色值相乘(而不是点乘),所…

【C语言初阶】带你轻松玩转所有常用操作符最终篇——下标引用、函数调用和结构体成员,表达式求值

君兮_的个人主页 勤时当勉励 岁月不待人 C/C 游戏开发 Hello,这里是君兮_,前几天非常忙没空更新,现在终于闲下来了,这是今天爆肝更新的第二篇,也是我们【C语言初阶】带你轻松玩转所有常用操作符的最后一篇,废话不多说…

nestjs post请求提交数据量太大会报错 [ExceptionsHandler] request entity too large

背景 在传给后端接口的数据,是一个超过1.5mb的json字符串,通过nest filter的时候直接被拦截掉了,返回【 请求体太长】的错误。 还没有到达contraller,就直接被框架拦截掉了, import { ExceptionFilter, Catch, Argu…

vue——实现表格的拖拽排序功能——技能提升

最近在写后台管理系统时,遇到一个需求,就是要实现表格的排序。 就是拖动某一行数据,放在指定位置,然后保存的时候根据最终的排序来处理生产单顺序字段。 参考大神的链接:vue-实现拖拽排序功能:https://ju…

mac苹果电脑,怎么批量修改文件名称

mac苹果电脑,如何批量修改文件名称?在苹果电脑上对文件名称进行修改是一件非常简单的操作,相信任何mac电脑用户都知道怎么操作,只需要选中要修改名称的文件,然后点击鼠标右键,然后会弹出一个菜单&#xff0…

layui代码记录

// 归档弹框jsguiDangRemarkInfo : function(activiti, buttonConf, call) {layui.use([layer, form, laydate], function () {var layer layui.layer;var form layui.form;var laydate layui.laydate;layer.open({type: 1,title: 归档备注信息,area: [350px, 300px],conten…

Redis 6.2.4集群搭建

1. 说明 这里使用的是redis的cluster集权模式,没有用哨兵模式(哨兵模式依赖哨兵节点,哨兵节点一旦挂掉就不再高可用了,因此没有采用)。 由于Redis Cluster至少需要6个节点,因此,这里咱们采用的…

【运维】Linux系统 AnolisOS [CentOs替代品]

【运维】AnolisOS 安装 CentOs替代品 下载 - OpenAnolis 龙蜥操作系统开源社区 Index of /anolis/ (aliyun.com)

(编辑器)HBuilderX怎么自动格式化代码

(编辑器)HBuilderX怎么自动格式化代码 解决参考:https://blog.csdn.net/G806218/article/details/127833356

CSDN 个性化推荐的数据治理

目录 1. 背景2. 数据治理2.1 从内容层面提升数据质量2.2 从用户层面提升数据质量2.3 增加特定数据的曝光2.4 保证数据的正确性与实效性 3. 总结 相关阅读 CSDN 个性化推荐系统的设计和演进如何支持研发对CSDN个性化推荐系统重构 1. 背景 CSDN 的个性化推荐流在主站中是一个很…

用UDP套接字实现客户端和服务端通信

IP地址和port端口号 IP地址 数据有IP(公网)标识一台唯一的主机。 port端口号 为了更好的标识一台主机上服务进程的唯一性,我们采用端口号port,标识服务器进程,客户端进程的唯一性! ip端口号 IP地址(主机全网唯一性) 该主机上的端…

一年省七位数,得物自建HFDS在 Flink Checkpoint 场景下的应用实践

1 背景 随着Flink实例的迁移下云以及新增需求接入,自建Flink平台规模逐渐壮大,当前总计已超4万核运行在自建的K8S集群中,然而 Flink 任务数的增加,特别是大状态任务,每次Checkpoint 时会产生脉冲式带宽占用&#xff0…

统计项目代码行数工具cloc

Ubuntu用户 使用cloc在ubuntu内统计代码行数 安装cloc工具 sudo apt-get install cloc进入需要统计的目录内,然后执行 cloc .然后就会显示文件目录中的文件数(files)、空白行数(blank)、注释行数(comment)和代码行数(code)。 Windows 用户 也是使用cloc工具 …

leecode-下一排列

题目 题目 分析 妈呀,其实我直接调用函数,一行代码就通过了hhh,不过这种取巧的方式不可取,还是得老老实实的写。 首先需要明白什么叫下一排列? 比如输入: 1 5 8 4 7 6 5 3 1 答案就是: 1 5 …

什么是楼宇卫生间智慧厕所系统

楼宇卫生间智慧厕所系统是专为写字楼、办公楼、商场、集团大厦、工厂等应用场景所设计的解决方案。它利用全自动采集和监控智能化、无线数据传输功能,通过云平台管理软件和手机端应用,实现了公厕的智能化管理和使用者的便利。 随着城市化进程的加速&…

[Json]控制返回数据是否包含某个属性

控制返回数据是否包含某个属性 在我们返回给前端的Json格式的数据时,通常我们会定义一个类,里面定义几个成员变量用来定义返回给前端的具体内容,例如: package cn.tedu.csmall.commons.web;import io.swagger.annotations.ApiMo…