如何在matlab中进行非线性规划,约束非线性规划工具-fmincon(matlab)的使用
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)的使用相关推荐
- matlab约束非线性规划,MATLAB中用遗传算法求解约束非线性规划问题
<MATLAB中用遗传算法求解约束非线性规划问题>由会员分享,可在线阅读,更多相关<MATLAB中用遗传算法求解约束非线性规划问题(3页珍藏版)>请在人人文库网上搜索. 1.维 ...
- stem什么意思matlab,matlab中stem函数用法_常见问题解析,matlab
matlab中如何自定义图例_常见问题解析 matlab中自定义图例的方法:首先打开matlab软件:然后点击勾选按钮,新建一个文件并输入代码为"x = 0:pi/50:2*pi;" ...
- Matlab中如何使用appdesigner设计工具建立一个简单的界面
Matlab中如何使用appdesigner设计工具建立一个简单的界面(数据的输入.处理和保存) 以使用不同算法处理图像的功能为例 建立一个新的空白界面,matlab中输入appdesigner,打开 ...
- matlab plot 错误,Matlab中的绘图错误(Plotting Error in Matlab)
Matlab中的绘图错误(Plotting Error in Matlab) 将matlab图打印成PDF时遇到问题. 在研究了几个小时的解决方案之后,我一直无法找到解决方案. 我一直收到相同的错误消 ...
- 在MATLAB中使用数学符号,在matlab中怎么输入特殊符号 function在MATLAB中怎么用
导航:网站首页 > 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 在matlab中怎么输入特殊符号 function在MATLAB中怎么用 相关问题: 匿名网友: 一 ...
- matlab中的下划线怎么打,在matlab中怎么输入特殊符号~ , 怎么在Matlab中输入特殊符号...
导航:网站首页 > 在matlab中怎么输入特殊符号~ , 怎么在Matlab中输入特殊符号 在matlab中怎么输入特殊符号~ , 怎么在Matlab中输入特殊符号 匿名网友: 一.文档中的T ...
- 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结
Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...
- matlab中tab键怎么用来缩进,MATLAB中的一些小技巧
1. Ctrl+D打开子程序在MATLAB的Editor中,将输入光标放到一个子程序名称中间,然后按Ctrl+D可以打开该子函数的m文件.当然这个子程序要在路径列表中(或在当前工作路径中).实际上该快 ...
- 在matlab中可以计算式子的最大值吗,matlab求最大值
matlab遗传算法求最大值问题例题完整代码_IT认证_资格考试/认证_教育专区.matlab遗传算法求最大值问题例题完整代码 本文件的目的是减少您打字的烦恼 %主程序:用...... 11MATLA ...
最新文章
- Node.js session 存储的几种方法
- CPU的基本结构和功能
- C++ Primer 有感(类)
- [codevs 1922] 骑士共存问题
- 微软二合一能装python吗_微软再出神器,这次终于对Python下手了!
- HDU4389(数位DP)
- 我想开一家美团外卖店,不做堂食,有什么好的建议吗?
- mysql 唯一 标识符_mysql – 获取唯一标识符而不插入
- 硅谷卖场里看家庭监控设备:Dropcam难撼传统DVR系统
- python根据汉字获得拼音_python获_取一组汉字拼音首字母的方法
- win10系统如何telnet服务器,win10专业版官网系统如何开启telnet服务的办法
- 第三章 图表辅助元素的定制
- Python使用pyecharts库画简单的中国地图
- 修改placeholder文字 文字换行省略号 背景图固定 鼠标经过图片闪光效果
- 计算机声音在线模拟,计算机声场模拟软件ODEON及其应用.pdf
- 数字藏品的交易平台有哪些 nft数字藏品
- 使用 C 语言打开浏览器
- kali linux怎么远程桌面,适用于kali linux的远程桌面开启方法(从windows xp 远程登录到kali linux )...
- 系统可用性分析方法与设计模板
- 设计模式之Reactor反应堆
热门文章
- 阿里巴巴“奇幻”上市之旅惨遭红灯
- 关于发那科机器人程序偏移功能
- Java读取和写入配置文件Properties
- python 因果推断_因果推断书Causal inference:What if简介(附:因果推断书单推荐)...
- 《C++》第1章——第111章
- qt + osg 根据高程变色之 渐变色
- 一个完整的react-native框架代码demo,供大家下载学习
- ironpython教程_用IronPython写winform程序-.NET教程,Asp.Net开发
- MDK5 Debug调试方法总结
- 深度强化学习基础(一):RL中的基本概念