在实际的工作和生活过程中,优化问题无处不在,比如资源如何分配效益最高,拟合问题,最小最大值问题等等。优化问题一般分为尺核局部最优和全局最优,局部最优,就是在函数值空间的一个有限区域内寻找最小值;而全局最优,是在函数值空间整个区域寻找最小值问题。
matlab中的提供的传统优化工具箱(Optimization Tool),能实现局部最优,但要得全局最优,则要用全局最优化算法(Global Optimization Tool),主要包括:
GlobalSearch 全局搜索和 MultiStart 多起点方法产生若干起始点,然后它们用局部求解器去找到起始点吸引盆处的最优点。
ga 遗传算法用一组起始点(称为种群),通过迭代从种群中产生更好的点,只要初始种群覆盖几个盆,GA就能检查几个盆。
simulannealbnd 模拟退火完成一个随机搜索,通常,模拟退火算法接受一个点,只要这个点比前面那个好,它也偶而接受一个比较糟的点,目的是转向不同的盆。
patternsearch 模式搜索算法在接受一个点之前要看看其附近的一组点。假如附近的某些点属于不同的盆,模式搜索算法本质上时同时搜索若干个盆。
下面我就一些具体例子,来说明各种优化方法:
可以看出,初值x0不同,得到的结果侍孙截然不同,这说明这种求解器,能寻找局部最优,但不一定是全局最优,在起点为8时,取得全局最优。
我们换一种求解器:fminbound,这种求解器不需要给点初值。
因此全局最优的方法能够获取全局最优。
结果:最小二乘拟合结果误差较大
可以陵谈掘看出全局优化结果较好,误差较小。
这种算法的运行时间:Elapsed time is 6.139324 seconds.
使用并行计算的方式解决
结果:14 out of 100 local solver runs converged with a positive local solver exit flag.
Elapsed time is 4.358762 seconds.Sending a stop signal to all the labs ... stopped.可以看出,运行时间减少,提高了效率。
这种方法只能寻找局部最优。
现在用全局优化算法:
%不知道你具体的问题是什么,下面是一个最基本的pso算法解决函数极值问题,如雀基果是一些大型的问题,需要对速度、惯性顷毕谨常数、和自适应变数游异做进一步优化,希望对你有帮助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规划 二次规划
拉格朗曰法 起作用集算法 路径跟踪法 粒子群优化算法 基本粒子群算法 带压缩因子的粒子群吵游算法 权重改进的粒子群算法 线性递减权重法 自适应权重法 随机权重法
变学习因子的粒子群算法 同步变化的学习因子 异步变化的学习因子 二阶粒子群算法 二阶振荡粒子群算法
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)