• 大小: 0M
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-15
  • 语言: 其他
  • 标签: 其他  

资源简介

Untitled.zip

资源截图

代码片段和文件信息

clc

clear

close all

tic

data = xlsread(‘数据.xlsx‘‘C3:I12‘);

JW = data(:1:2);

dem = data(:3);      % 各网点的需求量

demand = rem(dem6);  % 各网点除去整车运输的量(整车运输是指网点需求量多于汽车装载量时,需要在该网点多次运输)

ntimes = (dem - demand)/6; % 各网点整车运输的次数

    %% 经纬度转大地坐标,单位km

e2=0.0066943799;
N=6386942;

H=44.4;                     % 海拔

W=JW(:2)/180*pi;           % 维度

J=JW(:1)/180*pi;           % 经度

X=-(N+H)*cos(W).*cos(J)/1000;

Y=(N+H)*cos(W).*sin(J)/1000;

position=[X Y];

%%

CityNum=9;     % 需求节点数

CarDistance=300000;% 车最大行驶距离

CarLoad=6;      % 车容量

speed=30;       % 车辆行驶速度

c0=0;          % 发车成本

c1=3;          % 车辆行驶单位距离成本

CarNum=18;      % 配送车辆总数,实际车辆可以少于该值

fitmax=10000000;% 最大惩罚

%%

NP=80;         % 种群个体数量

maxgen=200;

Pc=0.9;         % 交叉概率

Pm=0.1;         % 变异概率

Gap=0.9;        % 代沟(Generation gap)



%%

ET=data(:6);  % 最早服务时间窗

LT=data(:7);  % 最晚服务时间窗

ST=zeros(size(ET));% 服务时间

CE=[0 ones(1CityNum)]*1000;  % 早到惩罚系数

CL=[0 ones(1CityNum)]*1000;  % 晚到惩罚系数

%% 计算各城市之间的距离

distance=zeros(CityNum+1);

for i=1:CityNum+1

    for j=i+1:CityNum+1

        distance(ij)=((position(i1)-position(j1))^2+(position(i2)-position(j2))^2)^0.5;

        distance(ji)=distance(ij);

    end

end

%% 整车运输费用

for j = 2:length(dem)

    mT = distance(1j)/speed;

    if mT < ET(j)

        dpunish = (ET(j)-mT)*CE(j);

    elseif mT > LT(j)

        dpunish = (mT-LT(j))*CL(j);

    else

        dpunish = 0;

    end

    mCost(j)  =  ntimes(j)*(distance(1j)*c1*2);

end

dCost = sum(mCost);

%% 路径初始化

X=initpop(NPCityNumCarNum);



Xa=X(1:);

%% 迭代

gen=1;

while gen<=maxgen

    gen

    % 计算适应值矩阵

    [allcostfit]=fitness(distancedemandXETLTCECLSTCarDistanceCarLoadspeedfitmaxc0c1);

    %找出最优个体适应值

    allcost=allcost+dCost;

    [leastcostbestindex]=min(allcost);

    bestindex=bestindex(1);

    fpbest(gen)=leastcost; % 最小适应值fit的集

    pbest(gen:)=X(bestindex:);% 最优个体集

    % 选择

    XSel=Select(XfitGap);

    % 交叉操作
    XSel=Cross(XSelPc);

    % 变异
    XSel=Mutate(XSelPm);

    % 逆转操作

    %XSel=Reverse(distancedemandXSelETLTCECLSTCarDistanceCarLoadspeedfitmaxc0c1);

    % 重插入子代的新种群

    X=Reins(XXSelfit);

    gen=gen+1;

end

% 找出最优的适应值、个体

[minfpbestminindex]=min(fpbest);% 取最优适应值的位置、最优适应值

minindex=minindex(1);

bestRoute=pbest(minindex:); % 取最优个体

Path=bestRoute;

for i=1:length(Path)-1

    if Path(i)-Path(i+1)==0

        Path(i)=0;

    end

end



ii=find(Path==0);

Path(ii)=[];

for j=1:length(Path) % 编码各减1,与文中的编码一致

    Path(j)= Path(j)-1;

end

fpbest;  %查看适应值的变化情况

%% 迭代图

figure

plot(fpbest)

title(‘遗传算法优化过程‘)

xlabel(‘迭代次数‘)

ylabel(‘最优值‘)

%% 计算结果数据输出

clc

toc

disp([‘最优成本为:‘num2str(minfpbest)]);

OutputResult(distancedemandPathETLTCECLSTCarDistanceCarLoadspeedf

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        4049  2019-04-26 16:24  Untitled.m

评论

共有 条评论