• 水阳小孬板
    了解作者
  • matlab
    开发工具
  • 2KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 10 积分
    下载积分
  • 27
    下载次数
  • 2017-11-19 11:24
    上传日期
可进行大地电磁一维PSO反演计算,计算视电阻率
大地电磁一维PSO反演.rar
  • Test.m
    4.3KB
  • SearchBest.m
    355B
  • F_target.m
    117B
  • mt1d.m
    597B
  • CalculateFitnessValue.m
    229B
内容介绍
clear clc % 做一次正演 lambda=[50,200,10,500,300]; rhos=mt1d(lambda); % 加误差 % rhos=rhos+0.05.*(-1+2.*rand(size(rhos))).*rhos; % 开始粒子群优化算法 SwarmSize=200; Dimensionality=5; lambda_min=[0,0,0,300,100]; lambda_max=[200,500,20,700,500]; Swarm=zeros(SwarmSize,Dimensionality); vactor=zeros(SwarmSize,Dimensionality); FitnessValue=zeros(SwarmSize,1); newFitnessValue=FitnessValue; % v_min=[0,0,0,0,0]; v_max=[0.5,0.5,0.5,0.5,0.5]; v_min=-v_max; w=0.729;%惯性权重 MaxW=0.95; MinW=0.4; c1=2;%加速因子 c2=2; % c1_min=2; % c1_max=4; % c2_min=1; % c2_max=4; r=1;%约束因子 LoopCount=1500; e=1; % 初始化粒子群 for i=1:SwarmSize Swarm(i,:)=lambda_min+(lambda_max-lambda_min).*rand(1,Dimensionality); vactor(i,:)=v_min+(v_max-v_min).*rand(1,Dimensionality); FitnessValue(i,1)=CalculateFitnessValue( rhos,Swarm(i,:) ); end % 把第一个解作为历史最优解 optSwarmHistory=Swarm; % 寻找适値最大值所对应的粒子,并作为全局最优粒子 [ optSwarmAll,bestFitnessValue ] = SearchBest( Swarm,FitnessValue ); t=0; tmax=1500; eps=1e-4; while(e(end)>eps) % for t=1:LoopCount %速度更新 for i=1:SwarmSize % w=MaxW-t*((MaxW-MinW)/LoopCount); % c1=c1_min+(c1_max-c1_min)*t/LoopCount; % c2=c2_min+(c2_max-c2_min)*t/LoopCount; % vactor(i,:)=w*vactor(i,:)+c1*rand(1,Dimensionality).*(optSwarmHistory(i,:)-Swarm(i,:))+c2*rand(1,Dimensionality).*(optSwarmAll-Swarm(i,:)); % vactor(i,:)=w*vactor(i,:)+c1*rand().*(optSwarmHistory(i,:)-Swarm(i,:))+c2*rand().*(optSwarmAll-Swarm(i,:)); vactor(i,:)=w*vactor(i,:)+c1*rand().*(optSwarmHistory(i,:)-Swarm(i,:))+c2*rand().*(optSwarmAll-optSwarmHistory(i,:)); %如果速度超过范围,则置为最大值 for j=1:Dimensionality if(vactor(i,j)>v_max(j)) vactor(i,j)=v_max(j); elseif(vactor(i,j)<v_min(j)) vactor(i,j)=v_min(j); end end Swarm(i,:)=Swarm(i,:)+r*vactor(i,:); %如果粒子超过范围,则置为最大值/重新随机放置 for j=1:Dimensionality if(Swarm(i,j)>lambda_max(j)) % Swarm(i,j)=lambda_max(j); Swarm(i,j)=lambda_min(j)+(lambda_max(j)-lambda_min(j))*rand(); elseif(Swarm(i,j)<lambda_min(j)) % Swarm(i,j)=lambda_min(j); Swarm(i,j)=lambda_min(j)+(lambda_max(j)-lambda_min(j))*rand(1,Dimensionality); end end newFitnessValue(i,1)=CalculateFitnessValue( rhos,Swarm(i,:) ); %更新历史最优解 if(newFitnessValue(i,1)>FitnessValue(i,1)) FitnessValue(i,1)=newFitnessValue(i,1); optSwarmHistory(i,:)=Swarm(i,:); end %如果速度全部为0,则重新初始化 % if(vactor(i,:)==zeros(1,Dimensionality)) % vactor(i,:)=v_min+(v_max-v_min).*rand(1,Dimensionality); % end end %更新全局最优解 [ optSwarmAll,bestFitnessValue ] = SearchBest( optSwarmHistory,FitnessValue ); t=t+1; e(t) = F_target( rhos,optSwarmAll ); figure(1) plot(e) title('目标函数变化曲线') xlabel('迭代次数') ylabel('目标函数值') if(t>tmax) break; end % end end figure(2) semilogx(rhos,'b*-','LineWidth',1.5); hold on rhos2=mt1d(optSwarmAll); semilogx(rhos2,'r--','LineWidth',1.5) title('MT粒子群优化算法一维反演对比') xlabel('时间T/s') ylabel('视电阻率') legend('模型理论正演曲线','粒子群优化算法反演模型正演曲线',0) figure(3) % 绘制模型对比阶梯图 Index=(Dimensionality+1)/2; hhh=cumsum(lambda(Index+1:end)); rho_i=lambda(1:Index); h=[1,hhh,2*(hhh(end))]; rho=[rho_i,rho_i(end)]; stairs(h,rho,'b-*','LineWidth',1.5); hold on hh=cumsum(optSwarmAll(Index+1:end)); h1=[1,hh,2*(hh(end))]; rho1=[optSwarmAll(1:Index),optSwarmAll(Index)]; stairs(h1,rho1,'r--o','LineWidth',1.5); set(gca, 'XLim',[0 2*(hh(end))]);set(gca, 'YLim',[0 max([rho1,rho])+5]); xlabel('深度Depth/m') ylabel('视电阻率\rho_a/(\Omega·m)') title('粒子群优化算法反演模型与实际模型对比'); legend('理论模型','反演模型',0);
评论
    相关推荐
    • PSO.rar
      标准PSO 测试函数需要自行输入 一共1+4个m文件
    • pso.zip
      pso算法实现路径规划,包括计算公式,初始化,画图等
    • pso.zip
      使用matlab实现PSO算法,并通过一个简单的优化函数说明使用方法
    • PSO.zip
      PSO实现粒子群算法,可以完成的完成运行,不会出错误
    • pso.rar
      PSO是粒子群优化算法(——Particle Swarm Optimization)的英文缩写,是一种基于种群的随机优化技术,由Eberhart和Kennedy于1995年提出。粒子群算法模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作...
    • PSO优化SVM
      PSO-SVR预测,求解误差参数MSE作为适应度函数
    • PSO.rar
      pso-粒子蚁群算法,一种适者生存的算法筛选过程
    • pso.zip
      使用粒子群算法求解最优值,使用C++编写
    • PSO.zip
      粒子群优化算法的原理及算例,适合初学者。。。。。。。。。。。。
    • PSO.zip
      实现了简单的粒子群算法,其参数(如维度、实验样本、轮次、w)可调