当前位置: 首页 > news >正文

数学建模:最优化问题及其求解概述

数学建模:最优化问题及其求解概述

  • 最优化问题
    • 定义
    • 分类
      • 离散优化问题
      • 连续优化问题
    • 求解

此博客围绕运筹学以及最优化理论的相关知识,通俗易懂地介绍了最优化问题的定义、分类以及求解算法。

最优化问题

定义

数学优化(Mathematical Optimization)问题,也叫最优化问题,属于运筹学研究的主要内容,它是指在一定约束条件下,求解一个目标函数的最大值(或最小值)问题。这种问题在生活中很常见,例如如何利用有限的资源,实现最大的收益。下面给出最优化问题的数学定义:

给定一个函数 f f f,寻找一个变量 x 0 ∈ D x_0 \in D x0D,使得对于 D D D中所有的 x x x f ( x 0 ) ≤ f ( x ) f(x_0) \leq f(x) f(x0)f(x)(最小化)或者 f ( x 0 ) ≥ f ( x ) f(x_0) \geq f(x) f(x0)f(x)(最大化)。函数 f f f被称为目标函数或代价函数,通常集合 D D D需要满足一定的约束, D D D中的元素被称为可行解,一个最小化(或者最大化)目标函数的可行解被称为最优解。

分类

根据变量 x x x 的定义域是否为实数域,数学优化问题可以分为离散优化问题和连续优化问题。

离散优化问题

离散优化(Discrete Optimization)问题是目标函数的输入变量为离散变量,比如为整数或有限集合中的元素。离散优化问题的求解一般都比较困难,优化算法的复杂度都比较高。离散优化问题主要有两个分支:

  • 组合优化(Combinatorial Optimization):其目标是从一个有限集合中找出使得目标函数最优的元素。在一般的组合优化问题中,集合中的元素之间存在一定的关联,可以表示为图结构。典型的组合优化问题有旅行商问题(TSP,又称最短路径问题)、背包问题(Knapsack Problem,KP)、最小费用最大流(Minimum Cost Maximum Flow,MCMF)等。很多机器学习问题都是组合优化问题,比如特征选择、聚类问题、超参数优化问题以及结构化学习(Structured Learning)中标签预测问题等。通常小规模的组合优化问题可以采用精确求解算法进行最优解的计算,而大规模的组合优化问题一般采用启发式算法进行求解。
  • 整数规划(Integer Programming):输入变量为整数。一般常见的整数规划问题为整数线性规划(Integer Linear Programming,ILP)。整数线性规划的一种最直接的求解方法是:(1)去掉输入必须为整数的限制,将原问题转换为一般的线性规划问题,这个线性规划问题为原问题的松弛问题;(2)求得相应松弛问题的解;(3)把松弛问题的解四舍五入到最接近的整数。但是这种方法得到的解一般都不是最优的,因此原问题的最优解不一定在松弛问题最优解的附近,但可能可以为问题求解提供一个较好的可行解,因为这种方法得到的解也不一定满足约束条件。所以常用小规模整数规划问题的求解方法是采用精确求解算法;而对于大规模的整数规划问题一般采用启发式算法求解,虽然启发式算法不能求得整数规划的最优解,但是却能在短时间(通常多项式时间)内给出一个较好的可行解。

连续优化问题

连续优化(Continuous Optimization)问题是目标函数的输入变量为连续变量。在连续优化问题中,根据是否有变量的约束条件,可以将此类优化问题分为无约束优化问题和约束优化问题:

  • 无约束优化问题(Unconstrained Optimization)中变量 x 无任何约束,其可行域为整个实数域。针对连续优化中的无约束问题,通常的求解方法时梯度下降法,例如随机梯度下降算法、带动量的随机梯度下降算法和Adam算法等等。
  • 约束优化问题(Constrained Optimization)中变量 x 需要满足一些等式或不等式的约束。约束优化问题最经典的算法是使用拉格朗日乘数法来进行求解。这种方法将一个有 n 个变量与 k 个约束条件的最优化问题转换为一个有 ( n + k ) 个变量的方程组的极值问题,其变量不受任何约束。

此外,根据目标函数和约束条件是否线性,可以将此类优化问题分为线性优化问题和非线性优化问题:

  • 如果目标函数和所有的约束函数都为线性函数,则该问题为线性规划问题(Linear Programming,LP)。
  • 如果目标函数或任何一个约束函数为非线性函数,则该问题为非线性规划问题(Nonlinear Programming,NLP)。在非线性优化问题中,有一类比较特殊的问题是凸优化问题(Convex Programming)。凸优化问题是一种特殊的约束优化问题,需满足目标函数为凸函数,约束条件为凸集,即对于集合中任意两点,它们的连线全部位于在集合内部。在凸优化中,如果目标函数是关于变量的二次函数,那此类问题称为二次规划问题(Quadratic programming,QP)。

求解

对于最优化问题的求解可谓是一门艺术,无数数学家将实际问题抽象成一个数学问题,并对此提出了各种各样的求解算法,那么最常见、经典的求解方法主要有以下几种:精确算法、近似算法和启发式算法。

  • 精确算法是指能够求出问题最优解的算法。当问题的规模较小时,精确算法能够在可接受的时间内得到最优解;当问题的规模较大时,精确算法一方面可以提供问题的可行解,另一方面可以为启发式算法提供初始解,以便搜索到更好的解。精确算法有分支定界法割平面法动态规划法等。
  • 近似算法是指用近似方法来解决优化问题的算法,通常与 NP-hard 问题相关,由于无法有效地在多项式时间内精确地求得最优解,所以考虑在多项式时间内求得一个有质量保证的近似解。近似算法包括贪婪算法局部搜索算法松弛算法等。
  • 启发式算法是一种基于直观或经验构造的算法,能在可接受的计算成本内尽可能地逼近最优解,得到一个相对优解,但无法预计所得解与最优解的近似程度。启发式算法可分为传统启发式算法和元启发式算法,传统启发式算法包括构造性方法局部搜索算法松弛方法解空间缩减算法等。元启发式算法包括禁忌搜索算法模拟退火算法遗传算法蚁群算法粒子群算法人工神经网络等。

相关最优化问题的求解软件或算法库有:lingo、Matlab、Python(Gurobi、pulp)等等。

http://www.lryc.cn/news/184325.html

相关文章:

  • 企业办理CS资质,怎么选择办理等级?
  • 华为云云耀云服务器L实例评测|Huawei Cloud EulerOS 自动化环境部署
  • 从一张表格开始做挖机报价系统
  • Qt扫盲-QTreeView 理论总结
  • BF算法详解(JAVA语言实现)
  • 零基础转行网络工程师,过来人给的一些建议
  • Vue中如何进行分布式搜索与全文搜索(如Elasticsearch)
  • 数据结构-图-最小生成树问题
  • 使用vite+npm封装组件库并发布到npm仓库
  • 85.最大矩形
  • Windows服务器 开机自启动服务
  • 《算法通关之路》chapter17一些通用解题模板
  • 常用求解器安装
  • 第三章:最新版零基础学习 PYTHON 教程(第一节 - Python 运算符)
  • 细粒度特征提取和定位用于目标检测:PPCNN
  • 【STM32单片机】数学自动出题器设计
  • C语言之动态内存管理篇(1)
  • React18入门(第二篇)——React18+Ts项目配置husky、eslint、pretttier、commitLint
  • 【VINS】苹果手机采集单目相机+IMU数据离线运行VINS-Mono
  • 数据结构 2.1 单链表
  • [Machine Learning]pytorch手搓一个神经网络模型
  • KdMapper扩展实现之Dell(pcdsrvc_x64.pkms)
  • python和go相互调用的两种方法
  • c# 分部视图笔记
  • Vue3最佳实践 第七章 TypeScript 中
  • (三)行为模式:8、状态模式(State Pattern)(C++示例)
  • nginx的配置文件概述及简单demo(二)
  • Apollo Planning2.0决策规划算法代码详细解析 (2): vscode gdb单步调试环境搭建
  • flex 布局:元素/文字靠右
  • java基础-第1章-走进java世界