function y = fun(x)
y=-20*exp(-0.2*sqrt((x(1)^2+x(2)^2)/2))-exp((cos(2*pi*x(1))+cos(2*pi*x(2)))/2)+20+2.71289
%下面是主程序
%% 清空环境
clc
clear
%% 参数初始化
%粒子群算法中的两个参数
c1 = 1.49445
c2 = 1.49445
maxgen=200 % 进化次数
sizepop=20 %种群规模
Vmax=1%速度限制
Vmin=-1
popmax=5%种群限制
popmin=-5
%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=5*rands(1,2) %初始种群
V(i,:)=rands(1,2) %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:)) %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(fitness)
zbest=pop(bestindex,:) %全局最佳
gbest=pop %个体最佳
fitnessgbest=fitness %个体最佳适应度值
fitnesszbest=bestfitness %全局最佳适应度值
%% 迭代寻优
for i=1:maxgen
for j=1:sizepop
%速度更新
V(j,:) = V(j,:) + c1*rand*(gbest(j,:) - pop(j,:)) + c2*rand*(zbest - pop(j,:))
V(j,find(V(j,:)>Vmax))=Vmax
V(j,find(V(j,:)<Vmin))=Vmin
%种群更新
pop(j,:)=pop(j,:)+0.5*V(j,:)
pop(j,find(pop(j,:)>popmax))=popmax
pop(j,find(pop(j,:)<popmin))=popmin
%自适应变异(避免粒子群算法陷入局部最优)
if rand>0.8
k=ceil(2*rand)%ceil朝正无穷大方向取整
pop(j,k)=rand
end
%适应度值
fitness(j)=fun(pop(j,:))
%个体最优更新
if fitness(j) <fitnessgbest(j)
gbest(j,:) = pop(j,:)
fitnessgbest(j) = fitness(j)
end
%群体最优更新
if fitness(j) <fitnesszbest
zbest = pop(j,:)
fitnesszbest = fitness(j)
end
end
yy(i)=fitnesszbest
end
%% 结果分析
plot(yy)
title(['适应度曲线 ' '终止代数=' num2str(maxgen)])
xlabel('进化代数')ylabel('适应度')
matlab最优化程序包括无约束一维极值问题 进退法 黄金分割法 斐波那契法 牛顿法基本牛顿法 全局牛顿法 割线法 抛物线升渣销法 三次插值法 可接受搜索法 Goidstein法 Wolfe.Powell法
单纯形搜索法 Powell法 最速下降法 共轭梯度法 牛顿梁返法 修正牛顿法 拟牛顿法 信赖域法 显式最速下降法, Rosen梯度投影法 罚函数法 外点罚函数法
内点罚函数法 混合罚函数法 乘子法 G-N法 修正G-N法 L-M法 线性规划 单纯形法 修正单纯形法 大M法 变量有界单纯形法 整数规划 割平面法 分支定界法 0-1规划 二次规划
拉格朗曰法 起作用集算法 路径跟踪法 粒子群优化算法 基本粒子群算法 带压缩因子的粒子群吵游算法 权重改进的粒子群算法 线性递减权重法 自适应权重法 随机权重法
变学习因子的粒子群算法 同步变化的学习因子 异步变化的学习因子 二阶粒子群算法 二阶振荡粒子群算法
例1 求 f = 2 在0<x<8中的最小值与最大值主程序为wliti1.m:
f='2*exp(-x).*sin(x)'
fplot(f,[0,8])%作图语句
[xmin,ymin]=fminbnd (f, 0,8)
f1='-2*exp(-x).*sin(x)'
[xmax,ymax]=fminbnd (f1, 0,8)
运行结果:
xmin = 3.9270ymin = -0.0279
xmax = 0.7854 ymax = 0.6448
★(借助课件说明过程、作函数的图形)
例2 对边长为3米的正方形铁板,在四个角剪去相等的正方形以制成方形无盖水槽,问如何剪法使卖仿卖水槽的容积最大?
设剪去的正方形的边长为x,则水槽的容积为: ,建立无约束优化模型为:min y=- , 0<x<1.5
先编写M文件fun0.m如下:
function f=fun0(x)
f=-(3-2*x).^2*x
主程序为wliti2.m:
[x,fval]=fminbnd('fun0',0,1.5)
xmax=x
fmax=-fval
运算结果为: xmax = 0.5000,fmax =2.0000.即剪掉的正方形的边长为0.5米时水槽的容积最大,最大容积为2立方米.
★(借助课件说明过程、作函数的图形、并编制计算程序)
例3
1、编写M-文件 fun1.m:
function f = fun1 (x)
f = exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)
2、输入M文件wliti3.m如下:
x0 = [-1, 1]
x=fminunc(‘fun1’,x0)
y=fun1(x)
3、运行结果:
x= 0.5000 -1.0000
y = 1.3029e-10
★(借助课件说明过程、作函数的图形并编制计算程序)
例4 Rosenbrock 函数 f(x1,x2)=100(x2-x12)2+(1-x1)2 的最优解(极小)为x*=(1,1),极小值为f*=0.试用不同算法(搜索方向和步长搜索)求数值最优解.初值选为x0=(-1.2 , 2).
为获得直观认识,先画出Rosenbrock 函数的三维图形, 输入以下命令:
[x,y]=meshgrid(-2:0.1:2,-1:0.1:3)
z=100*(y-x.^2).^2+(1-x).^2
mesh(x,y,z)
画出Rosenbrock 函数的等高线图,输入命令中逗:
contour(x,y,z,20)
hold on
plot(-1.2,2,' o ')
text(-1.2,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, [-1.2 2])
运行结果:
x =1.00001.0000
fval =1.9151e-010
exitflag = 1
output =
iterations: 108
funcCount: 202
algorithm: 'Nelder-Mead simplex direct search'
★(借助课件说明过程、作函数的图形并编制计算程序)
(五)、 作业
陈酒出售的最佳时机问题
某酒厂有批新酿的好酒,如果现在就出售,可得总收入R0=50万元(人民币),如果窖藏起来待来日(第n年)按陈酒价格出售,第n年末可得总收入 (万元),而银行利率为r=0.05,试分析这批好酒窖藏多少年后出售可使总收入的现值最大. (假设现有资金X万元,将大掘其存入银行,到第n年时增值为R(n)万元,则称X为R(n)的现值.)并填下表:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)