
约束⾮线性规划⼯具-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')
参数的设置
除去option外,传⼊fmincon的其他参数形式简单,调⽤起来⾮常简单,此处不再赘述。以下介绍option中的⼏个参数。
'Algorithm':
该参数的含义是,为fmincon规划选择算法。可选算法有:
'interior - point' (默认算法)
'trust - region - reflective'
'sqp'
'sqp-legacy'(iotimoptions only)
'active - t'
其中,后三种⽅法为medium-scale算法,不能应对⼤规模的规划问题。‘trust - region - reflective’ 算法能够应对⼤规模的规划问题,但是
使⽤‘trust-region-reflective’算法需要满⾜⼀些条件。但是官⽅⽂档表⽰,⼤规模和中规模算法各有优势,不是单纯的数据量⼤⼩:
Don't let the name "large scale" mislead you; you can u a large-scale algorithm on a small problem.
Furthermore, you do not need to specify any spar matrices to u a large-scale algorithm. Choo 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-t’;
合适的时候使⽤‘trust-region-reflective’,问题必须满⾜:⽬标函数包含了梯度,边界和线性约束只能存在⼀个;
When the Solver Fails
1.开启Iterative Display
options = 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 lityTolerance, and maximum constraint violation
was less aintTolerance.
First-order optimality measure⼩于lityTolerance,并且maximum constraint violation⼩于
aintTolerance
在实验中发现,返回的exitflag是0时(表⽰超过最⼤迭代数),⼤部分的⾮线性约束的不等式的值⼩于0,部分等于0,其实已经满⾜的条件,
但是程序仍然进⾏迭代运算,直到超过最⼤迭代数,⽽且后期每次迭代的约束⽅程的值和⽬标函数已经不发⽣变化后期每次迭代的约束⽅程的值和⽬标函数已经不发⽣变化。此时认为已经满⾜了约
束。
另⼀种情况是,exitflag为0,但是某些⾮线性约束的不等式⽅程的值⼤于0,此时没有满⾜约束。
所以exitflag = 0包含了两种情况。
可以通过观察First-order optimality measure,将OptimalityTolerance调⼤,可以将第⼀种情况分离开来。
‘Solver Takes Too Long’
未完待续

本文发布于:2023-05-26 04:30:53,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/zhishi/a/168504665418335.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:约束非线性规划工具-fmincon(matlab)的使用.doc
本文 PDF 下载地址:约束非线性规划工具-fmincon(matlab)的使用.pdf
| 留言与评论(共有 0 条评论) |