最优化赛题是数学建模大赛中最常见的问题类型之一。一般说来,凡是寻求最大、最小、最远、最近、最经济、最丰富、最高效、最耗时的目标,都可以划入优化问题的范畴。MATLAB 优化工具箱和全局优化工具箱对多个优化问题提供了完整的解决方案,前者涵盖了线性规划、混合整型线性规划、二次规划、非线性优化、非线性最小二乘的求解器,后者囊括了全局搜索、多初始点、模式搜索、遗传算法等求解算法。

本讲主要介绍如何使用优化工具箱求解数学建模中标准的优化模型。更多的内容,欢迎大家浏览 MathWorks 官网以及 MATLAB 软件文档。

1. 聊一聊最优化问题

最优化即在一定的条件下,寻求使目标最小(大)的设计参数或决策。在优化问题中有两个关键对象:目标函数和约束条件(可选)。常规优化问题,其数学表达可以描述为:

其中x 为长度n的决策变量向量,f(x) 为目标函数,G(x) 为约束函数。

求解目标函数的最小(大)值,一个高效而精确的解决方案不仅取决于约束条件和变量数量,更取决于目标函数和约束函数的特性。明确优化类型是确认优化方案的前提,让我们看一下这些特性如何划分:

常见的目标函数有:

线性规划:被广泛的应用于变量之间可线性表示的财务、能源、运营研究等现代管理领域中。

混合整数线性规划:扩展了线性规划问题,增加了最优解中部分或全部变量必须是整数的约束。例如,如果一个变量代表要认购的股票数量,则只应取整数值。同样,如果一个变量代表发电机的开/关状态,则只应取二进制值(0 或 1)。

二次规划:目标函数或约束函数为多元二次函数。此优化应用于财务金融中投资组合优化、发电厂发电优化、工程中设计优化等领域。

最小二乘:分为线性和非线性,通过最小化误差的平方和寻找变量的最优函数匹配。非线性最小二乘优化还可用于曲线拟合。

2. 优化求解器太多了,怎么选?

对 MATLAB 提供的各类优化问题的算法,我们称之为求解器(Solver)。根据其求解目标,被分为四大组:

  • 极小值优化组:找到目标函数出发点 x0 附近的局部极小值

  • 多目标优化组:找到最小化一组函数的最大值或指定的值

  • 方程求解组:找到非线性方程 f(x) = 0 出发点 x0 附近的解

  • 最小二乘法(曲线拟合)组:最小化平方和

仅优化工具箱就提供了近 20 种求解器,面对如此繁多的选项,用户往往一头雾水。幸好,MATLAB 提供了简单明了的参考工具 —— 优化决策表。可谓一表在手,优化不愁:

上表中*表示算法由全局工具箱提供。此外,多目标优化与方程组求解器并未被此表列举,更多求解器的选择方案,可以点击阅读原文查看。

3. 写出漂亮、高效的代码

确认优化策略后,就可以开工写代码了。下面让我们通过一个例子,了解编写高效优化算法代码的步骤和注意事项。

[题目]

- 目标函数

-  约束函数(所有变量为正)

[解答]

a. 首先,根据题目确认这是一个线性规划问题。而线性规划的通用数学表达式和MATLAB标准形式为:

创建符合标准格式的A、b、Aeq、beq、lb、ub参数,才可以顺利的运行优化算法。

b. 对于线性规划的优化求解步骤(也适用于其他优化方案),建议如下:

1 ) 选择优化求解器

2 ) 将所有变量合并为一个向量

3 ) 创建边界约束(lb,ub)

4 ) 创建线性不等式约束(A,b)

5 ) 创建线性等式约束(Aeq,beq)

6 ) 创建目标函数

7 ) 优化问题求解

8 ) 结果检验

c. MATLAB 代码和注释:

d. 优化结果:

e. 如果结果不满意,可以调整优化选项,迭代计算。

4. 整数规划求解神器

在优化问题中, 经常会遇到整数规划问题, 尤其是0-1规划问题, MATLAB 对于整数规划问题,有个专门的求解器 intlinprog。 该函数不仅可以求解一般的整数规划问题,还可以求解混合整数规划问题,也就是决策变量既可以是整数也可以是小数,只要指定是整数的决策变量的编号就是可以。 通过一个具体的例子, 来看看这个函数的使用。

求解的问题是:

求解的代码是:

运行代码, 可很快得到最优解 x = [1 0 1]。

5. 受欢迎的图形化应用

MATLAB 在数据分析领域如此受欢迎,除了其提供丰富的内置算法集,还有各类友好的应用界面。在优化工具箱中,也有这么一个强大的工具—— Optimization App,可以在 MATLAB Apps 窗口或者运行 optmitool 命令打开。它是一个交互式的图形化应用工具,无需手写代码,直接在图形界面中设置各类求解器、配置目标函数、约束条件,即可运行优化算法并使中间结果和最终结果可视化。

在 Optimization App 中,只需点击菜单栏中的 File > Generate Code,即可将 App 中的各项设置自动生成 MATLAB 代码,用户可实现算法的复用和二次开发。

此外,面对越来越复杂的优化问题,如何加快算法的运行也是我们经常听到的问题。针对这个需求,可以结合 MATLAB 并行计算工具箱,利用电脑的多核硬件资源,实现算法加速,有兴趣的用户可以点击阅读原文观看视频做更多的了解。

数学建模专栏 | 第五篇:MATLAB优化模型求解方法(上):标准模型相关推荐

  1. 数学建模专栏 | 第十篇:MATLAB CUMCM真题求解实例一:数据型

    本讲针对的题型是数据型的建模问题, 2012 年的 A 题就是一道典型这类问题,接下来将介绍这道题的 MATLAB 求解过程. 1. 问题的提出 确定葡萄酒质量时一般是通过聘请一批有资质的评酒员进行品 ...

  2. 数学建模专栏 | 第七篇:MATLAB连续模型求解方法

    连续模型是指模型是连续函数的一类模型总称,具体建模方法主要是微分方程建模.微分方程建模是数学建模的重要方法,因为许多实际问题的数学描述将导致求解微分方程的定解问题.把形形色色的实际问题化成微分方程的定 ...

  3. 2022高教社杯数学建模思路 - 复盘:校园网的优化模型

    2022 高教社杯(国赛数学建模)思路解析 2022高教社杯ABCD赛题思路解析: https://blog.csdn.net/dc_sinor/article/details/126211983 1 ...

  4. 2019第十六届研究生数学建模竞赛--跨越五年从本科省二到研赛国一

    本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可. 2019第十六届研究生数学建模竞赛--跨越五年从本科省二到研赛国一 感谢 序言 本科建模竞赛的失败经历 研究生建模竞赛的成功经历 ...

  5. 2021年华数杯数学建模A题电动汽车无线充电优化匹配研究求解全过程文档及程序

    2021年华数杯数学建模 A 题 电动汽车无线充电优化匹配研究 原题再现:   电动汽车以环境污染小.噪音低.能源利用效率高.维修方便等优势深受消费者青睐.但现有电动汽车的有线充电方式操作复杂,且存在 ...

  6. 【数学建模】灰色关联(Matlab代码实现)

    目录 1 灰色关联理论 2 算例及Matlab代码实现 2.1 算例1 2.2 算例2   2.3 算例3 2.4 算例4  3 写在最后 1 灰色关联理论 灰色关联分析l是由邓聚龙教授于1982年提 ...

  7. 用计算机学数学日记,【实用】数学日记合集五篇

    [实用]数学日记合集五篇 数学日记 篇1 今天,我和爸爸一起去新房子,为如何用瓷片铺设地板的装修方案做预算.重点是买哪一种瓷片最划算. 可能是爸爸想考考我,也可能是爸爸真的想知道买哪一种瓷片最划算,于 ...

  8. Maltab在数学建模中的应用(第二版)——读书笔记上

    Maltab在数学建模中的应用(第二版)--读书笔记上 1.MATLAB与数据文件的交互 1.1数据拟合 1.2数据拟合实例 1.3数据可视化 1.4层次分析法 2.规划问题的MATLAB求解(多约束 ...

  9. 数学建模中的ARMA模型和ARIMA模型的使用实例(含代码)

    数学建模中的ARMA模型和ARIMA模型的使用实例(含代码) 原文地址:http://blog.csdn.net/qq_34861102/article/details/77659399 对于较少时间 ...

最新文章

  1. 未处理的异常导致基于 ASP.NET 的应用程序意外退出
  2. 【8】青龙面板系列教程之nolanjdc的一键安装获取cookie【作者删库了,不用尝试了】
  3. web服务压力测试)有效的压力测试系统将应用以下这些关键条件
  4. TQuery组件的Open方法与ExecSQL的区别
  5. 为什么你的安全数据湖项目会失败(译文)
  6. python 打印皮卡丘_Python干掉了97%的办公软件?
  7. 计算机视觉空间域(spatial)注意力机制——CBAM
  8. 03 聚类算法 - K-means聚类
  9. MySql学习10-----存储过程和函数
  10. 2.5配置自定义HttpMessageConverters
  11. sublim插件(待续)
  12. python时间模块小结
  13. 历年软考网络工程师考试真题及答案
  14. JDK官网下载速度缓慢解决方法
  15. jrtplib使用笔记
  16. 微信朋友圈马赛克图片 —— 抓包破解
  17. 3DMAX导出插件编写(续)
  18. Android studio中如何调用setpositivebutton函数
  19. 大学如何学习——我的五年失败经验总结
  20. mysql association_MyBatis association的两种形式——MyBatis学习笔记之四

热门文章

  1. aspera:Linux上安装使用
  2. 1.2 python入门学习之mac开发工具
  3. java中字符串常量_Java基础-Java中字符串常量详解
  4. 静态代码,内部类,枚举类练习
  5. Ekata推出开户API
  6. typeinfo、typeid、 typeof 介绍
  7. 《人人都是产品经理1》阅读摘要笔记1.0
  8. WORD不能粘贴内容 文字 图片 Office word 2010 装Mathtype之后
  9. 汉文博士 0.5.6.2345 修订版发布
  10. uniapp调用高德地图获取当前位置信息