遗传算法求解VRP问题的技术报告

遗传算法求解VRP问题的技术报告
遗传算法求解VRP问题的技术报告

遗传算法求解VRP 问题的技术报告

摘要:本文通过遗传算法解决基本的无时限车辆调度问题。采用车辆和客户对应排列编码的遗传算法,通过种群初始化,选择,交叉,变异等操作最终得到车辆配送的最短路径。通过MA TLAB 仿真结果可知,通过遗传算法配送的路径为61.5000km,比随机配送路径67km 缩短了5.5km 。此结果表明遗传算法可以有效的求解VRP 问题。

一、 问题描述

1.问题描述

车辆调度问题(Vehicle Scheduling/Routing Problem,VSP/VRP )的一般定义为[1]:对一系列送货点和/或收货点,组织适当的行车路线,使车辆有序地通过它们,在满足一定的约束条件(如货物需求量、发送量,送发货时间、车辆容量限制、行驶里程限制、时间限制等)下,达到一定的目标(如路程最短、费用极小、时间尽量少、使用车辆数尽量少等)。问题描述如下[2]:有一个或几个配送中心),...,1(n i D i =,每个配送中心有K 种不同类型的车型,每种车型有n 辆车。有一批配送业务),...,1(n i R i =,已知每个配送业务需求量),...,1(n i q i =和位置或要求在一定的时间范围内完成,求在满足不超过配送车辆载重等的约束条件下,安排配送车辆在合适的时间、最优路线使用成本最小。 2.数学模型

设配送中心有K 台车,每台车的载重量为),...,2,1(K k Q k =,其一次配送的最大行驶距离为k D ,需要向L 个客户送货,每个客户的货物需求量为),...,2,1(L i q i =,客户i 到j 的运距为ij d ,配送中心到各个客户的距离为),...,2,1,(0L j i d j =,再设k n 为第K 台车配送的客户数(k n =0表示未使用第K 台车),用集合k R 表示第k 条路径,其中ki r 表示客户ki r 在路径 k 中的顺序为 (不包括配送中心),令 0k r 表示配送中心,若以配送总里程最短为目标函数,则可建立如下数学模型:

∑∑==?+=-K k k rk r n i r r n sign d d Z k

kn

k

ki i k 1

1

)]

([min )1( (1)

k

n i ki

Q qr

k

≤∑=1

(2)

k k rk r n i r r D n sign d d

k

kn

k

ki

i k ≤?+∑=-)(0

1

)1( (3)

L n k ≤≤0 (4)

L n

K

k k

=∑=1

(5)

},...,2,1},,...,2,1{{k ki ki k n i L r r R =∈= (6) 21,21k k R R k k ≠??=? (7)

????

??

≥=其他01n 1)(k k n sign (8)

上述模型中,式(1)为目标函数,即要求配送里程最短;式(2)保证每条路径上各个客户的货物需求量之和不超过配送车的载重;式(3)保证每条配送路径的长度不超过配送车的最大行驶距离;式(4)表明每条路径上的客户数不超过总客户数;式(5)表明每个客户都得到配送服务;式(6)表示每条路径的客户组成;式(7)限制每个客户仅能由一台配送车送货;式(8)表示当第 k 辆车服务的客户数大于等于1时,说明该台车参加了配送,则sign(n)的值取1,否则为0。

二、 研究现状

车辆调度问题在目标和范围方面有很大差别,主要是研究的目标和限定条件不同。在研究目标方面有的是最短路线,有的是最短时间,有的是客户的方便程度等等。在限定条件方面,有配送中心方面的区别,和有单配送中心的,有多配送中心;有配送车辆的数量、种类方面的区别,如车辆数有限、无限、单一车型和多种车型;在业务种类方面,有的是集货任务,有的是送货业务,有的是集送一体化业务,有的是各种业务混合情况。有时间窗的车辆调度问题是最为普通的问题,以成为研究热点。

遗传算法在搜索过程中能够自动获取和积累有关搜索空间的知识,并能利用问题固有的知识来缩小搜索空间,自适应地控制搜索过程,动态有效地降低问题的复杂度,从而求得原问题的真正最优解或满意解,因此我来选用遗传算法来求解VSP 问题。

三、 解决方法

遗传算法的流程图如下:

基于车辆和客户对应排列编码的遗传算法的基本步骤:

(1)编码:采用车辆和客户对应排列的编码方法,其基本思路是:用车辆数间的任意自然数(可重复)的排列表示车辆排列,用客户数间的互不重复的自然数排列表示客户排列,两者相对应,构成一个解,并对应一个配送路径方案。例如:对于一个用3台车向9个客户送货的车辆调度优化问题,设某解为(122131223)(456712398),即车辆排列为122131223,客户排列为456712398,两个排列相对应。

(2)适应度函数:直接采用公式(1)作为适应度评估函数。对不可行路径进行权重惩罚。

(3)选择策略:采用最佳个体保存与赌轮相结合的选择策略。其具体操作为:将每代群体中的N个个体按适应度由小到达排列,排在首位的个体性能最好,将它直接复制到下一代。下一代群体的令N-1个体需要根据上一代群体的N个个体的适应度采用赌轮选择。

(4)交叉操作:在该编码方式下有几种编码方式:仅对车辆编码进行交叉、仅对客户编码进行交叉和同时对客户编码和车辆编码进行交叉。本方法中采用仅对车辆编码的方式来交叉。

(5)变异操作:本程序中对于变异操作,采用对客户编码变异的方式。

用MA TLAB编程,在内存为2G,CPU 2.10GHz的微机上运行。采用运行参数:种群规模为100,交叉概率为0.9,变异概率为0.2,进化代数100。变异仅对客户编码,对不可行路径的惩罚权重去100km,具体程序代码见附录。

四、仿真结果

某配送中心有2台车,其载重量均为8t,车辆每次配送的最大行驶距离均为50km,配送中心与8个客户之间及8个客户之间相互距离及货物需求见下表:

表1 客户需求

表2 点对间距表运行结果如下:

五、结论

从以上仿真结果可知,用遗传算法通过选择,交叉,变异等操作最终求得配送车辆物流问题中的最短路径,减少了车辆资源和时间的浪费,缩短了运输成本。同时,在车辆调度问题中,进一步加入时间窗等参数的车辆调度问题的遗传算法的求解,还需要进一步的学习研究。

六、参考文献

[1]施朝春,王旭,葛显龙。带有时间窗的多配送中心车辆调度问题研究[J] 。计算机工程与应用,2009;

45(34):21—24

[2]程世东,刘小明,王兆赓。物流配送车辆调度研究的回顾与展望[J]。交通运输工程与信息学报,2004;

2(3):93—97

七、附录:程序

clear all;

close all;

D=[ 0 6.5 4 10 5 7.5 11 10 4;

6.5 0

7.5 10 10 7.5 7.5 7.5 6;

4 7.

5 0 10 5 9 9 15 7.5;

10 10 10 0 10 7.5 7.5 10 9;

5 10 5 10 0 7 9 7.5 20;

7.5 7.5 9 7.5 7 0 7 10 10;

11 7.5 9 7.5 9 7 0 10 16;

10 7.5 15 10 7.5 10 10 0 8;

4 6 7.

5 9 20 10 1

6 8 0];

n=40;

C=100;

Pc=0.9;

Pm=0.2;

N=8;

family=zeros(n,N);

tic

for i=1:n

family(i,:)=randperm(N);

end

Gt=family(1,:);

Ln=zeros(n,1);

for kg=1:1:C

time(kg)=kg;

%------------------------------计算路径长度-----------------------------

for i=1:1:n

Ln(i,1)=fitness1(D,family(i,:)); %计算每条染色体的适应度值

End

MinLn(kg)=min(Ln);

minLn=MinLn(kg);

rr=find(Ln==minLn);

Gt=family(rr(1,1),:);%更新最短路径

Family=family;

kg;

minLn;

%--------------------------------选择复制-------------------------------

K=30;

aa=0;bb=0;

[aa,bb]=size(Family);

Family2=Family;

Ln2=Ln;

[Ln]=sort(Ln);

for i=1:aa

tt=find(Ln2==Ln(i,1));

Family(i,:)=Family(tt(1,1),:);

end

for i=1:K

j=aa+1-i;

Family(j,:)=Family(i,:);

end

%---------------------------------交叉---------------------------------

[aa,bb]=size(Family);

Family2=Family;

for i=1:2:aa

if Pc>rand&&i

A=Family(i,:);

B=Family(i+1,:);

[A,B]=intercross(A,B);

Family(i,:)=A;

Family(i+1,:)=B;

e nd

end

%-------------------------------变异-----------------------------------

Family2=Family;

for i=1:aa

if Pm>=rand %变异条件

Family(i,:)=mutate(Family(i,:));

End

end

Family=[Gt;Family]; %保留上一代最短路径[aa,bb]=size(Family);

if aa>n

Family=Family(1:n,:);

end

family=Family;

clear Family

end

toc

Gt

RL=fitness1(D,Gt)

plot(time,MinLn);

xlabel('times');ylabel('MinLn');

(1)适应度函数

function len=fitness1(D,p)

N=8;

len=0;

for i=1:(N-1)

len=len+D(p(i),p(i+1));

end

len=D(N,p(1))+len+D(p(N),N);

b=0;

total=[0 0];

volume=8;

demand=[1 2 1 2 1 4 2 2 0];

b=find(p==8);

if b==1

total(1)=0;

for i=2:N

total(2)=demand(p(i))+total(2);

end

elseif b==9

total(2)=0;

for i=1:(N-1)

total(1)=demand(p(i))+total(1);

end

else

for i=1:(b-1)

total(1)=demand(p(i))+total(1);

end

for i=(b+1):N

total(2)=demand(p(i))+total(2);

end

end

if total(2)>volume|total(1)>volume

len=len+100;

end

(2)交叉操作函数

function [a1,b1]=intercross(a1,b1)

L=length(a1);

w=[0 0];

w(1)=unidrnd(L-2);

w(2)=L-w(1);

if w(2)

else

w(1)=w(1);

w(2)=w(2);

end

for i=w(1):(w(2)-1)

xx=find(a1==b1(i+1));

yy=find(b1==a1(i+1));

[a1(i+1),b1(i+1)]=exchange(a1(i+1),b1(i+1));

[a1(xx),b1(yy)]=exchange(a1(xx),b1(yy));

end

(3)对调操作函数

function [x1,y1]=exchange(x1,y1)

temp=x1;

x1=y1;

y1=temp;

(4)变异函数

function c=mutate(c)

L1=length(c);

rray=randperm(L1);

[c(rray(1)),c(rray(2))]=exchange(c(rray(1)),c(rray(2)));

实验六:遗传算法求解TSP问题实验分析

实验六:遗传算法求解TSP问题实验 一、实验目的 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP问题的流程并测试主要参数对结果的影响。用遗传算法对TSP问题进行了求解,熟悉遗传算法地算法流程,证明遗传算法在求解TSP问题时具有可行性。 二、实验内容 参考实验系统给出的遗传算法核心代码,用遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。 对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。 增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。 1. 最短路径问题 所谓旅行商问题(Travelling Salesman Problem , TSP),即最短路径问题,就是在给定的起始点S到终止点T的通路集合中,寻求距离最小的通路,这样的通路成为S点到T点的最短路径。 在寻找最短路径问题上,有时不仅要知道两个指定顶点间的最短路径,还需要知道某个顶点到其他任意顶点间的最短路径。遗传算法方法的本质是处理复杂问题的一种鲁棒性强的启发性随机搜索算法,用

遗传算法解决这类问题,没有太多的约束条件和有关解的限制,因而可以很快地求出任意两点间的最短路径以及一批次短路径。 假设平面上有n个点代表n个城市的位置, 寻找一条最短的闭合路径, 使得可以遍历每一个城市恰好一次。这就是旅行商问题。旅行商的路线可以看作是对n个城市所设计的一个环形, 或者是对一列n个城市的排列。由于对n个城市所有可能的遍历数目可达(n- 1)!个, 因此解决这个问题需要0(n!)的计算时间。假设每个城市和其他任一城市之间都以欧氏距离直接相连。也就是说, 城市间距可以满足三角不等式, 也就意味着任何两座城市之间的直接距离都小于两城市之间的间接距离。 2. 遗传算法 遗传算法是由美国J.Holland教授于1975年在他的专著《自然界和人工系统的适应性》中首先提出的,它是一类借鉴生物界自然选择和自然遗传机制的随机化搜索算法。通过模拟自然选择和自然遗传过程中发生的繁殖、交叉和基因突变现象,在每次迭代中都保留一组候选解,并按某种指标从解群中选取较优的个体,利用遗传算子(选择、交叉和变异)对这些个体进行组合,产生新一代的候选解群,重复此过程,直到满足某种收敛指标为止。遗传算法在本质上是一种不依赖具体问题的直接搜索方法,是一种求解问题的高效并行全局搜索方法。其假设常描述为二进制位串,位串的含义依赖于具体应用。搜索合适的假设从若干初始假设的群体集合开始。当前种群成员通过模仿生物进化的方式来产生下一代群体,如随机变异和交叉。每一步,根据给定的适应度评估当前群体的假设,而后使用概率方法选出适应度最高的假设作为产生下一代的种子。

4遗传算法与函数优化

第四章遗传算法与函数优化 4.1 研究函数优化的必要性: 首先,对很多实际问题进行数学建模后,可将其抽象为一个数值函数的优化问题。由于问题种类的繁多,影响因素的复杂,这些数学函数会呈现出不同的数学特征。除了在函数是连续、可求导、低阶的简单情况下可解析地求出其最优解外,大部分情况下需要通过数值计算的方法来进行近似优化计算。 其次,如何评价一个遗传算法的性能优劣程度一直是一个比较难的问题。这主要是因为现实问题种类繁多,影响因素复杂,若对各种情况都加以考虑进行试算,其计算工作量势必太大。由于纯数值函数优化问题不包含有某一具体应用领域中的专门知识,它们便于不同应用领域中的研究人员能够进行相互理解和相互交流,并且能够较好地反映算法本身所具有的本质特征和实际应用能力。所以人们专门设计了一些具有复杂数学特征的纯数学函数,通过遗传算法对这些函数的优化计算情况来测试各种遗传算法的性能。 4.2 评价遗传算法性能的常用测试函数 在设计用于评价遗传算法性能的测试函数时,必须考虑实际应用问题的数学模型中所可能呈现出的各种数学特性,以及可能遇到的各种情况和影响因素。这里所说的数学特性主要包括: ●连续函数或离散函数; ●凹函数或凸函数; ●二次函数或非二次函数; ●低维函数或高维函数; ●确定性函数或随机性函数; ●单峰值函数或多峰值函数,等等。 下面是一些在评价遗传算法性能时经常用到的测试函数: (1)De Jong函数F1: 这是一个简单的平方和函数,只有一个极小点f1(0, 0, 0)=0。

(2)De Jong 函数F2: 这是一个二维函数,它具有一个全局极小点f 2(1,1) = 0。该函数虽然是单峰值的函数,但它却是病态的,难以进行全局极小化。 (3)De Jong 函数F3: 这是一个不连续函数,对于]0.5,12.5[--∈i x 区域内的每一个点,它都取全局极小值 30),,,,(543213-=x x x x x f 。

遗传算法求解实例

yj1.m :简单一元函数优化实例,利用遗传算法计算下面函数的最大值 0.2)*10sin()(+=x x x f π,∈x [-1, 2] 选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9, 最大遗传代数为25 译码矩阵结构:?????????? ??????? ???? ?=ubin lbin scale code ub lb len FieldD 译码矩阵说明: len – 包含在Chrom 中的每个子串的长度,注意sum(len)=length(Chrom); lb 、ub – 行向量,分别指明每个变量使用的上界和下界; code – 二进制行向量,指明子串是怎样编码的,code(i)=1为标准二进制编码, code(i)=0则为格雷编码; scale – 二进制行向量,指明每个子串是否使用对数或算术刻度,scale(i)=0为算术 刻度,scale(i)=1则为对数刻度; lbin 、ubin – 二进制行向量,指明表示范围中是否包含每个边界,选择lbin=0或 ubin=0,表示从范围中去掉边界;lbin=1或ubin=1则表示范围中包含边界; 注:增加第22行:variable=bs2rv(Chrom, FieldD);否则提示第26行plot(variable(I), Y, 'bo'); 中variable(I)越界 yj2.m :目标函数是De Jong 函数,是一个连续、凸起的单峰函数,它的M 文件objfun1包含在GA 工具箱软件中,De Jong 函数的表达式为: ∑ == n i i x x f 1 2 )(, 512512≤≤-i x 这里n 是定义问题维数的一个值,本例中选取n=20,求解 )(min x f ,程序主要变量: NIND (个体的数量):=40; MAXGEN (最大遗传代数):=500; NV AR (变量维数):=20; PRECI (每个变量使用多少位来表示):=20; GGAP (代沟):=0.9 注:函数objfun1.m 中switch 改为switch1,否则提示出错,因为switch 为matlab 保留字,下同! yj3.m :多元多峰函数的优化实例,Shubert 函数表达式如下,求)(min x f 【shubert.m 】

遗传算法解决TSP问题

遗传算法解决TSP问题 姓名: 学号: 专业:

问题描叙 TSP问题即路径最短路径问题,从任意起点出发(或者固定起点),依次经过所有城市,一个城市只能进入和出去一次,所有城市必须经过一次,经过终点再到起点,从中寻找距离最短的通路。 通过距离矩阵可以得到城市之间的相互距离,从距离矩阵中的到距离最短路径,解决TSP问题的算法很多,如模拟退火算法,禁忌搜索算法,遗传算法等等,每个算法都有自己的优缺点,遗传算法收敛性好,计算时间少,但是得到的是次优解,得不到最有解。 算法设计 遗传算法属于进化算法的一种,它通过模仿自然界的选择与遗传的机理来寻找最优解. 遗传算法有三个基本算子:选择、交叉和变异。 数值方法求解这一问题的主要手段是迭代运算。一般的迭代方法容易陷入局部极小的陷阱而出现"死循环"现象,使迭代无法进行。遗传算法很好地克服了这个缺点,是一种全局优化算法。 生物在漫长的进化过程中,从低等生物一直发展到高等生物,可以说是一个绝妙的优化过程。这是自然环境选择的结果。人们研究生物进化现象,总结出进化过程包括复制、杂交、变异、竞争和选择。一些学者从生物遗传、进化的过程得到启发,提出了遗传算法。算法中称遗传的生物体为个体,个体对环境的适应程度用适应值(fitness)表示。适应值取决于个体的染色体,在算法中染色体常用一串数字表示,数字串中的一位对应一个基因。一定数量的个体组成一个群体。对所有个体进行选择、交叉和变异等操作,生成新的群体,称为新一代遗传算法计算程序的流程可以表示如下: 第一步准备工作 (1)选择合适的编码方案,将变量(特征)转换为染色体(数字串,串长为m)。通常用二进制编码。 (2)选择合适的参数,包括群体大小(个体数M)、交叉概率PC和变异概率Pm。 (3)确定适应值函数f(x)。f(x)应为正值。 第二步形成一个初始群体(含M个个体)。在边坡滑裂面搜索问题中,取已分析的可能滑裂面组作为初始群体。 第三步对每一染色体(串)计算其适应值fi,同时计算群体的总适应值。 第四步选择

遗传算法解决TSP问题的matlab程序

1.遗传算法解决TSP 问题(附matlab源程序) 2.知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市 3.只能访问一次,最后又必须返回出发城市。如何安排他对这些城市的访问次序,可使其 4.旅行路线的总长度最短? 5.用图论的术语来说,假设有一个图g=(v,e),其中v是顶点集,e是边集,设d=(dij) 6.是由顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶 7.点且每个顶点只通过一次的具有最短距离的回路。 8.这个问题可分为对称旅行商问题(dij=dji,,任意i,j=1,2,3,…,n)和非对称旅行商 9.问题(dij≠dji,,任意i,j=1,2,3,…,n)。 10.若对于城市v={v1,v2,v3,…,vn}的一个访问顺序为t=(t1,t2,t3,…,ti,…,tn),其中 11.ti∈v(i=1,2,3,…,n),且记tn+1= t1,则旅行商问题的数学模型为: 12.min l=σd(t(i),t(i+1)) (i=1,…,n) 13.旅行商问题是一个典型的组合优化问题,并且是一个np难问题,其可能的路径数目 14.与城市数目n是成指数型增长的,所以一般很难精确地求出其最优解,本文采用遗传算法 15.求其近似解。 16.遗传算法: 17.初始化过程:用v1,v2,v3,…,vn代表所选n个城市。定义整数pop-size作为染色体的个数 18.,并且随机产生pop-size个初始染色体,每个染色体为1到18的整数组成的随机序列。 19.适应度f的计算:对种群中的每个染色体vi,计算其适应度,f=σd(t(i),t(i+1)). 20.评价函数eval(vi):用来对种群中的每个染色体vi设定一个概率,以使该染色体被选中 21.的可能性与其种群中其它染色体的适应性成比例,既通过轮盘赌,适应性强的染色体被 22.选择产生后台的机会要大,设alpha∈(0,1),本文定义基于序的评价函数为eval(vi)=al 23.pha*(1-alpha).^(i-1) 。[随机规划与模糊规划] 24.选择过程:选择过程是以旋转赌轮pop-size次为基础,每次旋转都为新的种群选择一个 25.染色体。赌轮是按每个染色体的适应度进行选择染色体的。 26.step1 、对每个染色体vi,计算累计概率qi,q0=0;qi=σeval(vj) j=1,…,i;i=1, 27.…pop-size. 28.step2、从区间(0,pop-size)中产生一个随机数r; 29.step3、若qi-1 step4、重复step2和step3共pop-size次,这样可以得到pop-size个复制的染色体。 30.grefenstette编码:由于常规的交叉运算和变异运算会使种群中产生一些无实际意义的 31.染色体,本文采用grefenstette编码《遗传算法原理及应用》可以避免这种情况的出现 32.。所谓的grefenstette编码就是用所选队员在未选(不含淘汰)队员中的位置,如: 33.8 15 2 16 10 7 4 3 11 14 6 12 9 5 18 13 17 1 34.对应: 35.8 14 2 13 8 6 3 2 5 7 3 4 3 2 4 2 2 1。 36.交叉过程:本文采用常规单点交叉。为确定交叉操作的父代,从到pop-size重复以下过 37.程:从[0,1]中产生一个随机数r,如果r 将所选的父代两两组队,随机产生一个位置进行交叉,如: 38.8 14 2 13 8 6 3 2 5 7 3 4 3 2 4 2 2 1 39. 6 12 3 5 6 8 5 6 3 1 8 5 6 3 3 2 1 1 40.交叉后为: 41.8 14 2 13 8 6 3 2 5 1 8 5 6 3 3 2 1 1 42. 6 12 3 5 6 8 5 6 3 7 3 4 3 2 4 2 2 1 43.变异过程:本文采用均匀多点变异。类似交叉操作中选择父代的过程,在r 选择多个染色体vi作为父代。对每一个 选择的父代,随机选择多个位置,使其在每位置

遗传算法的计算性能的统计分析

第32卷 第12期2009年12月 计 算 机 学 报 CH INESE JOURNA L OF COMPU TERS Vol.32No.12 Dec.2009 收稿日期:2008210219;最终修改稿收到日期:2009209227.本课题得到国家自然科学基金(60774084)资助.岳 嵚,男,1977年生,博士研究生,主要研究方向为进化算法.E 2mail:yueqqin@si https://www.360docs.net/doc/43595328.html,.冯 珊,女,1933年生,教授,博士生导师,主要研究领域为智能决策支持系统. 遗传算法的计算性能的统计分析 岳 嵚 冯 珊 (华中科技大学控制科学与工程系 武汉 430074) 摘 要 通过对多维解析函数的多次重复计算并对计算结果进行统计分析来讨论遗传算法的可靠性和可信度,结果表明:遗传算法的计算结果具有一定的稳定性,可以通过采用多次重复计算的方法提高计算结果的可信度,并用以评价算法及其改进的实际效果.关键词 遗传算法;计算可靠性;置信区间 中图法分类号TP 18 DOI 号:10.3724/SP.J.1016.2009.02389 The Statistical Analyses for Computational Performance of the Genetic Algorithms YU E Qin FENG Shan (Dep artment of Contr ol Science and Eng ineering ,H uazhong University of Science and T ech nology ,W u han 430074) Abstr act In this paper,the author s discuss the reliability of the GAs by reiteratively computing the multi 2dimensional analytic functions and statistical analysis of the results.The analysis re 2sults show that the GAs have certain stability;it could improve the reliability by reiteratively computation and estimates the effects of improvements. Keywor ds genetic algorithms;computational stability;confidence interval 1 遗传算法的随机性 遗传算法是将生物学中的遗传进化原理和随机优化理论相结合的产物,是一种随机性的全局优化算法[1].遗传算法作为一种启发式搜索算法,其计算结果具有不稳定性和不可重现性;遗传算法的进化过程具有有向随机性,整体上使种群的平均适应度不断提高.现在学术界对遗传算法中的某些遗传操作的作用机制还不十分清楚,遗传算法的许多性能特点无法在数学上严格证明.遗传算法的计算过程会受到各种随机因素的影响,如随机产生的初始种群和随机进行的变异操作等,尤其初始种群对计算结果影响较大.但另一方面,大量的实算结果表明,遗传算法的计算结果具有一定的规律性,在统计意义上具有一定的可靠性,这样就可以对待求解问题 进行多次重复计算后取平均值的方法,提高遗传算 法在实际计算中的准确性和可信度. 包括遗传算法在内的启发式搜索算法主要用于解决大型的复杂优化问题,这些问题一般难以使用传统的优化算法解决.遗传算法对这类问题的计算结果也难达到精确的最优解.这给对用遗传算法解决实际工程优化问题的计算结果的评价带来了困难,在实际工程计算中也难以评价遗传算法及其改进型的计算效果的优劣. 为了分析遗传算法的计算性能,本文采用的计算对象是一个复杂的多维解析函数.使用这类函数评价遗传算法计算性能的好处是可以事先通过其他方法求得最优解,这样便于评价遗传算法及其改进型的计算效果.本文从统计学角度对多次重复计算的结果进行分析,试图得到遗传算法的稳定性和可信度方面的相关结论,通过分析遗传算法及其改进

TSP问题的遗传算法求解

TSP问题的遗传算法求解 一、问题描述 假设有一个旅行商人要拜访N个城市,要求他从一个城市出发,每个城市最多拜访一次,最后要回到出发的城市,保证所选择的路径长度最短。 二、算法描述 (一)算法简介 遗传算法(GeneticAlgorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,通过模拟自然进化过程搜索最优解。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择个体,并借助于自然遗传学的遗传算子(geneticoperators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。(摘自百度百科)。 (二)遗传算子 遗传算法中有选择算子、交叉算子和变异算子。 选择算子用于在父代种群中选择进入下一代的个体。 交叉算子用于对种群中的个体两两进行交叉,有Partial-MappedCrossover、OrderCrossover、Position-basedCrossover等交叉算子。 变异算子用于对种群中的个体进行突变。 (三)算法步骤描述 遗传算法的基本运算过程如下: 1.初始化:设置进化代数计数器t=0、设置最大进化代数T、交叉概率、变异概率、随机生成M个个体作为初始种群P 2.个体评价:计算种群P中各个个体的适应度 3.选择运算:将选择算子作用于群体。以个体适应度为基础,选择最优个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代 4.交叉运算:在交叉概率的控制下,对群体中的个体两两进行交叉 5.变异运算:在变异概率的控制下,对群体中的个体两两进行变异,即对某一个体的基因进行随机调整 6.经过选择、交叉、变异运算之后得到下一代群体P1。 重复以上1-6,直到遗传代数为T,以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。 三、求解说明 (一)优化目标 给定二维数据int[][]pos用于存储各个城市的坐标,采用欧式距离代表城市之间的距离。利用遗传算法,找到不重复遍历所有城市的路径中,所走距离最短的路径。 (二)选择算子 选择算子采用轮盘赌选择,以每个个体的适应度为基础,为每个个体计算累积概率。

遗传算法程序示例

遗传算法程序示例 %% I. 清空环境变量 %optimtool solver 中选择GA %添加gaot工具箱 clear all clc %% II. 绘制函数曲线 x = 0:0.01:9; y = x + 10*sin(5*x)+7*cos(4*x); figure plot(x, y) xlabel('自变量') ylabel('因变量') title('y = x + 10*sin(5*x) + 7*cos(4*x)') grid %% III. 初始化种群 initPop = initializega(50,[0 9],'fitness'); %种群大小;变量变化范围;适应度函数的名称 %看一下initpop 第二列代表适应度函数值 %% IV. 遗传算法优化 [x endPop bpop trace] = ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,... 'normGeomSelect',0.08,'arithXover',2,'nonUnifMutation',[2 25 3]); %变量范围上下界;适应度函数;适应度函数的参数;初始种群;精度和显示方式;终止函数的名称; %终止函数的参数;选择函数的名称;选择函数的参数;交叉函数的名称;交叉函数的参数;变异函数的 %名称;变异函数的参数 % X 最优个体endpop 优化终止的最优种群bpop 最优种群的进化轨迹trace 进化迭代过程中 %最优的适应度函数值和适应度函数值矩阵 %% V. 输出最优解并绘制最优点 x hold on plot (endPop(:,1),endPop(:,2),'ro')

遗传算法的计算性能的统计分析

遗传算法遗传算法的计算性能的统计分析 岳嵚冯珊 (华中科技大学控制科学与工程系) 摘要:本文通过对多维解析函数的多次重复计算并对计算结果的进行统计分析来讨论遗传算法的可靠性和可信度,结果表明:遗传算法的计算结果具有一定的稳定性,可以通过采用多次重复计算的方法提高计算结果的可信度,并用以评价算法及其改进的实际效果。 关键词:遗传算法;计算可靠性;置信区间 分类号:TP18 1遗传算法的随机性 遗传算法是将生物学中的遗传进化原理和随机优化理论相结合的产物,是一种随机性的全局优化算法[1]。遗传算法作为一种启发式搜索算法,其计算结果具有不稳定性和不可重现性;遗传算法的进化过程具有有向随机性,整体上使种群的平均适应度不断提高。现在学术界对遗传算法中的某些遗传操作的作用机制还不十分清楚,遗传算法的许多性能特点无法在数学上严格证明。遗传算法的计算过程会受到各种随机因素的影响,如随机产生的初始种群和随机进行的变异操作等,尤其初是始种群对计算结果影响较大。但另一方面,大量的实算结果表明,遗传算法的计算结果具有一定的规律性,在统计意义上具有一定的可靠性,这样就可以对待求解问题进行多次重复计算后取平均值的方法,提高遗传算法在实际计算中的准确性和可信度。 包括遗传算法在内的启发式搜索算法主要用于解决大型的复杂优化问题,这些问题一般难以使用传统的优化算法解决。遗传算法对这类问题的计算结果也难达到精确的最优解。这给对用遗传算法解决实际工程优化问题的计算结果的评价带来了困难,在实际工程计算中也难以评价遗传算法及其改进型的计算效果的优劣。 为了分析遗传算法的计算性能,本文采用的计算对象是一个复杂的多维解析函数。使用这类函数评价遗传算法计算性能的好处是可以事先通过其他方法求得最优解,这样便于评价遗传算法及其改进型的计算效果。本文从统计学角度对多次重复计算的结果进行分析,试图得到遗传算法的稳定性和可信度方面的相关结论,通过分析遗传算法及其改进型求解解析问题的计算效果,再把所得到的相关结论推广应用到复杂的工程实际问题中去。 遗传算法在实际使用中有多种形式的变型,经典遗传算法是遗传算法的最简单的形式,但是经典遗传算法并不理想。本文使用的是粗粒度并行遗传算法。粗粒度并行遗传算法是遗传算法的一个重要改进型。它具有比经典遗传算法更好的计算性能。 2算例、实验方法和实验结果 2.1算例 本文所使用的算例是Deb 函数: ]10,10[,)]4cos(10[10)(12?∈??+=∑=i n i i i Deb x n x x x f i π(1) Deb 函数是一个高维的非凸函数,该函数在点(9.7624,9.7624,…,9.7624)上取得最大

(实例)matlab遗传算法工具箱函数及实例讲解

matlab遗传算法工具箱函数及实例讲解 核心函数: (1)function [pop]=initializega(num,bounds,eevalFN,eevalOps,options)--初始种群的生成函数 【输出参数】 pop--生成的初始种群 【输入参数】 num--种群中的个体数目 bounds--代表变量的上下界的矩阵 eevalFN--适应度函数 eevalOps--传递给适应度函数的参数 options--选择编码形式(浮点编码或是二进制编码)[precision F_or_B], 如 precision--变量进行二进制编码时指定的精度 F_or_B--为1时选择浮点编码,否则为二进制编码,由precision指定精度) (2)function [x,endPop,bPop,traceInfo] = ga(bounds,evalFN,evalOps,startPop,opts,... termFN,termOps,selectFN,selectOps,xOverFNs,xOverO ps,mutFNs,mutOps)--遗传算法函数 【输出参数】 x--求得的最优解 endPop--最终得到的种群 bPop--最优种群的一个搜索轨迹 【输入参数】 bounds--代表变量上下界的矩阵 evalFN--适应度函数 evalOps--传递给适应度函数的参数 startPop-初始种群 opts[epsilon prob_ops display]--opts(1:2)等同于initializega 的options参数,第三个参数控制是否输出,一般为0。如[1e-6 1 0] termFN--终止函数的名称,如['maxGenTerm'] termOps--传递个终止函数的参数,如[100] selectFN--选择函数的名称,如['normGeomSelect'] selectOps--传递个选择函数的参数,如[0.08] xOverFNs--交叉函数名称表,以空格分开,如['arithXover heuristicXover simpleXover'] xOverOps--传递给交叉函数的参数表,如[2 0;2 3;2 0] mutFNs--变异函数表,如['boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation'] mutOps--传递给交叉函数的参数表,如[4 0 0;6 100 3;4 100 3;4 0 0]

人工智能之遗传算法论文含源代码

30维线性方程求解 摘要:非线性方程组的求解是数值计算领域中最困难的问题,大多数的数值求解算法例如牛顿法的收敛性和性能特征在很大程度上依赖于初始点。但是对于很多高维的非线性方程组,选择好的初始点是一件非常困难的事情。本文采用了遗传算法的思想,提出了一种用于求解非线性方程组的混合遗传算法。该混合算法充分发挥了遗传算法的群体搜索和全局收敛性。选择了几个典型非线性方程组,考察它们的最适宜解。 关键词:非线性方程组;混合遗传算法;优化 1. 引言遗传算法是一种通用搜索算法,它基于自然选择机制和自然遗传规律来模拟自然界的进化过程,从而演化出解决问题的最优方法。它将适者生存、结构化但同时又是 随机的信息交换以及算法设计人的创造才能结合起来,形成一种独特的搜索算法,把一些解决方案用一定的方式来表示,放在一起成为群体。每一个方案的优劣程度即为适应性,根据自然界进化“优胜劣汰”的原则,逐步产生它们的后代,使后代具有更强的适应性,这样不断演化下去,就能得到更优解决方案。 随着现代自然科学和技术的发展,以及新学科、新领域的出现,非线性科学在工农业、经济政治、科学研究方面逐渐占有极其重要的位置。在理论研究和应用实践中,几乎绝大多数的问题都最终能化为方程或方程组,或者说,都离不开方程和方程组的求解。因此,在非线性问题中尤以非线性方程和非线性方程组的求解最为基本和重要。传统的解决方法,如简单迭代法、牛顿法、割线法、延拓法、搜索法、梯度法、共轭方向法、变尺度法,无论从算法的选择还是算法本身的构造都与所要解决的问题的特性有很大的关系。很多情况下,算法中算子的构造及其有效性成为我们解决问题的巨大障碍。而遗传算法无需过多地考虑问题的具体形式,因为它是一种灵活的自适应算法,尤其在一些非线性方程组没有精确解的时候,遗传算法显得更为有效。而且,遗传算法是一种高度并行的算法,且算法结构简单,非常便于在计算机上实现。本文所研究的正是将遗传算法应用于求解非线性方程组的问题。 2. 遗传算法解非线性方程组为了直观地观察用遗传算法求解非线性方程组的效果,我们这里用代数非线性方程组作为求解的对象问题描述:非线性方程组指的是有n 个变量(为了简化讨论,这里只讨论实变量方程组)的方程组 中含有非线性方程。其求解是指在其定义域内找出一组数能满足方程组中的每 个方程。这里,我们将方程组转化为一个函数则求解方程组就转化为求一组值使得成立。即求使函数取得最小值0 的一组数,于是方程组求解问题就转变为函数优化问题 3. 遗传算子 遗传算子设计包括交叉算子、变异算子和选择算子的设计。

第七章遗传算法应用举例

第七章 遗传算法应用举例 遗传算法提供了一种求解非线性、多模型、多目标等复杂系统优化问题的通用框架,它不依赖于问题具体的领域。随着对遗传算法技术的不断研究,人们对遗传算法的实际应用越来越重视,它已经广泛地应用于函数优化、组合优化、自动控制、机器人学、图象处理、人工生命、遗传编码、机器学习等科技领域。遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等多方面的应用取得了成功。本章通过一些例子,介绍如何利用第五章提供的遗传算法通用函数,编写MATLAB 程序,解决实际问题。 7.1 简单一元函数优化实例 利用遗传算法计算下面函数的最大值: ()sin(10) 2.0[1,2]f x x x x π=?+∈-, 选择二进制编码,种群中个体数目为40,每个种群的长度为20,使用代沟为0.9,最大遗传代数为25。 下面为一元函数优化问题的MA TLAB 代码。 figure(1); fplot ('variable.*sin(10*pi*variable)+2.0',[-1,2]); %画出函数曲线 % 定义遗传算法参数 NIND= 40; % 个体数目(Number of individuals) MAXGEN = 25; % 最大遗传代数(Maximum number of generations) PRECI = 20; % 变量的二进制位数(Precision of variables) GGAP = 0.9; % 代沟(Generation gap) trace=zeros (2, MAXGEN); % 寻优结果的初始值 FieldD = [20;-1;2;1;0;1;1]; % 区域描述器(Build field descriptor) Chrom = crtbp(NIND, PRECI); % 初始种群 gen = 0; % 代计数器 variable=bs2rv(Chrom,FieldD); % 计算初始种群的十进制转换 ObjV = variable.*sin (10*pi*variable)+2.0; % 计算目标函数值 while gen < MAXGEN, FitnV = ranking (-ObjV); % 分配适应度值(Assign fitness values) SelCh = select ('sus', Chrom, FitnV , GGAP); % 选择 SelCh = recombin ('xovsp',SelCh,0.7); % 重组 SelCh = mut(SelCh); % 变异 variable=bs2rv(SelCh,FieldD); % 子代个体的十进制转换 ObjVSel =variable.*sin(10*pi*variable)+2.0; % 计算子代的目标函数值 [Chrom ObjV]=reins(Chrom,SelCh,1,1,ObjV ,ObjVSel); % 重插入子代的新种群 gen = gen+1; % 代计数器增加 % 输出最优解及其序号,并在目标函数图象中标出,Y 为最优解,I 为种群的序号 [Y,I]=max(ObjV),hold on; plot (variable (I),Y , 'bo'); trace (1,gen)=max (ObjV); %遗传算法性能跟踪

用遗传算法解决旅行商问题

用遗传算法解决旅行商问题 姓名:王晓梅 学号:1301281 班级:系统工程6班

一、问题背景 有一个销售员,要到n 个城市推销商品,他要找出一个包含所有n 个城市的具有最短路程的环路。 现在假设有10个城市,他们之间的距离如下。 { 0, 107, 241, 190, 124, 80, 316, 76, 152, 157}, { 107, 0, 148, 137, 88, 127, 336, 183, 134, 95}, { 241, 148, 0, 374, 171, 259, 509, 317, 217, 232}, { 190, 137, 374, 0, 202, 234, 222, 192, 248, 42}, { 124, 88, 171, 202, 0, 61, 392, 202, 46, 160}, { 80, 127, 259, 234, 61, 0, 386, 141, 72, 167}, { 316, 336, 509, 222, 392, 386, 0, 233, 438, 254}, { 76, 183, 317, 192, 202, 141, 233, 0, 213, 188}, { 152, 134, 217, 248, 46, 72, 438, 213, 0, 206}, { 157, 95, 232, 42, 160, 167, 254, 188, 206, 0} 将这10个城市分别编码为0,1,2,3,4,5,6,7,8,9。要求走完这10个城市,目标是使走的距离最短。 二、建立模型 ),...,1,(1) ,...,1,(1. .)(min 11 11n j j i n i j i t s j i n j ij n i ij ij n i n j ij x x d x =≠==≠=≠∑∑∑∑==== 三、设计算法 1、种群初始化 (1)一条染色体的初始化 10个城市分别对应0~9这十个数,每个染色体代表一个解决方法,即0~9这十个数的一种排序方式,可随机产生一个数,用取余的方法得到一个0~9的数,依次得到与前面不重复的十个数,构成一个染色体。 (2)种群的初始化 这里假设种群有100个染色体,也就是循环100次染色体的初始化可得到一个种群。

三个遗传算法matlab程序实例

遗传算法程序(一): 说明: fga.m 为遗传算法的主程序; 采用二进制Gray编码,采用基于轮盘赌法的非线性排名选择, 均匀交叉,变异操作,而且还引入了倒位操作! function [BestPop,Trace]=fga(FUN,LB,UB,eranum,popsize,pCross,pMutation,pInversion,options) % [BestPop,Trace]=fmaxga(FUN,LB,UB,eranum,popsize,pcross,pmutation) % Finds a maximum of a function of several variables. % fmaxga solves problems of the form: % max F(X) subject to: LB <= X <= UB % BestPop - 最优的群体即为最优的染色体群 % Trace - 最佳染色体所对应的目标函数值 % FUN - 目标函数 % LB - 自变量下限 % UB - 自变量上限 % eranum - 种群的代数,取100--1000(默认200) % popsize - 每一代种群的规模;此可取50--200(默认100) % pcross - 交叉概率,一般取0.5--0.85之间较好(默认0.8) % pmutation - 初始变异概率,一般取0.05-0.2之间较好(默认0.1) % pInversion - 倒位概率,一般取0.05-0.3之间较好(默认0.2) % options - 1*2矩阵,options(1)=0二进制编码(默认0),option(1)~=0十进制编 %码,option(2)设定求解精度(默认1e-4) % % ------------------------------------------------------------------------ T1=clock; if nargin<3, error('FMAXGA requires at least three input arguments'); end if nargin==3, eranum=200;popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==4, popsize=100;pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==5, pCross=0.8;pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==6, pMutation=0.1;pInversion=0.15;options=[0 1e-4];end if nargin==7, pInversion=0.15;options=[0 1e-4];end if find((LB-UB)>0) error('数据输入错误,请重新输入(LB

模拟退火算法与遗传算法性能比较

模拟退火算法与遗传算法性能比较 摘要:模拟退火算法与遗传算法是两种非常重要的多目标优化算法。其原理简单,对优化目标函数解析性没有要求,因此在工程问题中被广泛应用。本文介绍了这两种优化算法的原理,并分析了两种算法的性能并讨论了应用过程中的关键问题,对两种算法的合理选取及改进具有参考价值。 关键字:模拟退火,遗传算法,优化 1.前言 对于多目标优化问题,传统的做法是全局搜索,即“穷举法”。这种通过搜索整个解空间的方法虽然能获得全局最优解,但运算量非常大,当优化空间的维度非常高时,该方法在计算上不可行。通过利用目标函数的解析性质以及借助实际问题的约束条件能部分降低搜索空间,但任不能解决高维问题优化。面对复杂问题,求得最优解是很困难的,在有限时间内求得满意解是可能的。获取高维优化问题满意解的常用方法是迭代运算,但通常迭代运算容易陷入局部最优陷阱,造成“死循环”。模拟退火算法及遗传算法是两种原理简单的启发式智能搜索算法,均具有逃离局部陷阱的能力,是工程应用中快速获取满意解的常用算法,对其性能比较对于正确使用这两种智能优化算法具有重要意义。 2.算法介绍 2.1.模拟退火算法 模拟退火算法是一种随机搜索算法,Kirkpatrick[1]于1983年首次将该算法应用于多目标优化。该算法模拟冶金上的退火过程而得名,其基本思想是:对当前合理解增加扰动产生新解,评价新解对目标函数的改进情况,若小于零,则接受新解为新的当前解,否则以概率接受新解为新的当前解。新的当前解将将继续优化,直到没有显著改进为止。 模拟退火算法使用过程中以下细节影响其全局搜索性能。初始温度T选择越高,则搜索到全局最优解的可能性也越大,但计算复杂度也显著增大。反之,能节省时间,但易于陷入局部最优。依据解的质量变化概率选择温度下降策略能增强算法性能。每次温度降低迭代次数及算法的终止可由给定迭代次数内获得更优解的概率而确定。 2.1.遗传算法 遗传算法最早由Holland等[2]提出,该算法模拟遗传变异与自然选择机制,是一种通过交换机制,重组基因串的概率搜索算法,其基本思想是:分析解空间大小及精度要求,确定合理解唯一编码形式。合理解转化成的编码即为染色体,随机选取的多个初始染色体构成初始种群。会依据评价函数计算种群中每个个体

遗传算法求解TSP问题实验报告推荐文档

人工智能实验报告 实验六遗传算法实验II 一、实验目的: 熟悉和掌握遗传算法的原理、流程和编码策略,并利用遗传求解函数优化问题,理解求解TSP 问题的流程并测试主要参数对结果的影响。 二、实验原理: 旅行商问题,即TSP问题(Traveling Salesman Problem)是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路经的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。TSP问题是一个组合优化问题。该问题可以被证明具有NPC计算复杂性。因此,任何能使该问题的求解得以简化的方法,都将受到高度的评价和关注。 遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程。它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体。这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代。后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程。群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解。要求利用遗传算法求解TSP问题的最短路径。 三、实验内容: 1、参考实验系统给出的遗传算法核心代码,用遗传算法求解TSP的优化问题,分析遗传算法求解不同规模TSP问题的算法性能。 2、对于同一个TSP问题,分析种群规模、交叉概率和变异概率对算法结果的影响。 3、增加1种变异策略和1种个体选择概率分配策略,比较求解同一TSP问题时不同变异策略及不同个体选择分配策略对算法结果的影响。 4、上交源代码。 四、实验报告要求: 1、画出遗传算法求解TSP问题的流程图。 开始初始化种群(随机产生城市坐标)确定种群规模、迭代次数、个体选择方式、交叉概率、变异概率等 计算染色体适应度值(城市之间的欧氏距离)按某个选择概率选择个体YES个体交叉个体变异P<迭代总次数N输入适应度最高的结

相关文档
最新文档