阅读 39

【优化求解】基于matlab罚函数的粒子群算法函数寻优【含Matlab源码 216期】

一、简介

1 概述
自20世纪50年代中期创立了仿生学,许多学者开始从生物中挖掘新的算法来用于复杂的优化问题。一些学者通过研究生物进化的机理,分别提出了适合于现实世界复杂优化问题的模拟进化算法(Simulated evolutionary algorithms),例如SA、SOA、ACO、PSO、GA等。例如美国Michigan大学的J.H.Holland教授等创立的遗传算法GA,Rechenberg等创立的进化策略及Fogel等创立的进化规划。遗传算法GA、进化策略、进化规划有一定的相似性,它们均来自于达尔文的进化论,其中遗传算法GA的研究最为深入,理论最为成熟,并且应用面也最广。粒子群算法(PSO)也是一个多学科交叉的领域,同样吸引着众多的学者运用不同的技术手段对之进行改进研究,具体包括数学、计算机科学、生物以及物理等许多学科的科研人员,并且粒子群优化算法PSO在工业、交通、化工、能源、农业、国防、工程、通信等许多领域有着广阔的应用前景。因此,对粒子群优化算法进行研究具有很重要的意义。
2 粒子群算法模型
在这里插入图片描述

二、源代码

% 改进的快速粒子群优化算法 (APSO):
function apso
% 参数设置
global lamda1 lamda2 m ua_max eta_T r G f alpha Cd A rou K Ttq_max Fz fai ge_ne_pe du
lamda1 = 0.2; % 动力性发挥程度加权因子;
lamda2 = 0.8; % 经济性加权因子;
m = 1092;     % 整车质量(kg);
ua_max = 50;  % 最大车速(km/h);
eta_T = 0.9;  % 传动系的传动效率;
r = 0.3;      % 车轮半径(m);
g = 9.8;      % 重力加速度(g*m/s^2) 
G = m*g;      % 汽车重力G=mg,(N);
f = 0.015;    % 汽车的滚动阻力系数;
alpha = 25*pi/180;   % 道路坡度角-->弧度;
Cd = 0.32;           % 空气阻力系数;
A = 1.5;             % 迎风面积,即汽车行驶方向的投影面积(m^2);
rou = 7.0;           % 燃油重度,N/L;
K = 1.05;            % 考虑连续加速,加权系数;
Ttq_max = 132;       % 发动机的最大转矩(N.m);
Fz = G/4;            % 驱动轮上的法向反作用力(N);
fai = 0.7;           % 地面附着系数;
ge_ne_pe = 205;      % 发动机的燃油消耗率 (g/kW.h);
du = 0.1;            % 步长

% 变量
Lb=[ 1   1   0.5  0.5  0.3  2]; %下边界
Ub=[5.0 4.0  3.0  2.0  1.0  6]; %上边界
% 默认参数
para=[25 150 0.95]; %[粒子数,迭代次数,gama参数]

% APSO 优化求解函数
[gbest,fmin]=pso_mincon(@cost,@constraint,Lb,Ub,para);

% 输出结果
Bestsolution=gbest % 全局最优个体
fmin

%% 目标函数
function fy=cost(x)
% ig1 = x(1);   %变速器第1挡的传动比
% ig2 = x(2);   %变速器第2挡的传动比
% ig3 = x(3);   %变速器第3挡的传动比
% ig4 = x(4);   %变速器第4挡的传动比
% ig5 = x(5);   %变速器第5挡的传动比
% ig0 = x(6);   %主减速器传动比
global lamda1 lamda2 m ua_max eta_T r G f alpha Cd A rou K Ttq_max Fz fai ge_ne_pe du

% 发动机功率(Pe)
T = 0; % 时间
Q = 0; % 耗油量
for ua = 0.1:0.1:ua_max

    if ua<=10
        delta = 1.06+0.04*x(1).^2;  % 汽车旋转质量换算系数
        ne = ua*x(6)*x(1)/0.377/r;  % 转速(r/min)
        Pe = ( G*f*ua/3600 + Cd*A*ua.^3/76140 + delta*m*ua*du/3600)/eta_T;
        Me = 9549*Pe./ne;  % 发动机转矩(N.m)
        Ft = Me*x(1)*x(6)*eta_T/r;  % 汽车的驱动力
    elseif ua>10 && ua<=20
        delta = 1.06+0.04*x(2).^2;  % 汽车旋转质量换算系数
        ne = ua*x(6)*x(2)/0.377/r;  % 转速(r/min)
        Pe = ( G*f*ua/3600 + Cd*A*ua.^3/76140 + delta*m*ua*du/3600)/eta_T;
        Me = 9549*Pe./ne;  % 发动机转矩(N.m)
        Ft = Me*x(2)*x(6)*eta_T/r;  % 汽车的驱动力
     elseif ua>20 && ua<=30
        delta = 1.06+0.04*x(3).^2;  % 汽车旋转质量换算系数
        ne = ua*x(6)*x(3)/0.377/r;  % 转速(r/min)
        Pe = ( G*f*ua/3600 + Cd*A*ua.^3/76140 + delta*m*ua*du/3600)/eta_T;
        Me = 9549*Pe./ne;  % 发动机转矩(N.m)
        Ft = Me*x(3)*x(6)*eta_T/r;  % 汽车的驱动力
     elseif ua>30 && ua<=40
        delta = 1.06+0.04*x(4).^2;  % 汽车旋转质量换算系数 
        ne = ua*x(6)*x(4)/0.377/r;  % 转速(r/min)
        Pe = ( G*f*ua/3600 + Cd*A*ua.^3/76140 + delta*m*ua*du/3600)/eta_T;
        Me = 9549*Pe./ne;  % 发动机转矩(N.m)
        Ft = Me*x(4)*x(6)*eta_T/r;  % 汽车的驱动力
     elseif ua>40 && ua<=ua_max
        delta = 1.06+0.04*x(4).^2;  % 汽车旋转质量换算系数
        ne = ua*x(6)*x(5)/0.377/r;  % 转速(r/min)
        Pe = ( G*f*ua/3600 + Cd*A*ua.^3/76140 + delta*m*ua*du/3600)/eta_T;
        Me = 9549*Pe./ne;  % 发动机转矩(N.m)
        Ft = Me*x(5)*x(6)*eta_T/r;  % 汽车的驱动力
    end
复制代码

三、运行结果

在这里插入图片描述

四、备注

版本:2014a

文章分类
人工智能
文章标签