MATLAB无约束优化(UOM)

文章目录

  • MATLAB无约束优化(UOM)
    • 一、基本思想
    • 二、基本算法
      • 1、最速下降法(共轭梯度法)
      • 2、牛顿法
      • 3、拟牛顿法
        • 3.1 BFGS
        • 3.2 DFP
    • 三、MATLAB优化
      • 1、求解优化问题的主要函数
      • 2、优化函数的输入变量
      • 3、优化函数的输出变量
      • 4、控制参数选项的设置与修改
        • 4.1 常用参数举例如下:
        • 4.2 使用optimsetoptimsetoptimset函数修改、创建控制参数
      • 5、用MATLAB解决无约束优化问题
        • 5.1 一元无约束优化问题:minf(x)/maxf(x),vlb≤x≤vubminf(x)/maxf(x), vlb \leq x \leq vubminf(x)/maxf(x),vlb≤x≤vub
          • 5.1.1 一般格式
          • 5.1.2 实际应用
        • 5.2 多元无约束优化问题:minF(x)/maxF(x)minF(x)/maxF(x)minF(x)/maxF(x)
          • 5.2.1 一般格式
          • 5.2.2 实际应用
      • 6、实际建模
        • 6.1 提出问题&符号说明
        • 6.2 基本假设
        • 6.3 建立模型
        • 6.4 求解模型
        • 6.5 得到结论
      • 四、实验作业

一、基本思想

二、基本算法

1、最速下降法(共轭梯度法)

2、牛顿法

3、拟牛顿法

3.1 BFGS

3.2 DFP

三、MATLAB优化

1、求解优化问题的主要函数

类 型 模 型 基本函数名
一元函数极小 minF(x)s.t.x1<x<x2min F(x)\\s.t.\ x1<x<x2minF(x)s.t. x1<x<x2 x=fminbnd(‘F’,x1,x2)x=fminbnd(‘F’,x1,x2)x=fminbnd(‘F’,x1,x2)
无约束极小 minF(X)min F(X)minF(X) X=fminunc(‘F’,X0)X=fminsearch(‘F’,X0)X=fminunc(‘F’,X0) \\ X=fminsearch(‘F’,X0)X=fminunc(‘F’,X0)X=fminsearch(‘F’,X0)
线性规划 mincTs.t.AX≤bminc^T \\ s.t.\ AX≤bmincTs.t. AX≤b X=linprog(c,A,b)X=linprog(c,A,b)X=linprog(c,A,b)
二次规划 min12xTHx+cTxs.t.Ax≤bmin\frac{1}{2}xTHx+cTx \\ s.t.\ Ax≤bmin21​xTHx+cTxs.t. Ax≤b X=quadprog(H,c,A,b)X=quadprog(H,c,A,b)X=quadprog(H,c,A,b)
约束极小(非线性规划) minF(X)s.t.G(X)≤0min F(X) s.t. G(X)≤0minF(X)s.t.G(X)≤0 X=fmincon(‘FG’,X0)X=fmincon(‘FG’,X0)X=fmincon(‘FG’,X0)
达到目标问题 minrs.t.F(x)−wr≤goalmin r\\s.t.\ F(x)-wr ≤ goalminrs.t. F(x)−wr≤goal X=fgoalattain(‘F’,x,goal,w)X=fgoalattain(‘F’,x, goal,w)X=fgoalattain(‘F’,x,goal,w)
极小极大问题 minxmaxFi(x){Fi(x)}s.t.G(x)≤0min_x max_{F_i(x)}\{F_i(x)\} \\s.t.\ G(x)≤0minx​maxFi​(x)​{Fi​(x)}s.t. G(x)≤0 X=fminimax(‘FG’,x0)X=fminimax(‘FG’,x0)X=fminimax(‘FG’,x0)

2、优化函数的输入变量

  • fff —— 规划中目标函数的线性项的系数向量,有时也用ccc
  • funfunfun —— 目标函数的名称
  • HHH —— 目标函数中XT×XX^T \times XXT×X(二次项)的系数矩阵
  • A,bA,bA,b —— 线性不等式约束AX≤bAX \leq bAX≤b的系数矩阵和右端向量
  • $Aeq,beq $ —— 等式线性约束Aeq⋅X=beqAeq \cdot X = beqAeq⋅X=beq的系数矩阵和右端向量
  • vlb,vubvlb,vubvlb,vub —— XXX的下限和上限向量:vlb≤X≤vubvlb \leq X \leq vubvlb≤X≤vub
  • X0X0X0 —— 迭代初始坐标
  • $x1,x2 $ —— 函数最小化的区间
  • optionsoptionsoptions —— 定义用于优化函数的参数,优化选项参数结构

3、优化函数的输出变量

  • xxx —— 由优化函数求得的值。若exitflag>0exitflag>0exitflag>0,则xxx为解;否则,xxx不是最终解,它只是迭代停止时优化过程的值

  • fvalfvalfval —— 解xxx处的目标函数值

  • exitflagexitflagexitflag —— 描述退出条件:

    exitflag>0exitflag>0exitflag>0:表示目标函数收敛于解xxx处

    exitflag=0exitflag=0exitflag=0:表示已达到函数评价或迭代的最大次数

    exitflag<0exitflag<0exitflag<0:表示目标函数不收敛

  • outputoutputoutput —— 包含优化结果信息的输出结构.:

    IterationsIterationsIterations:迭代次数

    AlgorithmAlgorithmAlgorithm:所采用的算法

    FuncCountFuncCountFuncCount:函数评价次数

4、控制参数选项的设置与修改

4.1 常用参数举例如下:

  • DisplayDisplayDisplay:显示水平。取值为′off′'off'′off′时,不显示输出;取值为′iter′'iter'′iter′时,显示每次迭代的信息;取值为′final′'final'′final′时,显示最终结果.默认值为′final′'final'′final′

  • MaxFunEvalsMaxFunEvalsMaxFunEvals: 允许进行函数评价的最大次数,取值为正整数

  • MaxIterMaxIterMaxIter: 允许进行迭代的最大次数,取值为正整数

4.2 使用optimsetoptimsetoptimset函数修改、创建控制参数

  • option1 = optimset(optimfun)
    % 创建一个含有所有参数名,并与优化函数optimfun相关的默认值的选项结构
    
  • option2 = optimset('param1','value1','param2','value2'...)
    % 创建一个名称为option2的优化选项参数,其中指定的参数具有指定值,所有未指定的参数取默认值
    
  • option3 = optimset(old_options,'param1','value1','param2','value2'...)
    % 创建名称为old_options的参数的拷贝,并用指定的参数值修改oldops中相应的参数.
    

5、用MATLAB解决无约束优化问题

5.1 一元无约束优化问题:minf(x)/maxf(x),vlb≤x≤vubminf(x)/maxf(x), vlb \leq x \leq vubminf(x)/maxf(x),vlb≤x≤vub

5.1.1 一般格式
[x, fval, exitflag, output] = fminbnd(fun, vlb, vub)
% 函数fminbnd的算法基于黄金分割法和二次插值法,它要求目标函数必须是连续函数,并可能只给出局部最优解
5.1.2 实际应用

问题0

function f = fun0(x)f = -(3-2*x)^2 * x;
[x, fval] = fminbnd('fun0', 0, 1.5);
xmax = x;
fmax = -fval;
xmax =0.5000
fmax =2.0000

5.2 多元无约束优化问题:minF(x)/maxF(x)minF(x)/maxF(x)minF(x)/maxF(x)

5.2.1 一般格式
[x, fval, exitflag, output] = fminunc('fun', X0, options)
% 或者[x, fval, exitflag, output] = fminsearch('fun', X0, options)
% fminsearch是用单纯形法寻优,fminunc算法见以下几点说明:
% [1] fminunc为无约束优化提供了大型优化和中型优化算法.由选项中的参数LargeScale控制:
% LargeScale=‘on' (默认值),使用大型算法;
% LargeScale=‘off' (默认值),使用中型算法.
% [2] fminunc为中型优化算法的搜索方向提供了4种算法,由选项中的参数HessUpdate控制:
% HessUpdate='bfgs'(默认值),拟牛顿法的BFGS公式;
% HessUpdate='dfp',拟牛顿法的DFP公式;
% HessUpdate='steepdesc',最速下降法。
% [3] fminunc为中型优化算法的步长一维搜索提供了两种算法,由选项中参数LineSearchType控制:
% LineSearchType=‘quadcubic’ (默认值),混合的二次和三次多项式插值;
% LineSearchType='cubicpoly',三次多项式插值;
% [4] 使用fminunc和 fminsearch可能会得到局部最优解。
5.2.2 实际应用

问题1

function f = fun1(x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1);
x0 = [-1 1]; % x0为迭代初始坐标
x = fminunc('fun1', x0);
y = fun1(x);
x =0.5000   -1.0000
y =3.6609e-16

问题2

% [x,y] = meshgrid(-2:0.1:3, -2:0.1:3);
% % meshgrid为网格采样点函数
% z = 100*(y-x.^2).^2+(1-x).^2;
% mesh(x, y, z);
% % hold on
% % mesh为画三维的网格图的函数
% % 画出函数的三维图像
%
% contour(x,y,z,20);
% % contour(x,y,z,levels)为绘制矩阵的等高线图的函数,20为等高线的层数
% hold on
% plot(-1.2,2,'o');
% text(-1.2,2,'start point');
% plot(1,1,'o');
% text(1,1,'solution');
% % 绘制等高线% 使用fminsearch函数求解
x0 = [-1.2 2];
[x, fval, exitflag, output] = fminsearch('fun2',x0);% 使用fminunc函数求解
% 使用三种算法进行求解
% LargeScale设置算法规模
% Hessupdate设置中型算法种类
% LineSearchType设置步长一维搜索的算法种类
% MaxIter: 允许进行迭代的最大次数,取值为正整数
% MaxFunEvals: 允许进行函数评价的最大次数,取值为正整数% 使用中型算法
x0 = [-1.2 2];
oldoptions = optimset('fminunc')
options = optimset(oldoptions, 'LargeScale', 'off')% 1.1:DFP算法
options1 = optimset(options, 'HessUpdate', 'dfp')
[x1, fval1, exitflag1, output1] = fminunc('fun2', x0, options1)
pause% 2.1:BFGS算法
options2 = optimset(options, 'HessUpdate', 'bfgs')
[x2, fval2, exitflag2, output2] = fminunc('fun2', x0, options2)
pause% 3.1:最速下降法
options31 = optimset(options, 'HessUpdate', 'steepdesc')
[x31, fval31, exitflag31, output31] = fminunc('fun2', x0, options31)
pause
% 3.2:最速下降法,迭代的最大次数为8000,进行函数评价的最大次数为8000
options32 = optimset(options, 'HessUpdate', 'steepdesc', 'MaxIter', 8000, 'MaxFunEvals', 8000)
[x32,fval32, exitflag32, output32] = fminunc('fun2', x0, options32)
pause
% 3.3:最速下降法,迭代的最大次数为9000,进行函数评价的最大次数为9000
options33 = optimset(options, 'HessUpdate', 'steepdesc', 'MaxIter', 9000, 'MaxFunEvals', 9000)
[x33, fval33, exitflag33, output33] = fminunc('fun2', x0, options33)


x =1.0000    1.0000
fval =1.9151e-10
output = 包含以下字段的 struct:iterations: 108funcCount: 202algorithm: 'Nelder-Mead simplex direct search'message: '优化已终止:↵ 当前的 x 满足使用 1.000000e-04 的 OPTIONS.TolX 的终止条件,↵F(X) 满足使用 1.000000e-04 的 OPTIONS.TolFun 的收敛条件↵'
exitflag1 = 0
exitflag2 = 1
exitflag31 = 0
exitflag32 = 0
exitflag33 = 0
fval1 = 3.118857168885522
fval2 = 5.308577048854317e-10
fval31 = 0.013712025822507
fval32 = 0.006357580614852
fval33 = 0.005729363160867
x0 = [-1.200000000000000,2]
x1 = [-0.747553337321273,0.533357667606796]
x2 = [0.999977453011579,0.999954432284563]
x31 = [1.116921345974429,1.248156913152331]
x32 = [1.079607291413950,1.166002012200930]
x33 = [1.075675703374728,1.157237939825174]
% 可根据得出来的结果判断算法的特点与优缺点

6、实际建模

6.1 提出问题&符号说明

6.2 基本假设

  • 甲的价格随销量的增加而降低,同时也随着乙的销量增加而降低,两者与甲的价格均为假设为线性的关系,且前者对甲的影响比后者大,同理也可以得到乙的价格关系,则:

{p1=b1−a11x1−a12x2,b1,a11,a12>0,a11>a12;p1=b1−a11x1−a12x2,b1,a21,a22>0,a22>a21;\begin{cases} p_1 = b_1 - a_{11}x_1 - a_{12}x_2,\ b_1,a_{11},a_{12}>0,a_{11}>a_{12}; \\ p_1 = b_1 - a_{11}x_1 - a_{12}x_2,\ b_1,a_{21},a_{22}>0,a_{22}>a_{21}; \end{cases} {p1​=b1​−a11​x1​−a12​x2​, b1​,a11​,a12​>0,a11​>a12​;p1​=b1​−a11​x1​−a12​x2​, b1​,a21​,a22​>0,a22​>a21​;​

  • 甲的成本随着销量的增加而降低,且有一个初值,假设为负指数关系,同理可以得到乙的成本关系,则:

q1=r1e−λ1x1+c1,r1,λ1,c1>0q2=r2e−λ2x2+c2,r2,λ2,c2>0q_1 = r_1e^{-\lambda_1 x_1} + c_1, \ r_1, \lambda_1, c_1>0 \\ q_2 = r_2e^{-\lambda_2 x_2} + c_2, \ r_2, \lambda_2, c_2>0 q1​=r1​e−λ1​x1​+c1​, r1​,λ1​,c1​>0q2​=r2​e−λ2​x2​+c2​, r2​,λ2​,c2​>0

  • 为简化模型,使得计算不太复杂,计算初始值时,假设成本不计在内。

6.3 建立模型

  • 目标函数:Z=(p1−q1)x1+(p2−q2)x2Z = (p_1 - q_1)x_1+(p_2 - q_2)x_2Z=(p1​−q1​)x1​+(p2​−q2​)x2​

  • 根据统计数据得到待定系数;

  • 忽略成本求得ZZZ极点(最小值)处的x1,x2x_1,x_2x1​,x2​,作为初始值。

6.4 求解模型

function f = fun3(x)y1=((100-x(1)- 0.1*x(2))-(30*exp(-0.015*x(1))+20))*x(1);y2=((280-0.2*x(1)- 2*x(2))-(100*exp(-0.02*x(2))+30))*x(2);f=-(y1+y2);
x0 = [50 70];
[x, fval] = fminunc('fun3', x0);
zmax = -fun3(x);
x =23.9025   62.4977zmax =6.4135e+03

6.5 得到结论

在甲产量为23.9025,乙产量为62.4977时,最大利润为6413.5.

四、实验作业

MATLAB无约束优化(UOM)相关推荐

  1. matlab解决无约束优化问题

    无约束优化问题 要用到的数学知识: 1.向量范数与矩阵范数 2.多元函数梯度与Hessian阵 3.凸集与凸函数 特别要提示的是:如果该函数为凸函数,那么它有且仅有一个最优点,如果它的值不在无穷处,我 ...

  2. matlab某分子由25个原子组成,清华大学数学实验-实验7无约束优化1

    数学实验 实验 7 无约束优化 实验 7 无约束优化 生医 0 王言 2010013212 实验目的 1 掌握用 MATLAB 优化工具箱的基本用法 对不同算法进行初步分析 比较 2 练习用无约束优化 ...

  3. matlab某分子由25个原子组成,清华大学数学实验实验7无约束优化1

    清华大学数学实验实验7无约束优化1 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.9 积分 实验7无约束优化生医0 王言 2010013212 ...

  4. Matlab建模—无约束优化与非线性规划相关算例

    数学建模期末复习,撰写博客做总结之用,主要侧重于算例的模型建立与部分代码的实现,其中不足之处望读者多多指正. 文章目录 前言 非线性规划问题 供应与选址 问题描述 模型建立 无约束最优化 梯子长度问题 ...

  5. matlab某分子由25个原子组成,实验七(无约束优化)

    实验七(无约束优化) 化21 张腾 2014-4-18 大学数学实验 实验报告 --无约束优化 一. 实验目的 1.掌握MATLAB优化工具箱的基本用法,对不同算法进行初步分析.比较. 2.练习用无约 ...

  6. 02(c)多元无约束优化问题-牛顿法

    此部分内容接<02(a)多元无约束优化问题>! 第二类:牛顿法(Newton method) \[f({{\mathbf{x}}_{k}}+\mathbf{\delta })\text{ ...

  7. 无约束优化:Hessian-Free Optimization 拟牛顿类算法(BFGS,L-BFGS)

    文章目录 无约束优化:Hessian-Free Optimization 拟牛顿类算法(BFGS,L-BFGS) 为什么要用拟牛顿算法 割线方程 严格凸且光滑函数的BFGS算法 非凸但光滑函数的BFG ...

  8. 最优化 | 无约束优化方法 | C++实现

    文章目录 参考资料 1. 前言 2. 梯度下降法 2.1 原理 2.2 c++实现 2.3 共轭梯度法 3. 牛顿法 3.1 原理 3.2 c++实现 4. 模拟退火算法 4.1 原理 4.2 c++ ...

  9. MATLAB无约束多维极值——最速下降法

    一.算法原理 1.首先了解一个概念,什么式无约束最优化. 无约束优化问题就是在x∈R^n的范围内,找到一点x*,使得f(x*)<f(x)对于任意x∈R^n都成立.点x*就是全局最优解. 其一般形 ...

  10. 02(d)多元无约束优化问题-拟牛顿法

    此部分内容接<02(a)多元无约束优化问题-牛顿法>!!! 第三类:拟牛顿法(Quasi-Newton methods) 拟牛顿法的下降方向写为: ${{\mathbf{d}}_{k}}= ...

最新文章

  1. CSS:响应式下的折叠菜单(条纹式)
  2. Codeforces791:Ordinary Numbers题解
  3. Flink 与 TiDB 联合发布实时数仓最佳实践白皮书
  4. 单点登录总结(域名内与跨域名)
  5. Navicat 连接 RDS数据库
  6. HH SaaS电商系统的线下服务商品库存和采购设计
  7. 替换Quartus 自带编辑器 (转COM张)
  8. Ubuntu中类似QQ截图的截图工具并实现鼠标右键菜单截图
  9. xshell连接Linxu系统乱码
  10. 这个世界是怎么了?做商业软件的怎么越来越流氓了?
  11. mysql adodb_指南从MySQL转向ADODB的方法_MySQL
  12. TIM软件 docx.文件 安卓手机下载路径
  13. 2007年各大论坛最新经典WindowsXP操作系统
  14. 配电网可靠性评估(一)—最小路法和非序贯蒙特卡洛模拟法的matlab实现
  15. 《新浪微博平台架构》---阅读
  16. 基于jQuery发射弹幕的一个小案例
  17. Eclipse搭建第一个Spring boot项目
  18. android判断通知铃声是否静音模式
  19. 机器学习-疑点1 :shape[ ]的理解
  20. 导航英语专业词汇——不停更新

热门文章

  1. 【漏洞复现】蓝凌OA近期公开几个漏洞汇总
  2. 八孔g调短洞箫_八孔g调洞箫曲谱_八孔G调箫G调简谱
  3. Java 第一阶段建立编程思想 【面向对象编程(中级部分)】
  4. 嵌入式软件开发能力提高的几个途径
  5. 为什么要用谷歌浏览器翻译插件?| 文末福利
  6. 数据分析需要学习的技能有哪些?
  7. 关于RC电路特点以及几种常见的典型应用
  8. #####好好好好######Neo4j 第三篇:Cypher查询入门
  9. yocto_evn compile project whithconfigure
  10. X11 - X client数量达到上限并报错Maximum number of clients reachedxlsclients