一、遗传算法简介

1 引言


2 遗传算法理论
2.1 遗传算法的生物学基础


2.2 遗传算法的理论基础




2.3 遗传算法的基本概念






2.4 标准的遗传算法


2.5 遗传算法的特点


2.6 遗传算法的改进方向

3 遗传算法流程



4 关键参数说明

二、部分源代码

%Name:Berth Allocation.m
clear
clc
close all
%% 遗传参数
popsize=100;                                                                %群体大小
MAXGEN=50;                                                                %最大遗传代数
vesselNum=7;                                                               %船舶数量
berthNum=2;                                                                %泊位数量
chromlength=8;                                                             %染色体长度
Pc=0.6;                                                                    %交叉概率
Pm=0.001;                                                                  %变异概率
GGAP=0.9;                                                                  %选择概率
%% 初始化种群
pop=initGroup(popsize,chromlength,vesselNum,berthNum);                     %随机产生初始群体
%% 输出随机解的泊位调度方案和船舶在港总时间
disp('初始种群中的泊位调度方案:')
OutputPath(pop);                                         %画出路径函数
disp('初始随机解的船舶在港总时间:')
objvalue=calobjvalue(pop,popsize,vesselNum,berthNum);
disp(objvalue(1))
disp('-------------------------------------------------------------')
%% 优化
gen=0;
figure;
hold on;box on  %display the boundary of the current axes.
xlim([0,MAXGEN])                %x在坐标轴的范围
title('优化过程')
xlabel('迭代次数')
ylabel('船舶在港时间每次迭代的最优解')
objvalue=calobjvalue(pop,popsize,vesselNum,berthNum);     %计算目标函数值
preobjvalue=min(objvalue);
while gen<MAXGEN%% 计算适应度objvalue=calobjvalue(pop,popsize,vesselNum,berthNum);     %计算目标函数值line([gen-1,gen],[preobjvalue,min(objvalue)]);pause(0.0001) %line([X1 X2],[Y1 Y2],S); %点A(X1,Y1)和点B(X2 Y2)之间画一条直线,S为其它属性(颜色,线的粗细等)preobjvalue=min(objvalue);fitvalue=fitness(objvalue,popsize);                       %计算适应度函数%% 选择newpop=Selection(pop,fitvalue,GGAP);pop1=newpop;                                              %pop1为选择过后的种群%% 交叉[newpop]=Crossover(pop1,Pc);pop2=newpop;                                              %pop2为交叉后的种群%% 变异[newpop]=Mutate(pop2,Pm);%% 重插入子代pop=Reins(pop,newpop,objvalue);gen=gen+1;
end
[minobjvalue,minIndex]=min(objvalue);   %[Y,U]=min(A):返回行向量Y和U,Y向量记录A的每列的最小值,U向量记录每列最小值的行号
minpop=pop(minIndex,:);
%% 输出最优解的泊位调度方案和船舶在港总时间
disp('最优解的泊位调度方案:')
OutputPath(minpop);
disp('最优解的船舶在港总时间:')
disp(min(objvalue));
disp('-------------------------------------------------------------')
%Name:calobjvalue.m
%% 计算目标函数值
%输入变量:
%pop:初始种群
%popsize:种群大小(规模)
%vesselNum:船舶数量
%berthNum:泊位数量
%输出变量:function objvalue=calobjvalue(pop,popsize,vesselNum,berthNum)
objvalue=zeros(popsize,1);
for k=1:popsize
chromsome=pop(k,:);      %染色体
shipInfo=zeros(vesselNum+berthNum-1,5);     %把染色体中各条船的编号存入shipInfo矩阵第一列中
i=1;
while i<=length (chromsome)shipInfo(i,1)=chromsome(i);i=i+1;
end
%% 读取船舶到港信息存入matrix矩阵-load ship
%第一列是船舶编号,第二列到港时间,第三列装卸箱时间
ship=[1 0 122 4 103 6 34 9 85 11 56 18 127 19 4];
matrix=ship(1:vesselNum,1:3);
%shipInfo矩阵第一列存放船舶编号(含分隔符0),
%第二列存放该船等待时间,第三列存放该船作业前的泊位空闲时间,
%第四列存放该船离港时间,第五列存放该船在港时间,
i=1;
j=1;
berthNo=1;
while i<=length(chromsome)%按调度顺序计算泊位上第一条船的相关信息,先取船号,如果遇到分隔符0,则直接看下一个符号,同时前一条船的相关信息清零vesselNo=shipInfo(i,1);if vesselNo==0j=0;berthNo=berthNo+1;else%船舶号实际存在时才执行查找及后续操作,从matrix中查找vesselNo,以便提取出该船到港时间,装卸作业时间m=find(matrix(:,1)==vesselNo);arrivetime=matrix(m,2);                          %船舶到港时间loadtime=matrix(m,3);                            %船舶装卸箱作业时间%计算该船的等待时间,作业前泊位空闲时间,离港时间,在港时间if j==1shipInfo(i,2)=0;                             %等待时间(作业前等待的时间)shipInfo(i,3)=arrivetime-0;                  %作业前泊位空闲时间shipInfo(i,4)=arrivetime+loadtime;           %离港时刻shipInfo(i,5)=loadtime;                      %在港时间elseif arrivetime<shipInfo(i-1,4)%该船到港时刻>前一条船的离港时刻shipInfo(i,2)=0;shipInfo(i,3)=arrivetime-shipInfo(i-1,4);shipInfo(i,4)=arrivetime+loadtime;shipInfo(i,5) =loadtime;endendend      i=i+1;j=j+1;
endend
%Name:Crossover.m
%% 交叉操作(两点交叉)
% 输入
%pop1  被选择的个体
%Pc     交叉概率
%输出:
% newpop 交叉后的个体
function [newpop]=Crossover(pop1,Pc)
Npop1=size(pop1,1);
newpop=pop1;
for i=1:2:Npop1- mod(Npop1,2)if Pc>=rand %交叉概率Pc[newpop(i,:),newpop(i+1,:)]=intercross(pop1(i,:),pop1(i+1,:));end
end%% 交叉算法采用部分匹配交叉
%输入:
%a和b为两个待交叉的个体
%输出:
%a和b为交叉后得到的两个个体
function [a,b]=intercross(a,b)
L=length(a);
r1=randsrc(1,1,[1:L]); %Generate random matrix using prescribed alphabet.
r2=randsrc(1,1,[1:L]);%OUT = RANDSRC(M,N,ALPHABET) generates an M-by-N random matrix, using the alphabet specified in ALPHABET.
if r1~=r2a0=a;b0=b;s=min([r1,r2]);e=max([r1,r2]);for i=s:ea1=a;b1=b;a(i)=b0(i);b(i)=a0(i);x=find(a==a(i));y=find(b==b(i));i1=x(x~=i);i2=y(y~=i);if ~isempty(i1)a(i1)=a1(i);endif ~isempty(i2)b(i2)=b1(i);endend
end
%% sus(随机通用采样(Stochastic Universal Sampling))
% 输入:
%fitvalue  个体的适应度值
%NSel   被选择个体的数目
% 输出:
%NewChrIx  被选择个体的索引号
function NewChrIx = Sus(fitvalue,NSel) %NewChr 被选择的个体 Ix(Index)索引号
[Nind,ans] = size(fitvalue);
cumfit = cumsum(fitvalue); %cumsum函数:Cumulative sum of elements.cumsum(A,1)按列/cumsum(A,2)按行
trials = cumfit(Nind) / NSel * (rand + (0:NSel-1)'); %trials 试用
Mf = cumfit(:, ones(1, NSel));
Mt = trials(:, ones(1, Nind))';
[NewChrIx, ans] = find(Mt < Mf & [ zeros(1, NSel); Mf(1:Nind-1, :) ] <= Mt);
[ans, shuf] = sort(rand(NSel, 1));
NewChrIx = NewChrIx(shuf);%% RWS即轮盘赌(Roulette Wheel Selection)的选择方法,而SUS是随机通用采样.RWS的选择偏差往往比较大,而SUS可以在统计上避免选择偏差的存在。

三、运行结果


四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【优化调度】基于matlab遗传算法求解码头泊位分配调度优化问题【含Matlab源码 247期】相关推荐

  1. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  2. 【Matlab人脸识别】KL变换人脸识别【含GUI源码 859期】

    一.代码运行视频(哔哩哔哩) [Matlab人脸识别]KL变换人脸识别[含GUI源码 859期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  3. 【Matlab心音信号】EMD心音信号特征提取【含GUI源码 1735期】

    一.代码运行视频(哔哩哔哩) [Matlab心音信号]EMD心音信号特征提取[含GUI源码 1735期] 二.matlab版本及参考文献 1 matlab版本 2014a *2 参考文献 [1] 沈再 ...

  4. 【Matlab语音隐写】DWT音频数字水印【含GUI源码 712期】

    一.代码运行视频(哔哩哔哩) [Matlab语音隐写]DWT音频数字水印[含GUI源码 712期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  5. 【Matlab通信】DTMF双音多频电话拨号仿真【含GUI源码 805期】

    一.代码运行视频(哔哩哔哩) [Matlab通信]DTMF双音多频电话拨号仿真[含GUI源码 805期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅 ...

  6. MATLAB遗传算法求解曲面拟合和多参数优化问题代码实例

    MATLAB遗传算法求解曲面拟合和多参数优化问题代码实例 MATLAB遗传算法求解曲面拟合和多参数优化问题代码实例 数据拟合和多参数优化问题实例: 已知一组观测数据(x, y, z)满足一定的函数关系 ...

  7. MATLAB遗传算法求解物流配送中心选址问题优化代码实例

    1.简介 物流分配中心选址问题是指一定数量的客户,它们有不同数量的货物需求,有一定数量的备选中心作为配送中心.配送中心向客户提供货物的配送服务,现需要选择合适的配送中心位置(选址数量一定)或合适的配送 ...

  8. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

  9. 【Matlab路径规划】改进的遗传算法机器人避障路径规划【含GUI源码 703期】

    一.代码运行视频(哔哩哔哩) [Matlab路径规划]改进的遗传算法机器人避障路径规划[含GUI源码 703期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] ...

  10. 【Matlab电力负荷预测】粒子群优化支持向量机短期电力负荷预测【含GUI源码 751期】

    一.代码运行视频(哔哩哔哩) [Matlab电力负荷预测]粒子群优化支持向量机短期电力负荷预测[含GUI源码 751期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 ...

最新文章

  1. 37.Intellij IDEA解决GBK乱码
  2. 7、Python文件操作工具 openpyxl 工具 2
  3. 哈工大未来计算机院士,中国双一流大学拥有院士校友数排名,这是真实力!哈工大依然很强...
  4. idea 提升幸福感 常用设置(重装机配置)
  5. Java基础学习总结(185)—— Java 在云原生时代的进化
  6. 无法解析 org.apache.commons:commons-pool2:2.4.2
  7. 区块链开发(一)搭建基于以太坊的私有链环境
  8. 【数字信号处理】基于matlab GUI数字调音台【含Matlab源码 881期】
  9. 人工智能的主要风险因素有哪些?
  10. handwritten dataset手写体数据集(IAM,RIMES,CVL)
  11. 建议收藏,22个Python迷你项目(附源码)
  12. yaahp层次分析法步骤_层次模型构造
  13. c++ 与 duckduckgo
  14. android 滑动取值_Android中滑屏实现
  15. [转]JFFS2源代码情景分析Beta2
  16. 在家如何用手机赚钱,小编来为你一一解答!
  17. H5缓存机制浅析-移动端Web加载性能优化
  18. 2022双11/双十一天猫喵果总动员/京东穿行寻宝一键完成,自动任务脚本软件,分享源码学习
  19. jQuery slideToggle
  20. 半波整流、全波整流电路#集成运算放大器

热门文章

  1. GIMP的Path的import和export
  2. 正负样本不平衡处理方法总结【转】
  3. Oracle数据库通过创建触发器实现自增功能
  4. 仔细看看Javascript中的逻辑与()和逻辑或(||)
  5. PNAS A scalable pipeline for designing reconfigurable organisms
  6. unity Scene窗口的任意比例放大和缩小
  7. Lost Found
  8. 视频方向的变换by ppt
  9. AR/MR研究团队和机构
  10. Slam(即时定位与地图构建)