
matlab最优化程序包括
无约束一维极值问题 进退法 黄金分割法 斐波那契法 牛顿法基本牛顿法 全局牛顿法 割线法 抛物线法 三次插值法 可接受搜索法 Goidstein法 WolfePowell法
单纯形搜索法 Powell法 最速下降法 共轭梯度法 牛顿法 修正牛顿法 拟牛顿法 信赖域法 显式最速下降法, Rosen梯度投影法 罚函数法 外点罚函数法
内点罚函数法 混合罚函数法 乘子法 G-N法 修正G-N法 L-M法 线性规划 单纯形法 修正单纯形法 大M法 变量有界单纯形法 整数规划 割平面法 分支定界法 0-1规划 二次规划
拉格朗曰法 起作用集算法 路径跟踪法 粒子群优化算法 基本粒子群算法 带压缩因子的粒子群算法 权重改进的粒子群算法 线性递减权重法 自适应权重法 随机权重法
变学习因子的粒子群算法 同步变化的学习因子 异步变化的学习因子 二阶粒子群算法 二阶振荡粒子群算法
出错原因:下列的函数表达式定义错误,
x=fmincon('((-3x(1)+2x(2)+fval1)^2+(4x(1)+3x(2)+fval2)^2)^(1/2)',x0,A,b,[],[],lb,[])
纠正方法,用句柄函数来定义函数表达式,即
@(x)((-3x(1)+2x(2)+fval1)^2+(4x(1)+3x(2)+fval2)^2)^(1/2)
完整写法如下,
x=fmincon(@(x)((-3x(1)+2x(2)+fval1)^2+(4x(1)+3x(2)+fval2)^2)^(1/2),x0,A,b,[],[],lb,[])
更改后运行,可得到
x1 = 01756;x2= 58829
用matlab求解题主的多目标优化问题,可以这样来考虑:
1、创建目标函数,其内容
w1 =04;w2=1-w1;
y =w1078539(x(1)^2-x(2)^2)+w2x(1)^2;
2、创建约束条件函数,其内容
c(1)=(9224400x(1)/(x(1)^4-x(2)^4))-45;
c(2)=(13050819/(x(1)^4-x(2)^4))-1;
c(3)=216379-(x(1)^4-x(2)^4)/x(1);
c(4)=-x(1)+x(2);
ceq = [];
3、初设x0的初值,即 x0 =[80,20];
4、设定上下限值,即lb=[0,0]; ub=[170,100];
5、使用fmincon最小值最优化函数,求出x(1)、x(2)的值。即
[x,fval] = fmincon(@(x) fmincon_fun(x),x0,[],[],[],[],lb,ub,@(x) fmincon_con(x))
6、验证约束条件,即
disp('x2-x1<0')
disp(x(2)-x(1))
运行代码后得到如下结果。
、线性规划
[x,fval]=linprog(c,A,b,Aeq,Beq,VLB,VUB)
用于解决
min(z)=cX%%求满足条件的X与已定系数c乘积之和的最小值
st
AX<=b %不定约束
AeqX=Beq %定约束
VLB<=X<=VUB %天花板约束
几个方面:
1、最大的问题是循环体里面的 pause(01),尤其是里面那一层循环。
2、很多赋值语句后面应该加分号,避免显示。
3、数组预置(对于这段代码而言不是很重要)。
里面那层的pause是在这样的循环结构中:
for k=1:10;i=i+1;
for x=2:z-1;
for y=2:z-1;
粗略估算一下,会执行101818次,每次01秒,仅这一句就会耗时324秒。
删除上述pasue之后,在我的电脑上运行大约需要27秒。
有多处赋值语句的尾部没有使用分号,导致数组在命令窗口中回显,这也会占用很多时间。那些语句就不一一列举了,修改后的代码如下:
clear all;clc;z=20;i=0;
a=cat(3,rand(z),rand(z),zeros(z));
b=a(:,:,1);%HSI
c=a(:,:,2);%生物量
imh=image(cat(3,c,zeros(z),zeros(z)));%先生成一个图像
for k=1:10;
i=i+1;
for x=2:z-1;
for y=2:z-1;
d{x,y}=[b(x-1,y-1),b(x-1,y),b(x-1,y+1);
b(x,y-1),b(x,y),b(x,y+1);
b(x+1,y-1),b(x+1,y),b(x+1,y+1)];%表示周围8个HSI
e{x,y}=[c(x-1,y-1),c(x-1,y),c(x-1,y+1);
c(x,y-1),1,c(x,y+1);
c(x+1,y-1),c(x+1,y),c(x+1,y+1)];%表示周围8个生物量
while c(x,y)>0&&min(min(e{x,y}))<1&&min(min(d{x,y}))~=0&&c(x,y)~=0%如果当前位置(x,y)生物量大于0,并且
%该位置周围8个网格生物量有小于环境容纳量,
%并且,周围8个网格最小适宜度值不等于0
%并且,当前位置生物量不等于0的情况
[m,n]=find(d{x,y}==max(max(d{x,y})));%获取周围8个网格最大的HSI,确定迁移方向
if isequal([m,n],[x,y])%如果目标单元是当前位置,即m,n和x,y相等
c(m,n)=c(x,y);%那么生物量不迁移
set(imh,'cdata',cat(3,c,zeros(z),zeros(z)));
break
else
if c(m,n)<1%判定目标单元生物量是否饱和,若不饱和
c(m,n)=c(m,n)+c(x,y);%目标单元生物量等于已有+迁移的(x,y)的生物量
if c(m,n)>1
c(m,n)=1;
end
c(x,y)=1-c(m,n);
if c(x,y)>=0
c(x,y)=0;%迁移过后命令该点生物量等于零
set(imh,'cdata',cat(3,c,zeros(z),zeros(z)));
break
else
c(x,y)=c(m,n)-1;
end
else
d{x,y}(m,n)=0;%若饱和了,重新选择方向,命令目标单元HSI=0重新选择方向
end
end
end
% pause(01)
end
end
set(imh,'cdata',cat(3,c,zeros(z),zeros(z)));
pause(01)
end
i
这样修改之后,在我的电脑上运行至需要大约13秒。如果再把最后的一个pause删掉,则仅需大约03秒。
例1 求 f = 2 在0<x<8中的最小值与最大值
主程序为wliti1m:
f='2exp(-x)sin(x)';
fplot(f,[0,8]); %作图语句
[xmin,ymin]=fminbnd (f, 0,8)
f1='-2exp(-x)sin(x)';
[xmax,ymax]=fminbnd (f1, 0,8)
运行结果:
xmin = 39270 ymin = -00279
xmax = 07854 ymax = 06448
★(借助课件说明过程、作函数的图形)
例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使水槽的容积最大?
设剪去的正方形的边长为x,则水槽的容积为: ,建立无约束优化模型为:min y=- , 0<x<15
先编写M文件fun0m如下:
function f=fun0(x)
f=-(3-2x)^2x;
主程序为wliti2m:
[x,fval]=fminbnd('fun0',0,15);
xmax=x
fmax=-fval
运算结果为: xmax = 05000,fmax =20000即剪掉的正方形的边长为05米时水槽的容积最大,最大容积为2立方米
★(借助课件说明过程、作函数的图形、并编制计算程序)
例3
1、编写M-文件 fun1m:
function f = fun1 (x)
f = exp(x(1))(4x(1)^2+2x(2)^2+4x(1)x(2)+2x(2)+1);
2、输入M文件wliti3m如下:
x0 = [-1, 1];
x=fminunc(‘fun1’,x0);
y=fun1(x)
3、运行结果:
x= 05000 -10000
y = 13029e-10
★(借助课件说明过程、作函数的图形并编制计算程序)
例4 Rosenbrock 函数 f(x1,x2)=100(x2-x12)2+(1-x1)2 的最优解(极小)为x=(1,1),极小值为f=0试用不同算法(搜索方向和步长搜索)求数值最优解初值选为x0=(-12 , 2)
为获得直观认识,先画出Rosenbrock 函数的三维图形, 输入以下命令:
[x,y]=meshgrid(-2:01:2,-1:01:3);
z=100(y-x^2)^2+(1-x)^2;
mesh(x,y,z)
画出Rosenbrock 函数的等高线图,输入命令:
contour(x,y,z,20)
hold on
plot(-12,2,' o ');
text(-12,2,'start point')
plot(1,1,'o')
text(1,1,'solution')
f='100(x(2)-x(1)^2)^2+(1-x(1))^2';
[x,fval,exitflag,output]=fminsearch(f, [-12 2])
运行结果:
x =10000 10000
fval =19151e-010
exitflag = 1
output =
iterations: 108
funcCount: 202
algorithm: 'Nelder-Mead simplex direct search'
★(借助课件说明过程、作函数的图形并编制计算程序)
(五)、 作业
陈酒出售的最佳时机问题
某酒厂有批新酿的好酒,如果现在就出售,可得总收入R0=50万元(人民币),如果窖藏起来待来日(第n年)按陈酒价格出售,第n年末可得总收入 (万元),而银行利率为r=005,试分析这批好酒窖藏多少年后出售可使总收入的现值最大 (假设现有资金X万元,将其存入银行,到第n年时增值为R(n)万元,则称X为R(n)的现值)并填下表:
以上就是关于matlab最优化算法有哪些全部的内容,包括:matlab最优化算法有哪些、matlab多目标优化求解的例子、求matlab计算多目标优化问题。等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)