motivation:

记录一些fmincon使用方法和应对一些问题的解决方法

1.简介:

在MATLAB中,使用函数x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

即可调用fmincon函数进行约束非线性规划,其中fun为目标函数:

例如:fun = @(x)100*(x(2)-x(1)^2)^2 + (1-x(1))^2;

x0为初始值:x0 = [0.5,0]

A和b为线性不等式约束条件的参数,Aeq和beq为线性不等式约束条件的参数(没有使用过,形式如下):A = [1,2];

b = 1;   % A*x <= b

Aeq = [2,1];

beq = 1;  % Aeq*x <= b

lb为x0中每一维的下限,ub位每一维的上限,形式如下:%表示x0第一维的区间是[0,1],第二维的区间是[0,2]

lb = [0,0];

ub = [1,2];

nonlcon(Nonlinear constraints)为非线性不等式约束,使用方法如下:

例如:x = fmincon(@myfun,x0,A,b,Aeq,beq,lb,ub,@mycon)

创建约束函数的.m文件function [c,ceq] = mycon(x)

c = [(),...,()]     % Compute nonlinear inequalities at x.

ceq = [(),..,()]   % Compute nonlinear equalities at x.

option为设置fmincon的参数,定义option的形式为:option = optimoptions(@fmincon,'参数名1', 参数值1, '参数名2', 参数值2)

例如:option = optimoptions(@fmincon,'Algorithm','sqp')

2.option参数的设置

除去option外,传入fmincon的其他参数形式简单,调用起来非常简单,此处不再赘述。以下介绍option中的几个参数。

'Algorithm':

该参数的含义是,为fmincon规划选择算法。可选算法有:'interior - point' (默认算法)

'trust - region - reflective'

'sqp'

'sqp-legacy'(iotimoptions only)

'active - set'

其中,后三种方法为medium-scale算法,不能应对大规模的规划问题。‘trust - region - reflective’ 算法能够应对大规模的规划问题,但是使用‘trust-region-reflective’算法需要满足一些条件。但是官方文档表示,大规模和中规模算法各有优势,不是单纯的数据量大小:Don't let the name "large scale" mislead you; you can use a large-scale algorithm on a small problem. Furthermore, you do not need to specify any sparse matrices to use a large-scale algorithm. Choose a medium-scale algorithm to access extra functionality, such as additional constraint types, or possibly for better performance.

实验发现(使用‘interior - point’算法),当变量在500个左右,当约束公式的长度减小的时(从70000+项削减到10000+项),规划时间大大缩短(从170分钟缩短到11分钟),但是在进行长公式规划的时候,系统占用的cpu和内存并不高,所以可以考虑“将约束条件分组,多线程进行规划,再组合”

官方文档推荐:先使用‘interior-point’算法;(能够快速精确的解决大规模的问题)

在小规模到中规模的问题上运行一个优化,先尝试‘sqp’,再尝试‘active-set’;

合适的时候使用‘trust-region-reflective’,问题必须满足:目标函数包含了梯度,边界和线性约束只能存在一个;

When the Solver Fails

1.开启Iterative Displayoptions = optimoptions('solvername', 'Display','iter')

在执行规划之后打印出参数Iteration     Func-count        f(x)                       Step-size    First-order optimality

1                    4                    -0.841471            1                   0.54

exitflag返回为1的条件是:First-order optimality measure was less thanoptions.OptimalityTolerance, and maximum constraint violation was less thanoptions.ConstraintTolerance.

First-order optimality measure小于thanoptions.OptimalityTolerance,并且maximum constraint violation小于thanoptions.ConstraintTolerance

在实验中发现,返回的exitflag是0时(表示超过最大迭代数),大部分的非线性约束的不等式的值小于0,部分等于0,其实已经满足的条件,但是程序仍然进行迭代运算,直到超过最大迭代数,而且后期每次迭代的约束方程的值和目标函数已经不发生变化。此时认为已经满足了约束。

另一种情况是,exitflag为0,但是某些非线性约束的不等式方程的值大于0,此时没有满足约束。

所以exitflag = 0包含了两种情况。

可以通过观察First-order optimality measure,将OptimalityTolerance调大,可以将第一种情况分离开来。

‘Solver Takes Too Long’

未完待续

如何在matlab中进行非线性规划,约束非线性规划工具-fmincon(matlab)的使用相关推荐

  1. matlab约束非线性规划,MATLAB中用遗传算法求解约束非线性规划问题

    <MATLAB中用遗传算法求解约束非线性规划问题>由会员分享,可在线阅读,更多相关<MATLAB中用遗传算法求解约束非线性规划问题(3页珍藏版)>请在人人文库网上搜索. 1.维 ...

  2. stem什么意思matlab,matlab中stem函数用法_常见问题解析,matlab

    matlab中如何自定义图例_常见问题解析 matlab中自定义图例的方法:首先打开matlab软件:然后点击勾选按钮,新建一个文件并输入代码为"x = 0:pi/50:2*pi;" ...

  3. Matlab中如何使用appdesigner设计工具建立一个简单的界面

    Matlab中如何使用appdesigner设计工具建立一个简单的界面(数据的输入.处理和保存) 以使用不同算法处理图像的功能为例 建立一个新的空白界面,matlab中输入appdesigner,打开 ...

  4. matlab plot 错误,Matlab中的绘图错误(Plotting Error in Matlab)

    Matlab中的绘图错误(Plotting Error in Matlab) 将matlab图打印成PDF时遇到问题. 在研究了几个小时的解决方案之后,我一直无法找到解决方案. 我一直收到相同的错误消 ...

  5. 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用

    导航:网站首页 > 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 相关问题: 匿名网友: 一 ...

  6. matlab中的下划线怎么打,在matlab中怎么输入特殊符号~ , 怎么在Matlab中输入特殊符号...

    导航:网站首页 > 在matlab中怎么输入特殊符号~ , 怎么在Matlab中输入特殊符号 在matlab中怎么输入特殊符号~ , 怎么在Matlab中输入特殊符号 匿名网友: 一.文档中的T ...

  7. 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结

    Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...

  8. matlab中tab键怎么用来缩进,MATLAB中的一些小技巧

    1. Ctrl+D打开子程序在MATLAB的Editor中,将输入光标放到一个子程序名称中间,然后按Ctrl+D可以打开该子函数的m文件.当然这个子程序要在路径列表中(或在当前工作路径中).实际上该快 ...

  9. 在matlab中可以计算式子的最大值吗,matlab求最大值

    matlab遗传算法求最大值问题例题完整代码_IT认证_资格考试/认证_教育专区.matlab遗传算法求最大值问题例题完整代码 本文件的目的是减少您打字的烦恼 %主程序:用...... 11MATLA ...

最新文章

  1. Node.js session 存储的几种方法
  2. CPU的基本结构和功能
  3. C++ Primer 有感(类)
  4. [codevs 1922] 骑士共存问题
  5. 微软二合一能装python吗_微软再出神器,这次终于对Python下手了!
  6. HDU4389(数位DP)
  7. 我想开一家美团外卖店,不做堂食,有什么好的建议吗?
  8. mysql 唯一 标识符_mysql – 获取唯一标识符而不插入
  9. 硅谷卖场里看家庭监控设备:Dropcam难撼传统DVR系统
  10. python根据汉字获得拼音_python获_取一组汉字拼音首字母的方法
  11. win10系统如何telnet服务器,win10专业版官网系统如何开启telnet服务的办法
  12. 第三章 图表辅助元素的定制
  13. Python使用pyecharts库画简单的中国地图
  14. 修改placeholder文字 文字换行省略号 背景图固定 鼠标经过图片闪光效果
  15. 计算机声音在线模拟,计算机声场模拟软件ODEON及其应用.pdf
  16. 数字藏品的交易平台有哪些 nft数字藏品
  17. 使用 C 语言打开浏览器
  18. kali linux怎么远程桌面,适用于kali linux的远程桌面开启方法(从windows xp 远程登录到kali linux )...
  19. 系统可用性分析方法与设计模板
  20. 设计模式之Reactor反应堆

热门文章

  1. 阿里巴巴“奇幻”上市之旅惨遭红灯
  2. 关于发那科机器人程序偏移功能
  3. Java读取和写入配置文件Properties
  4. python 因果推断_因果推断书Causal inference:What if简介(附:因果推断书单推荐)...
  5. 《C++》第1章——第111章
  6. qt + osg 根据高程变色之 渐变色
  7. 一个完整的react-native框架代码demo,供大家下载学习
  8. ironpython教程_用IronPython写winform程序-.NET教程,Asp.Net开发
  9. MDK5 Debug调试方法总结
  10. 深度强化学习基础(一):RL中的基本概念