Matlab优化工具箱和模拟退火算法
Matlab优化工具箱主要有以下4种求解器:
1.最小值优化
2.多目标最小值优化
3.方程求解器
4.最小二乘(曲线拟合)求解器
一.最小值优化:
1.标量最小值优化:使用函数fminbnd
例:对边长为3m的正方形铁板,在4个角处剪去相等的正方形,以制成方形无盖水槽,问如何剪才能使水槽的容积最大?
方程:V=(3-2x)^2x
function f = myfun1(x)
f = -(3-2*x).^2 * x; % 由于fminbnd只能用来计算最小值,所以这里加负号x = fminbnd(@myfun1,0,1.5)
% x = fminbnd(fun,x1,x2):返回标量函数fun在条件x1 < x < x2下取最小值时自变量x的值
y= -myfun1(x) % 调用myfun1函数来计算水槽的最大容积
2.无约束最小值优化:使用函数fminunc和fminsearch
例:求函数f(x)=3x1^2+2x1x2+x2^2最小值
function f = myfun2(x)
f = 3*x(1)^2 + 2*x(1)*x(2) + x(2)^2; % 目标函数x0 = [1,1]; % 初始值,可以是标量,向量,矩阵,即从这个值开始找,不熟悉的话可以多试几次,取最优的
[x,fval] = fminunc(@myfun2,x0) % x为自变量,fval为函数值
例:求banana方程的最小值(banana方程:f(x)=100(x2-x1^2)^2+(a-x1)^2,在指定a的情况下求这个方程的最小值)
a=3;
banana = @(x)100*(x(2)-x(1)^2)^2+(a-x(1))^2; % 快速获得函数句柄
options = optimset('Display','iter','PlotFcns',@optimplotfval); % 设置一些参数,将Display参数设置为'iter',利用optimplotfval来进行画图,'PlotFcns'是画图参数
[x,fval,exitflag,output] = fminsearch(banana, [-1.2, 1], options) % exitflag退出标志,程序运行结束的信息,output是一些输出信息
% 也可以这样(不加TolX的话)
% [x,fval,exitflag,output] = fminsearch(banana, [-1.2, 1], ...optimset('TolX',1e-8,'Display','iter','PlotFcns',@optimplotfval))
% optimset('TolX',1e-8)用来设置算法终止误差,即设置精度,到这个精度就可以停了
3.线性规划:使用linprog函数
例:求如下函数的最小值
f = [-5; -4; -6]; % 用矩阵表示目标函数
A = [1 -1 13 2 43 2 0]; % 用矩阵形式表示约束条件系数,注意换行也表示;
b = [20; 42; 30]; % 约束条件
lb = zeros(3,1); % 下界约束
[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
% "[] []"表示的是等式约束,这里没有等式,所以用空矩阵,lb后面还可以加上界约束,但没有,所以可以省略
% Lambda保存的一些约束信息,Lambda域中向量里的非零元素可以反映出求解过程中的主动约束。在本例的结果中可以看出,第2个和第3个不等式约束(lambda.ineqlin)和第1个下界约束(lambda.lower)是主动约束
二次规划:使用quadprog函数
例:求下面函数的最小值
首先将方程写成矩阵形式
(x的指数为2)
H = [1 -1; -1 2];
f = [-2; -6];
A = [1 1; -1 2; 2 1]; % 线性不等式约束
b = [2; 2; 3]; % 线性不等式约束
lb = zeros(2,1);
[x,fval,exitflag,output,lambda] = quadprog(H,f,A,b,[],[],lb)
4.有约束最小值优化:使用函数fmincon
例:求函数f(x)=-x1x2x3的最小值,搜索的起始值为x=[10;10;10],同时目标函数中的变量要服从以下约束条件:
function f = myfun3(x)
f = -x(1) * x(2) * x(3);
约束条件改为
x0 = [10; 10; 10]; % 求解的起始点
A=[-1 -2 -2;1 2 2];
b=[0;72];
[x,fval] = fmincon(@myfun3,x0,A,b)
5.另外两种极小值优化问题:
半无限问题:fseminf
0-1规划:bintprog
请查阅帮助文档或者其他参考书
二.多目标优化:使用fgoalattain和fminimax函数
例:某工厂因生产需要欲采购一种原材料,市场上这种原材料有两个等级,甲级单价2元/千克,乙级单价1元/千克。要求所花总费用不超过200元,购得原材料总量不少于100千克,其中甲级原材料不少于50千克,问如何确定最好的采购方案。
设x1、x2分别为采购甲级和乙级原材料的数量(千克),要求总采购费用尽量少,总采购重量尽量多,采购甲级原材料尽量多
function f=myfun4(x)
f(1)=2*x(1)+ x(2); % 总花费
f(2)=-x(1)- x(2); % 总重量
f(3)=-x(1); % 甲级材料重量
%注意和下面的一一对应关系goal=[200 -100 -50]; % 要达到的目标
weight=[2040 -100 -50]; % 各个目标的权重,自己根据经验定
x0=[55 55]; % 搜索的初始值
% 约束条件
A=[2 1;-1 -1;-1 0];
b=[200 -100 -50]; % 它们的正负需要把方程转化为标准形式才能确定,必须是小于
lb=zeros(2,1);
% 调用fgoalattain函数进行多目标优化
[x,fval,attainfactor,exitflag] =...
fgoalattain(@myfun4,x0,goal,weight,A,b,[],[],lb,[])
fminimax函数用法查阅文档
三.方程组求解:
优化工具箱提供了3个方程求解的函数,其中,“\”算子可用于求解线性方程组Cx=d。当矩阵为n阶方阵时,采用高斯消元法进行求解;如果A不为方阵,则采用数值方法计算方程最小二乘意义上的解。fzero采用数值解法求解非线性方程,fsolve函数则采用非线性最小二乘算法求解非线性方程组
例:求解下面方程组的根,其中包含两个未知数、两个方程
方程组变换
function F = myfun5(x)
F = [2*x(1) - x(2) - exp(-x(1));-x(1) + 2*x(2) - exp(-x(2))];x0 = [-5; -5]; % 猜测的搜索初始值
options=optimset('Display','iter'); % 输出显示选项设置
[x,fval] = fsolve(@myfun5,x0,options) % 调用fsolve命令
fzero和“\”自行查阅文档
四.最小二乘及数据拟合:常用函数有\、lsqnonneg、lsqlin、lsqnonlin、lsqcurvefit等
例(伪):
求超定系统(未知数小于方程数)C·x = d的最小二乘解,约束条件为A·x≤b,lb≤x≤ub(具体的系数矩阵、边界条件如下所示)
首先输入系数矩阵和上下边界
C = [0.9501 0.7620 0.6153 0.40570.2311 0.4564 0.7919 0.93540.6068 0.0185 0.9218 0.91690.4859 0.8214 0.7382 0.41020.8912 0.4447 0.1762 0.8936];
d = [0.05780.35280.81310.00980.1388];
A =[0.2027 0.2721 0.7467 0.46590.1987 0.1988 0.4450 0.41860.6037 0.0152 0.9318 0.8462];
b =[0.52510.20260.6721];
lb = -0.1*ones(4,1);
ub = 2*ones(4,1);[x,resnorm,residual,exitflag,output,lambda] = ...lsqlin(C,d,A,b,[],[],lb,ub);
% resnorm=norm(C*x-d)^2,即2-范数
% residual=C*x-d,即残差
x,lambda.ineqlin,lambda.lower,lambda.upper % 查看计算的结果
其它函数请自行查阅文档
模拟退火:
dejong5fcn % 优化测试函数
fun = @dejong5fcn; % 目标函数
[x,fval] = simulannealbnd(fun,[0 0]) % 目标函数、初始点% 如果有绘图
options = saoptimset('PlotFcns',{@saplotbestx,@saplotbestf,@saplotx,@saplotf});
%第一个绘图函数是最优的函数值对应的x点,第二个是最优的函数值,第三个是当前的x,第四个是当前的函数值
% 如果有上下限约束
x0 = [0,0];
lb = [-64,-64];
ub = [64,64];
x = simulannealbnd(fun,x0,lb,ub,options)
例:
求min f(x) = (4 - 2.1*x1^2 + x1^4/3)*x1^2 + x1*x2 + (-4 + 4*x2^2)*x2^2
写成函数形式
function y = simple_objective(x)y = (4 - 2.1*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-4 + 4*x(2)^2)*x(2)^2;ObjectiveFunction = @simple_objective;
X0 = [0.5 0.5]; % 初始点
[x,fval,exitFlag,output] = simulannealbnd(ObjectiveFunction,X0)% 如果有上下限约束
lb = [-64 -64];
ub = [64 64];
[x,fval,exitFlag,output] = simulannealbnd(ObjectiveFunction,X0,lb,ub);
例:
求min f(x) = (a - b*x1^2 + x1^4/3)*x1^2 + x1*x2 + (-c + c*x2^2)*x2^2
写成函数形式
function y = parameterized_objective(x,a,b,c)y = (a - b*x(1)^2 + x(1)^4/3)*x(1)^2 + x(1)*x(2) + (-c + c*x(2)^2)*x(2)^2;a = 4; b = 2.1; c = 4; % define constant values
ObjectiveFunction = @(x) parameterized_objective(x,a,b,c);
X0 = [0.5 0.5];
[x,fval] = simulannealbnd(ObjectiveFunction,X0)
Matlab优化工具箱和模拟退火算法相关推荐
- MATLAB优化工具箱 粒子群算法 particleswarm优化包
记录几篇对我应用MATLAB粒子群particleswarm优化包很有帮助的文档. [1] <Tune Particle Swarm Optimization Process>matlab ...
- Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划
Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划 目录 PrA之nLP非线性规划算法 操作图文教程 PrA之nLP非线性规划算法 (1).编写M ...
- 利用Matlab优化工具箱解数独问题
前一阵使用Matlab的优化工具箱,发现可以求解数独问题,有意思!实际上,Matlab优化工具箱有两个:Optimization Toolbox和Global Optimization Toolbox ...
- 最优化问题的Matlab优化工具箱求解总结
第一次发文,个人总结,可以一起讨论,如有问题,感谢指出. 1.常规算法 MATLAB 目标函数 约束条件 决策变量 非线性 多目标 上下界 线性 非线性 整数 无初始值 linprog √ √ √ i ...
- help efun matlab,Matlab优化工具箱在函数最值求解中的应用.pdf
Matlab优化工具箱在函数最值求解中的应用.pdf 系 统 解 决 方 案 Matlab优化工具箱在函数最值求解中的应用 彭东海 (中山职业技术学院数学教研室,广 东 中山 528404) 摘 要 ...
- 非线性优化汇总——Matlab优化工具箱(持续更新中)
非线性优化汇总--Matlab优化工具箱(持续更新中) 室内定位/导航/优化技术探讨:WX: ZB823618313 原创不易,路过的各位大佬请点个赞 目录 非线性优化汇总--Matlab优化工具箱( ...
- MATLAB优化工具箱—Optimization Toolbox™
Optimization Toolbox™ 提供了寻找最小化或最大化目标并同时满足约束条件的函数.工具箱中包括了线性规划 (LP).混合整数线性规划 (MILP).二次规划 (QP).非线性规划 (N ...
- Matlab优化工具箱——Optimization Toolbox
最优化模型的一般形式: 一.三大要素 决策变量 decision bariable 式(1)称为目标函数 objective function 式(2)称为约束条件 constraints (2 ...
- matlab优化工具箱笔记(1)
1.线性规划 [x,fval]=linprog(c,A,b,Aeq,Beq,VLB,VUB) 用于解决 min(z)=cX%%求满足条件的X与已定系数c乘积之和的最小值 s.t. AX<=b ...
最新文章
- VC2010 编译问题
- 006_Topic消息模式发送对象消息
- linux系统下pid的取值范围了解一下
- GWT与Eclipse集成开发初步研究
- 利用JavaScript在ASP.NET中动态生成系统菜单
- 2018计算机领域大事件,吕伟:2018年计算机行业回顾
- mysql报错排查总结
- 【javascript】异步编年史,从“纯回调”到Promise
- php中什么是函数函数的意义是什么,php中arsort函数的功能起什么作用呢?
- 男孩684分被清华预录取, 他的故事感动中国
- log4j记录exception异常有价值信息及log4j级别
- 牛客OI周赛6-提高组 B 践踏
- 淘宝客优惠券领取微信小程序前台和后台源码
- java运行 .class文件_运行java的class文件方法详解
- python问题解答网站_python问题解答网站
- Conflicted Confucians
- opencv-车辆牌照识别(一)
- 视频教程-WebGL 可视化3D绘图框架:Three.js 零基础上手实战-其他
- ATF官方文档翻译(二):Authentication Framework Chain of Trust(身份验证框架和信任链)(3)
- java 前置_java – 何时添加前置条件以及何时(仅)抛出异常?
热门文章
- 如何有效提升英文口语水平?这 15 个方法值得学习!
- 用HTML实现网上购物页面
- 虾米音乐关停,QQ音乐、网易云上线虾米歌单迁移功能
- 基于单片机音频放大器声控灯控制电路设计(毕设课设资料)
- Keil5 出现error: #28:expression must have a constant value的解决办法
- 前嗅教程:通过子栏目进入链接列表采集正文数据
- time.After巧妙的超时控制
- 8086/8088CPU内部结构,引脚图,物理地址与逻辑地址
- C# - 音乐小闹钟_BetaV2.0
- 如何迁移系统的详细步骤