文档库 最新最全的文档下载
当前位置:文档库 › 遗传算法与优化问题

遗传算法与优化问题

遗传算法与优化问题
遗传算法与优化问题

实验十遗传算法与优化问题

一、问题背景与实验目的

遗传算法(Genetic Algorithm —GA),就是模拟达尔文的遗传选择与自然淘汰的生物进化过程的计算模型,它就是由美国Michigan大学的J、Holla nd教授于1975 年首先提出的?遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位.

本实验将首先介绍一下遗传算法的基本理论,然后用其解决几个简单的函数最值问题,使读者能够学会利用遗传算法进行初步的优化计算?

1. 遗传算法的基本原理

遗传算法的基本思想正就是基于模仿生物界遗传学的遗传过程?它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体?这个群体在问题特定的环境里生存

竞争,适者有最好的机会生存与产生后代?后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程.群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解?值得注意的一点就是,现在的遗传算法就是受生物进化论学说的启发提出的,这种学说对我们用计算机解决复杂问题很有用,而它本身就是否完全正确并不重要(目前生物界对此学说尚有争议).

(1)遗传算法中的生物遗传学概念

由于遗传算法就是由进化论与遗传学机理而产生的直接搜索优化方法;故而

在这个算法中要用到各种进化与遗传学的概念?

首先给出遗传学概念、遗传算法概念与相应的数学概念三者之间的对应关系这些概念

(2)遗传算法的步骤

遗传算法计算优化的操作过程就如同生物学上生物遗传进化的过程,主要有三个基本操作(或称为算子):选择(Selection)、交叉(Crossover)、变异(Mutation).

遗传算法基本步骤主要就是:先把问题的解表示成“染色体”,在算法中也就就是以二进制编码的串,在执行遗传算法之前,给出一群“染色体”,也就就是假设的可行解.然后,把这些假设的可行解置于问题的“环境”中,并按适者生存的原则从中选

择出较适应环境的“染色体”进行复制

,再通过交叉、变异过程产生更适

应环境的新一代“染色体”群.经过这样的一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就就是问题的最优解.

下面给出遗传算法的具体步骤,流程图参见图1:

第一步:选择编码策略,把参数集合(可行解集合)转换染色体结构空间;

第二步:定义适应函数,便于计算适应值;

第三步:确定遗传策略,包括选择群体大小,选择、交叉、变异方法以及确定交叉概率、变异概率等遗传参数;

第四步:随机产生初始化群体;

第五步:计算群体中的个体或染色体解码后的适应值;

第六步:按照遗传策略,运用选择、交叉与变异算子作用于群体,形成下一代群体;

第七步:判断群体性能就是否满足某一指标、或者就是否已完成预定的迭代次数,不满足则返回第五步、或者修改遗传策略再返回第六步.

图1 一个遗传算法的具体步骤

遗传算法有很多种具体的不同实现过程,以上介绍的就是标准遗传算法的主

要步骤,此算法会一直运行直到找到满足条件的最优解为止

2. 遗传算法的实际应用

例 1:设 f (x) x 2 2x 0.5,求 max f(x), x [ 1,2].

注:这就是一个非常简单的二次函数求极值的问题,相信大家都会做.在此我们 要研究的不就是问题本身,而就是借此来说明如何通过遗传算法分析与解决问题 .

在此将细化地给出遗传算法的整个过程.

(1)编码与产生初始群体

首先第一步要确定编码的策略,也就就是说如何把1到2这个区间内的数用 计算机语言表示出来.

编码就就是表现型到基因型的映射,编码时要注意以下三个原则:

完备性:问题空间中所有点(潜在解)都能成为GA 编码空间中的点(染色体位 串)的表现型;

健全性:GA 编码空间中的染色体位串必须对应问题空间中的某一潜在解 ; 非冗余性:染色体与潜在解必须 --- 对应.

这里我们通过采用二进制的形式来解决编码问题,将某个变量值代表的个体 表示为一个{0,1}二进制串.当然,串长取决于求解的精度.如果要设定求解精度到 六位小数,由于区间长度为2 ( 1) 3,则必须将闭区间[1,2]分为3 106等分.因

为2097152 221 3 106 222 4194304所以编码的二进制串至少需要 22位.

将一个二进制串(b 21b 20b 19…b 1b 0)转化为区间[1,2]内对应的实数值很简单,只 需采取以下两步(Matlab 程序参见附录4):

1)将一个二进制串(b 21b 20b 19…b 1b 0)代表的二进制数化为 21

(b 21b 20b]9 ( b i 2 )10 x

i 0

例如,一个二进制串 a=<10101000111:表示实数 0、637197.

x'=(10101000111>=2288967

二进制串<>,<111111111111111111111则分别表示区间的两个端点值-1与2. 利用这种方法我们就完成了遗传算法的第一步

编码 ,这种二进制编码的 方法完全符合上述的编码的三个原则.

首先我们来随机的产生一个个体数为 4个的初始群体如下:

pop(1)={

<11100011110〉,%% a1

<10001000010>, %% a2

<10110000000>, %% a3

<>} %% a4(Matlab 程序参见附录2)

化成十进制的数分别为:

pop(1)={ 1、523032,0、574022 ,-0、697235 ,0 247238 } 接下来我们就要解决每10进制数:

2)x'对应的区间[1,2]内的实数:

x 1 x' 2 ( 1) 222

2288967 3

222 1 0.637197

个染色体个体的适应值问题了.

(2) 定义适应函数与适应值

由于给定的目标函数f(x) X 2 2x 0.5在[1,2]内的值有正有负,所以必须

通过建立适应函数与目标函数的映射关系,保证映射后的适应值非负,而且目标函 数的优化方向应对应于适应值增大的方向,也为以后计算各个体的入选概率打下 基础.

对于本题中的最大化问题,定义适应函数g(x),采用下述方法:

f (X) F min ,若 f (X) F min 0

式中F min 既可以就是特定的输入值,也可以就是当前所有代或最近 K 代中f(x)的 最小值,这里为了便于计算,将采用了一个特定的输入值?

若取F min 1,则当f(X )1时适应函数g(x) 2 ;当f(X ) 1.1时适应函数 g(x) 0.

由上述所随机产生的初始群体

,我们可以先计算出目标函数值分别如下

(Matlab 程序参见附录3):

f [pop(1)]={ 1、226437,1、318543 , -1、380607,0 933350 }

然后通过适应函数计算出适应值分别如下(Matlab 程序参见附录5、附录6): 取 F min 1 , g[pop(1)]= { 2、226437,2、318543 ,

0,1、933350 }

(3) 确定选择标准 这里我们用到了适应值的比例来作为选择的标准,得到的每个个体的适应值 比例叫作入选概率.其计算公式如下:

对于给定的规模为n 的群体pop={ a 1 ,a 2,a 3,L ,a n },个体a i 的适应值为g(a)

则其入选概率为

g(a i ) P s (a) -

!

, i 1,2,3, ,n

g(aj i 1 由上述给出的群体,我们可以计算出各个个体的入选概率

4

首先可得

g(a i ) 6.478330 ,

i 1 4

然后分别用四个个体的适应值去除以 g(a),得:

i 1

P(a1)=2、226437 / 6、478330 = 0 343675 %% a1

P(a2)=2、318543 / 6、478330 = 0 357892 %% a2

P(a3)= 0 / 6、478330 = 0 %% a3

P(a4)=1、933350 / 6、478330 = 0 298433 %% a4(Matlab 程序参见附录 7)

(4) 产生种群

计算完了入选概率后,就将入选概率大的个体选入种群,淘汰概率小的个体,并 用入选概率最大的个体补入种群,得到与原群体大小同样的种群(Matlab 程序参见 附录8、附录11).

要说明的就是:附录11的算法与这里不完全相同.为保证收敛性,附录11的算 法作了

修正,采用了最佳个体保存方法(elitist model),具体内容将在后面给出介绍.

g(x) 0, 其他

由初始群体的入选概率我们淘汰掉a3,再加入a2补足成与群体同样大小的种

群得到newpop⑴如下:

n ewpop(1)={

<11010111010〉,%% al

<10000110010〉,%% a2

<10001000010〉,%% a2

<>} %% a4

⑸交叉

交叉也就就是将一组染色体上对应基因段的交换得到新的染色体,然后得到新的染色体组,组成新的群体(Matlab程序参见附录9).

我们把之前得到的newpop(1)的四个个体两两组成一对,重复的不配对,进行交叉.(可以在任'位进仃交叉)

<110101110 ■ /10>, <11001000010>

X交叉得:

<100001100 、10>, <11100011110>

<100 >, <10010010101>

X交叉得:

<011 > /、>

通过交叉得到了四个新个体,得到新的群体jchpop (1)如下:

jchpop(1)={

<010>,

<11100011110>,

<011>,

<>}

这里采用的就是单点交叉的方法,当然还有多点交叉的方法,不过有些烦琐,这里就不着重介绍了.

⑹变异

变异也就就是通过一个小概率改变染色体位串上的某个基因(Matlab程序参见附录10).

现把刚得到的jchpop(1)中第3个个体中的第9位改变,就产生了变异,得到了新的群体pop(2)如下:

pop(2)= {

<11001000010>,

<11100011110>,

<111>,

<> }

然后重复上述的选择、交叉、变异直到满足终止条件为止.

(7)终止条件

遗传算法的终止条件有两类常见条件:(1)采用设定最大(遗传)代数的方法,一般可设定为50代,此时就可能得出最优解.此种方法简单易行,但可能不就是很精确(Matlab程序参见附录1);(2)根据个体的差异来判断,通过计算种群中基因多样性测

度,即所有基因位相似程度来进行控制.

3. 遗传算法的收敛性

前面我们已经就遗传算法中的编码、适应度函数、选择、交叉与变异等主要

操作的基本内容及设计进行了详细的介绍?作为一种搜索算法,遗传算法通过对

这些操作的适当设计与运行,可以实现兼顾全局搜索与局部搜索的所谓均衡搜索具体实现见下图2所示.

图2均衡搜索的具体实现图示

应该指出的就是,遗传算法虽然可以实现均衡的搜索,并且在许多复杂问题的

求解中往往能得到满意的结果,但就是该算法的全局优化收敛性的理论分析尚待解决?目前普遍认为,标准遗传算法并不保证全局最优收敛?但就是,在一定的约

束条件下,遗传算法可以实现这一点?

下面我们不加证明地罗列几个定理或定义,供读者参考(在这些定理的证明中要用到许多概率论知识,特别就是有关马尔可夫链的理论,读者可参阅有关文定理1如果变异概率为P m (0,1),交叉概率为P c [0,1],同时采用比例选择

法(按个体适应度占群体适应度的比例进行复制),则标准遗传算法的变换矩阵P

就是基本的?

定理2标准遗传算法(参数如定理1)不能收敛至全局最优解.

由定理2可以知道,具有变异概率P m (0,1),交叉概率为P c [0,1]以及按比例

选择的标准遗传算法就是不能收敛至全局最最优解?我们在前面求解例1时所用

的方法就就是满足定理1的条件的方法?这无疑就是一个令人沮丧的结论?然而,庆幸的就是,只要对标准遗传算法作一些改进,就能够保证其收敛性?具体如下:我们对标准遗传算法作一定改进,即不按比例进行选择,而就是保留当前所得的最优解(称作超个体).该超个体不参与遗传?

最佳个体保存方法(elitist model) 的思想就是把群体中适应度最高的个体

不进行配对交叉而直接复制到下一代中.此种选择操作又称复制(copy).De Jong 对此方法作了如下定义:

定义设到时刻t(第t代)时,群体中a(t)为最佳个体.又设A(t+ 1)为新一代群体,若A(t+ 1)中不存在a*(t),则把a*(t)作为A(t + 1)中的第n+1个个体(其中,n 为群体大小)(Matlab程序参见附录11).

采用此选择方法的优点就是,进化过程中某一代的最优解可不被交叉与变异操作

所破坏.但就是,这也隐含了一种危机,即局部最优个体的遗传基因会急速增加而使进化有可能限于局部解.也就就是说,该方法的全局搜索能力差,它更适合单峰性质的搜索空间搜索,而不就是多峰性质的空间搜索.所以此方法一般都与

其她选择方法结合使用.

定理 3 具有定理1所示参数, 且在选择后保留当前最优值的遗传算法最终能收敛到全局最优解.

当然, 在选择算子作用后保留当前最优解就是一项比较复杂的工作,因为该解在选择算子作用后可能丢失.但就是定理 3 至少表明了这种改进的遗传算法能够收敛至全局最优解.有意思的就是,实际上只要在选择前保留当前最优解,就可以保证收敛,定理4描述了这种情况.

定理 4 具有定理1参数的, 且在选择前保留当前最优解的遗传算法可收敛于全局最优解.

例2:设f(x) 3 x2 x,求maxf(x), x [0,2],编码长度为5,采用上述定理4

所述的“在选择前保留当前最优解的遗传算法”进行.

此略, 留作练习.

二、相关函数(命令)及简介

本实验的程序中用到如下一些基本的Matlab函数:ones, zeros, sum, size, length, subs, double 等,以及for, while 等基本程序结构语句,读者可参考前面专门关于Matlab 的介绍,也可参考其她数学实验章节中的“相关函数(命令)及简介” 内容,此略.

三、实验内容

上述例 1 的求解过程为:

群体中包含六个染色体,每个染色体用22 位0—1 码,变异概率为0、01,变量

区间为[ 1,2] ,取Fmin= 2,遗传代数为50 代,则运用第一种终止条件(指定遗传

代数)的Matlab程序为:

[Count,Result,BestMember]=Genetic1(22,6,'-x*x+2*x+0、5',-1,2,-2,0、01,50) 执行结果为:

Count =

50 Result

=

1、0316 1、0316 1、0316 1、0316 1、0316 1、0316

1、4990 1、4990 1、4990 1、4990 1、4990 1、4990

BestMember =

1、0316

1、4990

图2例1的计算结果

(注:上图为遗传进化过程中每一代的个体最大适应度;

而下图为目前为止的个体最大适应度单调递增)

我们通过Matlab软件实现了遗传算法,得到了这题在第一种终止条件下的最优解:当x 取1、0316 时,Max f(x) 1.4990 .

当然这个解与实际情况还有一点出入(应该就是x取1时,Max f(x) 1.5000), 但对于一个计算机算法来说已经很不错了.

我们也可以编制Matlab程序求在第二种终止条件下的最优解.此略,留作练习. 实践表明,此时的遗传算法只要经过10代左右就可完成收敛,得到另一个“最优解”,与前面的最优解相差无几.

四、自己动手

1 .用Matlab编制另一个主程序Genetic2、m,求例1的在第二种终止条件下的最优

解.

提示:一个可能的函数调用形式以及相应的结果为:

[Count,Result,BestMember]=Genetic2(22,6,'-x*x+2*x+0、5',-1,2,-2,0、01,0、00001) Count =

13

Result =

1、0392 1、0392 1、0392 1、0392 1、0392 1、0392

1、4985 1、4985 1、4985 1、4985 1、4985 1、4985 BestMember =

1、0392

1、4985

可以瞧到:两组解都已经很接近实际结果,对于两种方法所产生的最优解差异很小.可见这两种终止算法都就是可行的,而且可以知道对于例1的冋题,遗传算法只要经过10代左右就可以完成收敛,达到一个最优解.

2 ?按照例2的具体要求,用遗传算法求上述例2的最优解.

3?附录9子程序Crossing m中的第3行到第7行为注解语句.若去掉前面的% 号,则程序的算法思想有什么变化?

4. 附录9子程序Crossing、m中的第8行至第13行的程序表明,当Dim(1)>=3 时,将交换数组Population的最后两行,即交换最后面的两个个体.其目的就是什么?

5. 仿照附录10子程序Mutation、m,修改附录9子程序Crossing、m,使得交叉过程也有一个概率值(一般取0、65~0、90);同时适当修改主程序Genetic1、m或主程序Genetic2、m,以便代入交叉概率.

6. 设f(x) x2 4x 1,求maxf(x), x [ 2,2],要设定求解精度到15位小数.

五、附录

附录1:主程序Genetic1、m

fun ctio n

[Cou nt,Result,BestMember]=Ge netic1(MumberLe ngth,MemberNumber,Fu nctio nFitn ess,MinX,MaxX,Fmi n, Mutatio nProbability,Ge n)

Populatio n=Populatio nln itialize(MumberLe ngth,MemberNumber);

global Count;

global Curren tBest;

Cou nt=1;

Populatio nCode=Populati on;

Populatio nFit ness=Fit ness(Populatio nCode,F un ctio nFit

ness,MinX,MaxX,Mumbe rLen gth);

Populatio nFit nessF=Fit nessF(Populatio nFit ness,Fmi n);

PopulationProbability=Probability(PopulationFitnessF);

[Population,CurrentBest,EachGenMaxFitness]=Elitist(PopulationCode,Populatio nFitness,MumberLength);

EachMaxFitness(Count)=EachGenMaxFitness;

MaxFitness(Count)=CurrentBest(length(CurrentBest));

while Count

NewPopulation=Select(Population,PopulationProbability,MemberNumber);

Population=NewPopulation;

NewPopulation=Crossing(Population,FunctionFitness,MinX,MaxX,MumberLength);

Population=NewPopulation;

NewPopulation=Mutation(Population,MutationProbability);

Population=NewPopulation;

PopulationFitness=Fitness(Population,FunctionFitness,MinX,MaxX,MumberLength);

PopulationFitnessF=FitnessF(PopulationFitness,Fmin);

PopulationProbability=Probability(PopulationFitnessF);

Count=Count+1;

[NewPopulation,CurrentBest,EachGenMaxFitness]=Elitist(Population,PopulationFitn ess,MumberLength);

EachMaxFitness(Count)=EachGenMaxFitness;;

MaxFitness(Count)=CurrentBest(length(CurrentBest));

Population=NewPopulation;

end

Dim=size(Population);

Result=ones(2,Dim(1));

for i=1:Dim(1)

Result(1,i)=Translate(Population(i,:),MinX,MaxX,MumberLength);

end

Result(2,:)=PopulationFitness;

BestMember(1,1)=Translate(CurrentBest(1:MumberLength),MinX,MaxX,Mumb erLength);

BestMember(2,1)=CurrentBest(MumberLength+1);

close all

subplot(211)

plot(EachMaxFitness)

subplot(212)

plot(MaxFitness)

【程序说明】主程序Genetic1、m 包含了8 个输入参数:

(1) MumberLength: 表示一个染色体位串的二进制长度.(例1 中取22)

(2) MemberNumber: 表示群体中染色体的个数.(例1 中取6 个)

(3) FunctionFitness: 表示目标函数,就是个字符串,因此用表达式时,用单引号

2

括出.(例 1 中就是f(x) x 2x 0.5)

(4) MinX: 变量区间的下限.(例1中就是[ 1,2] 中的)

(5) MaxX: 变量区间的上限.(例1中就是[ 1,2] 中的2)

(6) Fmin: 定义适应函数过程中给出的一个目标函数的可能的最小值,由操作者自己给出.(例 1 中取Fmin= 2)

(7) MutationProbability: 表示变异的概率,一般都很小.(例1 中取0、01)

(8) Gen: 表示遗传的代数,也就就是终止程序时的代数.(例1 中取50) 另外,主程序Genetic1、m 包含了 3 个输出值: Count 表示遗传的代数;Result 表示计算的结果,也就就是最优解;BestMember 表示最优个体及其适应值. 附录2:子程序PopulationInitialize 、m

function Population=PopulationInitialize(MumberLength,MemberNumber)

Temporary=rand(MemberNumber,MumberLength);

Population=(Temporary>=0、5*ones(size(Temporary)));

【程序说明】子程序PopulationInitialize 、m 用于产生一个初始群体.这个初始群体含有MemberNumber个染色体,每个染色体有MumberLength个基因(二进制码). 附录3:子程序Fitn ess、m

function PopulationFitness=

Fitness(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength) Dim=size(PopulationCode);

PopulationFitness=zeros(1,Dim(1));

for i=1:Dim(1)

PopulationFitness(i)=

Transfer(PopulationCode(i,:),FunctionFitness,MinX,MaxX,MumberLength);

end

【程序说明】子程序Fitn ess、m 用于计算群体中每一个染色体的目标函数值.子

程序中含有5个输入参数:PopulationCode表示用0 —1代码表示的群

体,FunctionFitness表示目标函数,它就是一个字符串,因此写入调用程序时,应该用单引号括出,MumberLength表示染色体位串的二进制长度.MinX与MaxX分别指变量区间的上下限.

附录4:子程序Translate、m

function PopulationData=Translate(PopulationCode,MinX,MaxX,MumberLength) PopulationData=0;

Dim=size(PopulationCode);

for i=1:Dim(2)

Populatio nData=Populatio nData+Populatio nCode(i)*(2A(MumberLe ngth-i));

end

Populatio nData=MinX+Populatio nData*(MaxX-MinX)/(2Pim(2)-1);

【程序说明】子程序Translate、m 把编成码的群体翻译成变量的数值.含有 4 个输入参数,PopulationCode, MinX, MaxX, MumberLength.

附录5:子程序Transfer、m

function PopulationFitness=

Transfer(PopulationCode,FunctionFitness,MinX,MaxX,MumberLength) PopulationFitness=0;

PopulationData=Translate(PopulationCode,MinX,MaxX,MumberLength);

PopulationFitness=double(subs(FunctionFitness,'x',sym(PopulationData)));

【程序说明】子程序Transfer 把群体中的染色体的目标函数值用数值表示出来, 它

就是Fitness 的重要子程序.其有 5 个输入参数分别为PopulationCode, FunctionFitness, MinX, MaxX,MumberLength.

附录6:子程序FitnessF、m

function PopulationFitnessF=FitnessF(PopulationFitness,Fmin)

Dim=size(PopulationFitness);

PopulationFitnessF=zeros(1,Dim(2));

for i=1:Dim(2)

if PopulationFitness(i)>Fmin PopulationFitnessF(i)=PopulationFitness(i)-Fmin;

end

if PopulationFitness(i)<=Fmin

PopulationFitnessF(i)=0;

end

end

【程序说明】子程序FitnessF、m 就是用于计算每个染色体的适应函数值的.其输入参数如下:PopulationFitness 为群体中染色体的目标函数值,Fmin 为定义适应函数过程中给出的一个目标函数的可能的最小值.

附录7:子程序Probability 、m

function PopulationProbability=Probability(PopulationFitness)

SumPopulationFitness=sum(PopulationFitness);

PopulationProbability=PopulationFitness/SumPopulationFitness;

【程序说明】子程序Probability 、m 用于计算群体中每个染色体的入选概率,输入参数为群体中染色体的适应函数值PopulationFitness.

附录8:子程序Select、m

function NewPopulation=

Select(Population,PopulationProbability,MemberNumber)

CProbability(1)=PopulationProbability(1);

for i=2:MemberNumber

CProbability(i)=CProbability(i-1)+PopulationProbability(i);

end

for i=1:MemberNumber

r=rand(1);

Index=1;

while r>CProbability(Index)

Index=Index+1;

end

NewPopulation(i,:)=Population(Index,:);

end

【程序说明】子程序Select、m 根据入选概率(计算累计概率)在群体中按比例选择部分染色体组成种群,该子程序的3个输入参数分别为:群体Population,入选概

率PopulationProbability,群体中染色体的个数MemberNumber.

附录9:子程序Crossing、m

function NewPopulation=

Crossing(Population,FunctionFitness,MinX,MaxX,MumberLength)

%%PopulationFitness=

%% Fitness(Population,FunctionFitness,MinX,MaxX,MumberLength);

%%PopulationProbability=Probability(PopulationFitness);

%%[SortResult,SortSite]=sort(PopulationProbability);

%%Population=Population(SortSite,:);

Dim=size(Population);

if Dim(1)>=3

Temp=Population(Dim(1),:);

Population(Dim(1),:)=Population(Dim(1)-1,:);

Population(Dim(1)-1,:)=Temp;

end

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

SiteArray=randperm(Dim(2));

Site=SiteArray(1);

Temp=Population(i,1:Site);

Population(i,1:Site)=Population(i+1,1:Site);

Population(i+1,1:Site)=Temp;

end

NewPopulation=Population;

【程序说明】子程序Crossing、m 用于群体中的交叉并产生新群体.其输入参数为:Population, FunctionFitness,MinX,MaxX,MumberLength.

附录10:子程序Mutation 、m

function NewPopulation=Mutation(Population,MutationProbability)

Dim=size(Population);

for i=1:Dim(1)

Probability=rand(1);

Site=randperm(Dim(2));

if Probability

if Population(i,Site(1))==1

Population(i,Site(1))=0;

end

if Population(i,Site(1))==0

Population(i,Site(1))=1;

end

end

end

NewPopulation=Population;

【程序说明】子程序Mutation 、m 用于群体中少量个体变量并产生新的群体.输入参数为:群体Population 与变异概率MutationProbability.

附录11:子程序Elitist 、m

function [NewPopulationIncludeMax,CurrentBest,EachGenMaxFitness]= Elitist(Population,PopulationFitness,MumberLength)

global Count CurrentBest;

[MinFitness,MinSite]=min(PopulationFitness);

[MaxFitness,MaxSite]=max(PopulationFitness);

EachGenMaxFitness=MaxFitness;

if Count==1

CurrentBest(1:MumberLength)=Population(MaxSite,:);

CurrentBest(MumberLength+1)=PopulationFitness(MaxSite);

else

if CurrentBest(MumberLength+1)

CurrentBest(1:MumberLength)=Population(MaxSite,:);

CurrentBest(MumberLength+1)=PopulationFitness(MaxSite);

end

Population(MinSite,:)=CurrentBest(1:MumberLength);

end

NewPopulationIncludeMax=Population;

【程序说明】子程序Elitist 、m 用到最佳个体保存方法(“优胜劣汰”思想).输入参数为: 群体Population, 目标函数值PopulationFitness 与染色体个数MumberLength.

使用遗传算法求解函数最大值

使用遗传算法求解函数最大值 题目 使用遗传算法求解函数 在及y的最大值。 解答 算法 使用遗传算法进行求解,篇末所附源代码中带有算法的详细注释。算法中涉及不同的参数,参数的取值需要根据实际情况进行设定,下面运行时将给出不同参数的结果对比。 定义整体算法的结束条件为,当种群进化次数达到maxGeneration时停止,此时种群中的最优解即作为算法的最终输出。 设种群规模为N,首先是随机产生N个个体,实验中定义了类型Chromosome表示一个个体,并且在默认构造函数中即进行了随机的操作。 然后程序进行若干次的迭代,在每次迭代过程中,进行选择、交叉及变异三个操作。 一选择操作 首先计算当前每个个体的适应度函数值,这里的适应度函数即为所要求的优化函数,然后归一化求得每个个体选中的概率,然后用轮盘赌的方法以允许重复的方式选择选择N个个体,即为选择之后的群体。

但实验时发现结果不好,经过仔细研究之后发现,这里在x、y取某些值的时候,目标函数计算出来的适应值可能会出现负值,这时如果按照把每个个体的适应值除以适应值的总和的进行归一化的话会出现问题,因为个体可能出现负值,总和也可能出现负值,如果归一化的时候除以了一个负值,选择时就会选择一些不良的个体,对实验结果造成影响。对于这个问题,我把适应度函数定为目标函数的函数值加一个正数,保证得到的适应值为正数,然后再进行一般的归一化和选择的操作。实验结果表明,之前的实验结果很不稳定,修正后的结果比较稳定,趋于最大值。 二交叉操作 首先是根据交叉概率probCross选择要交叉的个体进行交叉。

这里根据交叉参数crossnum进行多点交叉,首先随机生成交叉点位置,允许交叉点重合,两个重合的交叉点效果互相抵消,相当于没有交叉点,然后根据交叉点进行交叉操作,得到新的个体。 三变异操作 首先是根据变异概率probMutation选择要变异的个体。 变异时先随机生成变异的位置,然后把改位的01值翻转。

MATLAB实验遗传算法和优化设计

实验六 遗传算法与优化设计 一、实验目的 1. 了解遗传算法的基本原理和基本操作(选择、交叉、变异); 2. 学习使用Matlab 中的遗传算法工具箱(gatool)来解决优化设计问题; 二、实验原理及遗传算法工具箱介绍 1. 一个优化设计例子 图1所示是用于传输微波信号的微带线(电极)的横截面结构示意图,上下两根黑条分别代表上电极和下电极,一般下电极接地,上电极接输入信号,电极之间是介质(如空气,陶瓷等)。微带电极的结构参数如图所示,W 、t 分别是上电极的宽度和厚度,D 是上下电极间距。当微波信号在微带线中传输时,由于趋肤效应,微带线中的电流集中在电极的表面,会产生较大的欧姆损耗。根据微带传输线理论,高频工作状态下(假定信号频率1GHz ),电极的欧姆损耗可以写成(简单起见,不考虑电极厚度造成电极宽度的增加): 图1 微带线横截面结构以及场分布示意图 {} 28.6821ln 5020.942ln 20.942S W R W D D D t D W D D W W t D W W D e D D παπππ=+++-+++?????? ? ??? ??????????? ??????? (1) 其中πρμ0=S R 为金属的表面电阻率, ρ为电阻率。可见电极的结构参数影响着电极损耗,通过合理设计这些参数可以使电极的欧姆损耗做到最小,这就是所谓的最优化问题或者称为规划设计问题。此处设计变量有3个:W 、D 、t ,它们组成决策向量[W, D ,t ] T ,待优化函数(,,)W D t α称为目标函数。 上述优化设计问题可以抽象为数学描述: ()()min .. 0,1,2,...,j f X s t g X j p ????≤=? (2)

遗传算法与组合优化.

第四章 遗传算法与组合优化 4.1 背包问题(knapsack problem ) 4.1.1 问题描述 0/1背包问题:给出几个尺寸为S 1,S 2,…,S n 的物体和容量为C 的背包,此处S 1,S 2,…,S n 和C 都是正整数;要求找出n 个物件的一个子集使其尽可能多地填满容量为C 的背包。 数学形式: 最大化 ∑=n i i i X S 1 满足 ,1C X S n i i i ≤∑= n i X i ≤≤∈1},1,0{ 广义背包问题:输入由C 和两个向量C =(S 1,S 2,…,S n )和P =(P 1,P 2,…,P n )组成。设X 为一整数集合,即X =1,2,3,…,n ,T 为X 的子集,则问题就是找出满足约束条件∑∈≤T i i C X ,而使∑∈T i i P 获得最大的子集T ,即求S i 和P i 的下标子集。 在应用问题中,设S 的元素是n 项经营活动各自所需的资源消耗,C 是所能提供的资源总量,P 的元素是人们从每项经营活动中得到的利润或收益,则背包问题就是在资源有限的条件下,追求总的最大收益的资源有效分配问题。 广义背包问题可以数学形式更精确地描述如下: 最大化 ∑=n i i i X P 1 满足 ,1C X S n i i i ≤∑= n i X i ≤≤∈1},1,0{ 背包问题在计算理论中属于NP —完全问题,其计算复杂度为O (2n ),若允许物件可以部分地装入背包,即允许X ,可取从0.00到1.00闭区间上的实数,则背包问题就简化为极简单的P 类问题,此时计算复杂度为O (n )。

4.1.2 遗传编码 采用下标子集T 的二进制编码方案是常用的遗传编码方法。串T 的长度等于n(问题规模),T i (1≤i ≤n )=1表示该物件装入背包,T i =0表示不装入背包。基于背包问题有近似求解知识,以及考虑到遗传算法的特点(适合短定义距的、低阶的、高适应度的模式构成的积木块结构类问题),通常将P i ,S i 按P i /S i 值的大小依次排列,即P 1/S 1≥P 2/S 2≥…≥P n /S n 。 4.1.3 适应度函数 在上述编码情况下,背包问题的目标函数和约束条件可表示如下。 目标函数:∑==n i i i P T T J 1 )( 约束条件:C S T n i i i ≤∑=1 按照利用惩罚函数处理约束条件的方法,我们可构造背包问题的适应度函数f (T )如下式: f (T ) = J (T ) + g (T ) 式中g (T )为对T 超越约束条件的惩罚函数,惩罚函数可构造如下: 式中E m 为P i /S (1≤i ≤n )i 的最大值,β为合适的惩罚系数。 4.2 货郎担问题(Traveling Salesman Problem ——TSP ) 在遗传其法研究中,TSP 问题已被广泛地用于评价不同的遗传操作及选择机制的性能。之所以如此,主要有以下几个方面的原因: (1) TSP 问题是一个典型的、易于描述却难以处理的NP 完全(NP-complete )问题。有效地 解决TSP 问题在可计算理论上有着重要的理论价值。 (2) TSP 问题是诸多领域内出现的多种复杂问题的集中概括和简化形式。因此,快速、有效 地解决TSP 问题有着极高的实际应用价值。 (3) TSP 问题因其典型性已成为各种启发式的搜索、优化算法的间接比较标准,而遗传算法 就其本质来说,主要是处理复杂问题的一种鲁棒性强的启发式随机搜索算法。因此遗传算法在TSP 问题求解方面的应用研究,对于构造合适的遗传算法框架、建立有效的遗传操作以及有效地解决TSP 问题等有着多方面的重要意义。

遗传算法与优化问题(重要,有代码)

实验十遗传算法与优化问题 一、问题背景与实验目的 遗传算法(Genetic Algorithm—GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国Michigan大学的J.Holland教授于1975年首先提出的.遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位. 本实验将首先介绍一下遗传算法的基本理论,然后用其解决几个简单的函数最值问题,使读者能够学会利用遗传算法进行初步的优化计算.1.遗传算法的基本原理 遗传算法的基本思想正是基于模仿生物界遗传学的遗传过程.它把问题的参数用基因代表,把问题的解用染色体代表(在计算机里用二进制码表示),从而得到一个由具有不同染色体的个体组成的群体.这个群体在问题特定的环境里生存竞争,适者有最好的机会生存和产生后代.后代随机化地继承了父代的最好特征,并也在生存环境的控制支配下继续这一过程.群体的染色体都将逐渐适应环境,不断进化,最后收敛到一族最适应环境的类似个体,即得到问题最优的解.值得注意的一点是,现在的遗传算法是受生物进化论学说的启发提出的,这种学说对我们用计算机解决复杂问题很有用,而它本身是否完全正确并不重要(目前生物界对此学说尚有争议). (1)遗传算法中的生物遗传学概念 由于遗传算法是由进化论和遗传学机理而产生的直接搜索优化方法;故而在这个算法中要用到各种进化和遗传学的概念. 首先给出遗传学概念、遗传算法概念和相应的数学概念三者之间的对应关系.这些概念如下: 序号遗传学概念遗传算法概念数学概念 1 个体要处理的基本对象、结构也就是可行解 2 群体个体的集合被选定的一组可行解 3 染色体个体的表现形式可行解的编码 4 基因染色体中的元素编码中的元素 5 基因位某一基因在染色体中的位置元素在编码中的位置 6 适应值个体对于环境的适应程度, 或在环境压力下的生存能力可行解所对应的适应函数值 7 种群被选定的一组染色体或个体根据入选概率定出的一组 可行解 8 选择从群体中选择优胜的个体, 淘汰劣质个体的操作保留或复制适应值大的可行解,去掉小的可行解 9 交叉一组染色体上对应基因段的 交换根据交叉原则产生的一组新解 10 交叉概率染色体对应基因段交换的概 率(可能性大小)闭区间[0,1]上的一个值,一般为0.65~0.90 11 变异染色体水平上基因变化编码的某些元素被改变

基于遗传算法的多式联运组合优化

第四章基于遗传算法的集装箱多式联运运输组合优化模型 的求解 4.1 遗传算法简介 4.1.1 遗传算法 遗传算法(Genetic Algorithm,GA)是在20世纪六七十年代由美国密歇根大学的Holland J.H.教授及其学生和同事在研究人工自适应系统中发展起来的一种随机搜索方法,通过进一步的研究逐渐形成了一个完整的理论和方法体系取名为基本遗传算法(Simple Genetic Algorithm)。在接下来几年的研究过程中Holland在研究自然和人工系统的自适应行为的过程中采用了这个算法,并在他的著作《自然系统和人工系统的适配》中对基本遗传算法的理论和方法进行了系统的阐述与描写,同时提出了在遗传算法的理论研究和发展中具有极为重要的作用的模式理论,它的编码技术和遗传操作成为了遗传算法被广泛并成功的应用的基础,经过许多学者多年来的研究,遗传算法逐渐成熟起来,到现在已经成为了一个非常大的体系,广泛的应用于组合优化、系统优化、过程控制、经济预测、模式识别以及智能控制等多个领域。De Jong于1975年在他的博士论文中设计了一系列针对于各种函数优化问题的遗传算法的执行策略,详细分析了各项性能的评价指标。在此基础上,美国伊利诺大学的Goldberg于1989年系统全面的阐述了遗传算法理论,并通过例证对遗传算法的多领域应用进行了分析,为现代遗传算法的研究和发展奠定了基础。 遗传算法是一种模仿基于自然选择的生物进化过程的随机方法,它以类似于基因的编码作为种群的个体,首先,随机的产生初始种群的个体,从这个群体开始进行搜索,根据类似于生物适应能力的适应度函数值的大小,按照不同问题各自的特点,在当前的种群中运用适当的选择策略选择适应能力大的个体,其中所选择出来的个体经过遗传操作、交叉操作以及变异操作产生下一代种群个体。如此反复,像生物的进化过程一样逐代进化,直到满足期望的终止条件为止。

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 。

基于遗传算法的库位优化问题

Logistics Sci-Tech 2010.5 收稿日期:2010-02-07 作者简介:周兴建(1979-),男,湖北黄冈人,武汉科技学院经济管理学院,讲师,武汉理工大学交通学院博士研究生,研究方向:物流价值链、物流系统规划;刘元奇(1988-),男,甘肃天水人,武汉科技学院经济管理学院;李泉(1989-),男,湖北 武汉人,武汉科技学院经济管理学院。 文章编号:1002-3100(2010)05-0038-03 物流科技2010年第5期Logistics Sci-Tech No.5,2010 摘 要:应用遗传算法对邯运集团仓库库位进行优化。在充分考虑邯运集团仓库所存放的货物种类、货物数量、出入库频 率等因素的基础上进行库位预分区规划,建立了二次指派问题的数学模型。利用遗传算法对其求解,结合MATLAB 进行编程计算并得出最优划分方案。 关键词:遗传算法;预分区规划;库位优化中图分类号:F253.4 文献标识码:A Abstract:The paper optimize the storage position in warehouse of Hanyun Group based on genetic algorithm.With thinking of the factors such as goods categories,quantities and frequencies of I/O,etc,firstly,the storage district is planned.Then the model of quadratic assignment problems is build,and genetic algorithm is utilized to resolve the problem.The software MATLAB is used to program and figure out the best alternatives. Key words:genetic algorithm;district planning;storage position optimization 1 库位优化的提出 邯郸交通运输集团有限公司(简称“邯运集团”)是一家集多种业务为一体的大型综合性物流企业。邯运集团的主要业务板块有原料采购(天信运业及天昊、天诚、天恒等)、快递服务(飞马快运)、汽贸业务(天诚汽贸)及仓储配送(河北快运)等。其中,邯运集团的仓储配送业务由河北快运经营,现有仓库面积总共40000㎡,主要的业务范围为医药、日用百货、卷烟、陶瓷、化工产品的配送,其中以医药为主。邯运集团库存货物主要涉及两个方面:一个是大宗的供应商货物,如医药,化工产品等;另一方面主要是大规模的小件快递货物,如日用百货等[1]。经分析,邯运集团在仓储运作方面存在如下问题: (1)存储货物繁多而分拣速度低下。仓库每天到货近400箱,有近200多种规格,缺乏一套行之有效的仓储管理系统。(2)货架高度不当而货位分配混乱。现在采用的货架高度在2米以上,而且将整箱货物直接码垛在货架上,不严格按货位摆放。当需要往货架最上层码放货物需要借助梯子,增加操作难度且操作效率较低。货物在拣货区货架摆放是以件为单位的,分拣和搬运速度较慢。 (3)拣货货架设计不当而仓储效率低下。发货前装箱工作主要由人工协同完成,出库效率低,出错率难以控制。 (4)存储能力和分拣能力不能满足需求。根据邯运集团的业务发展现状及趋势,现有的仓库储存和分拣能力远远达不到集团公司对配送业务量的需求。 当前邯运集团的货位分配主要采用物理地址编码的方式,很少考虑货位分配对仓储管理员工作效率的影响。对其进行库位优化设计不仅直接影响到其库存量的大小、出入库的效率,还间接影响到邯运集团的整体经营效益。本文对邯运集团的仓库货位进行优化时,结合考虑仓库所存放的货物种类、货物数量、出入库频率等因素,对仓库货位进行规划,以提高仓储效率。 2库位预分区规划 在进行仓库货位规划时,作如下假设: (1)货物的存放种类已知; (2)货物每种类的单位时间内存放的数量己知; (3) 每一种货物的存取频率已知。 在仓库货位优化中一个重要的环节即预分区。所谓预分区,是指没有存放货物时的分区,分区时只考虑仓储作业人员的速基于遗传算法的库位优化问题 Optimization of Storage Position in Warehouse Based on Genetic Algorithm 周兴建1,2,刘元奇1,李泉1 ZHOU Xing-jian 1,2,LIU Yuan-qi 1,LI Quan 1 (1.武汉科技学院经济管理学院,湖北武汉430073;2.武汉理工大学交通学院,湖北武汉430063) (1.College of Economics &Management,Wuhan University of Science &Engineering,Wuhan 430073,China; 2.School of Transportation,Wuhan University of Technology,Wuhan 430063,China) !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 38

各种优化算法求解函数优化问题

各种优化算法求解函数优化问题 1.遗传算法的简单介绍及流程 1.1遗传算法的基本原理 遗传算法 ( Genetic Algorithm ,简称 GA) 是近年来迅速发展起来的一种全新的随机搜索优化算法。与传统搜索算法不同 ,遗传算法从一组随机产生的初始解 (称为群体 )开始搜索。群体中的每个个体是问题的一个解 ,称为染色体。这些染色体在后续迭代中不断进化 , 称为遗传。遗传算法主要通过交叉、变异、选择运算实现。交叉或变异运算生成下一代染色体,称为后 代。染色体的好坏用适应度来衡量。根据适应度的大小从上一代和后代中选择一定数量的个 体 ,作为下一代群体 ,再继续进化 ,这样经过若干代之后 ,算法收敛于最好的染色体 ,它很可能就是问题的最优解或次优解。遗传算法中使用适应度这个概念来度量群体中的各个个体在优化计算中有可能达到最优解的优良程度。度量个体适应度的函数称为适应度函数。适应度函数的定义一般与具体求解问题有关。 1.2遗传算法的流程 第一步:确定决策变量及各种约束条件,即确定出个体的表现型X和问题的解空间; 第二步:确定出目标函数的类型,即求目标函数的最大值还是最小值,以及其数学描述形式或量化方法,建立其优化模型; 第三步:确定表示可行解的染色体编码方法,即确定出个体的基因型X和遗传算法的搜 索空间。 第四步:确定解码方法,即确定出个体的基因型 X和个体的表现型 X的对应关系或转换方法; 第五步:确定个体时候适应度的量化评价方法,即确定出由目标函数 f(X) 值到个体适应度F(X) 的转换规则; 第六步:设计遗传算子,即确定出选择运算、交叉运算、变异运算等遗传算子的具体操作方法; 第七步:确定出遗传算法的运行参数,即确定出遗传算法的M、 T、 Pc、 Pm等参数。1.3 遗传算法求解函数优化问题中的参数分析 目前,函数优化是遗传算法的经典应用领域,也是对遗传算法进行性能评价的常用范 例。对于函数优化中求解实数型变量的问题,一般采用动态编码和实数编码的方法来提高其搜

基于遗传算法和神经网络算法的吊车结构优化设计与实现

·制造业信息化· 图1吊车结构系统有限元模型 Fig.1The finite element model of a fixed crane Based on Genetic Algorithms and Artificial Neural Network Algorithms to Optimize the Structure Design and Implementation of Crane XUE Jia-Hai ,YU Xiao-Mo ,QING Ai-Ling ,ZHOU Wen-Jing ,YE Jun-Ke (College of Mechanical Engineering,Guangxi University,Nanning Guangxi 530004,China ) Abstract:This paper by using the finite element method,orthogonal test method,BP neural network and genetic algorithm to optimization of crane structure system.At last ,the neural network model will be optimized through the generic algorithm and the optimal parameters of the structure dynamic behavior will be obtained . Key words :finite element ;orthogonal experimental method ;BP-neural network ;genetic algorithm 0引言 随着吊车向大型化方向发展,结构在动载荷作用下的振动问题变得日益突出。因此,进行基于动态特性的优化设计,使产品在设计阶段就可以预测其动态特性,可有效减小系统的振动,提高整机工作性能。结构动力学建模方法主要有有限元法、试验模态法、混合建模法及基于人工神经网络的建模方法。基于人工神经网络的动态优化设计建模方法,是利用多层人工神经网络极强的非线性映射功能,来描述和处理动态系统中设计变量及其动态参数之间的关系。人工神经网络模型一旦建立,可取代有限元模型进行结构动态特性重分析,其分 析过程简单而直接,且远比有限元模型计算速度快,尤其适用于工程技术人员使用。由于吊车结构系统的动态特性很难用设计变量显式表达,因此用遗传算法对建立的神经网络模型寻优,计算出可行区域内动态特性最优时的设计变量及目标值。 1吊车结构系统动态特性分析 图1所示为某厂生产的固定式吊车的有限元模型。主要参数为:塔身高48.5m ,起重臂长70m ,最大起重力矩4400kN ·m 。吊车结构的弦杆、腹杆、钢丝绳及集中质量分别以空间梁单元、杆单元、弹簧单元及质量单元模拟。表1所示 为按最大起重力矩工况计算的系统前8阶固有频率。修稿日期:2012-12-21 作者简介:薛加海(1986-),男,云南彝族人,在读硕士研究生。主要研究方向:制造业管理信息化研究;于晓默(1982-),男,蒙古族人,在读博士研究生。主要研究方向:制造业管理信息化研究。 摘要:论文综合利用BP 神经网络、遗传算法有限元法以及正交试验法对吊车结构系统进行优化研究。利 用遗传算法和BP 神经网络建立复杂结构系统动态优化的计算模型,该模型可代替系统原来的有限元模型。首先对吊车起重机结构系统进行模态分析及谐响应动力学分析,找出对结构动态特性影响最大的模态频率,再利用灵敏度分析,确定对动态特性较敏感的设计变量作为神经网络的输入变量,并利用正交试验法确定神经网络训练样本,用有限元模型计算出样本点数据,建立反映结构振动特性的人工神经网络模型,最后利用遗传算法对所建立的神经网络模型寻优,得到使结构动态性能最优的设计参数。 关键词:有限元法;正交试验法;BP 神经网络;遗传算法中图分类号:TP18 文献标识码:A doi:10.3969/j.issn.1002-6673.2013.01.037 文章编号:1002-6673(2013)01-093-03 基于遗传算法和神经网络算法的吊车结构优化设计与实现 薛加海,于晓默,秦爱玲,周文景,叶俊科 (广西大学机械工程学院,广西南宁530004) 机电产品开发与创新 Development &Innovation of M achinery &E lectrical P roducts Vol.26,No.1Jan .,2013第26卷第1期2013年1月 93

遗传算法多目标函数优化

多目标遗传算法优化 铣削正交试验结果 说明: 1.建立切削力和表面粗糙度模型 如: 3.190.08360.8250.5640.45410c e p z F v f a a -=(1) a R =此模型你们来拟合(上面有实验数据,剩下的两个方程已经是我帮你们拟合好的了)(2) R a =10?0.92146v c 0.14365f z 0.16065a e 0.047691a p 0.38457 10002/c z p e Q v f a a D π=-????(3) 变量约束范围:401000.020.080.25 1.0210c z e p v f a a ≤≤??≤≤??≤≤? ?≤≤? 公式(1)和(2)值越小越好,公式(3)值越大越好。π=3.14 D=8 2.请将多目标优化操作过程录像(同时考虑三个方程,优化出最优的自变量数值),方便我后续进行修改;将能保存的所有图片及源文件发给我;将最优解多组发给我,类似于下图(黄色部分为达到的要求)

遗传算法的结果:

程序如下: clear; clc; % 遗传算法直接求解多目标优化 D=8; % Function handle to the fitness function F=@(X)[10^(3.19)*(X(1).^(-0.0836)).*(X(2).^0.825).*(X(3).^0.564).*(X(4).^0. 454)]; Ra=@(X)[10^(-0.92146)*(X(1).^0.14365).*(X(2).^0.16065).*(X(3).^0.047691).*( X(4).^0.38457)]; Q=@(X)[-1000*2*X(1).*X(2).*X(3).*X(4)/(pi*D)];

TSP问题的遗传算法求解 优化设计小论文

TSP问题的遗传算法求解 摘要:遗传算法是模拟生物进化过程的一种新的全局优化搜索算法,本文简单介绍了遗传算法,并应用标准遗传算法对旅行包问题进行求解。 关键词:遗传算法、旅行包问题 一、旅行包问题描述: 旅行商问题,即TSP问题(Traveling Saleman Problem)是数学领域的一个著名问题,也称作货郎担问题,简单描述为:一个旅行商需要拜访n个城市(1,2,…,n),他必须选择所走的路径,每个城市只能拜访一次,最后回到原来出发的城市,使得所走的路径最短。其最早的描述是1759年欧拉研究的骑士周游问题,对于国际象棋棋盘中的64个方格,走访64个方格一次且最终返回起始点。 用图论解释为有一个图G=(V,E),其中V是顶点集,E是边集,设D=(d ij)是有顶点i和顶点j之间的距离所组成的距离矩阵,旅行商问题就是求出一条通过所有顶点且每个顶点只能通过一次的具有最短距离的回路。若对于城市V={v1,v2,v3,...,vn}的一个访问顺序为T=(t1,t2,t3,…,ti,…,tn),其中ti∈V(i=1,2,3,…,n),且记tn+1= t1,则旅行商问题的数学模型为:min L=Σd(t(i),t(i+1)) (i=1,…,n) 旅行商问题是一个典型组合优化的问题,是一个NP难问题,其可能的路径数为(n-1)!,随着城市数目的增加,路径数急剧增加,对与小规模的旅行商问题,可以采取穷举法得到最优路径,但对于大型旅行商问题,则很难采用穷举法进行计算。 在生活中TSP有着广泛的应用,在交通方面,如何规划合理高效的道路交通,以减少拥堵;在物流方面,更好的规划物流,减少运营成本;在互联网中,如何设置节点,更好的让信息流动。许多实际工程问题属于大规模TSP,Korte于1988年提出的VLSI芯片加工问题可以对应于1.2e6的城市TSP,Bland于1989年提出X-ray衍射问题对应于14000城市TSP,Litke于1984年提出电路板设计中钻孔问题对应于17000城市TSP,以及Grotschel1991年提出的对应于442城市TSP的PCB442问题。

遗传算法及其在TSP问题中的应用

遗传算法及其在TSP问题中的应用 摘要:本文首先介绍了遗传算法的基本理论与方法,从应用的角度对遗传算法做了认真的分析和研究,总结了用遗传算法提出求解组合优化问题中的典型问题——TSP问题的最优近似解的算法。其次,本文在深入分析和研究了遗传算法基本理论与方法的基础上,针对旅行商问题的具体问题,设计了基于TSP的遗传算法的选择、交叉和变异算子等遗传算子,提出了求解旅行商问题的一种遗传算法,并用Matlab语言编程实现其算法,最后绘出算法的仿真结果,并对不同结果作出相应的分析。然后,本文还针对遗传算法求解TSP时存在的一些问题对该算法进行了适当的改进。如针对初始群体、遗传算子作出适当改进,或者将遗传算法与其他方法相结合,以及在编程过程中对算法流程的改进。本人在用计算机模拟遗传算法求解TSP问题时,首先分析了用Matlab语言设计遗传算法程序的优越性,接着以遗传算法求解TSP问题为例,深入讨论了各个遗传算子的程序实现,并通过分析实验数据,得到各个遗传算子在搜索寻优过程中所起的作用,最后指出了用Matlab语言编程同用其它高级程序语言编程的差异所在,以及运用Matlab编写遗传算法程序的一些注意事项。最后,本文提出将遗传算法与其它算法相结合来求解一般问题的想法;并将遗传算法的应用范围扩展,提出可以运用遗传算法求解由TSP衍生出的各类TSP扩展问题,如求解配送/收集旅行商问题的遗传算法(TSPD)、遗传算法在货物配送问题中的应用(ST-TSP)、多旅行商问题(MTSP)等。 引言:优化问题可以自然地分为两类:一类是连续变量的优化问题;另一类是离散变量的优化问题,即所谓组合优化问题。对于连续变量的优化问题,一般是求一组实数或一个函数;而在组合优化问题中,一般是从一个无限集或有限的几个无限集中寻找一个对象——它可以是一个整数,一个集合,一个排列或者一个图,也即是从可行解中求出最优解的问题。TSP问题就是其中的典型例子,就本质上而言它可抽象为数学上的组合优化,它描述的是旅行商经N个城市的最短路径问题,因而对TSP问题的求解是数学上,同时也是优化问题中普遍关注的。旅行商问题(Traveling Salesman Problem,简称TSP)也称为货担郎问题,是一个较古的问题,最早可以追溯到1759年Euler提出的骑士旅行问题[9]。旅行商问题可以解释为,一位推销员从自己所在城市出发,必须邀访所有城市且每个城市只能访问一次之后又返回到原来的城市,求使其旅行费用最小(和旅行距离最短)的路径。 TSP是一个典型的组合优化问题,并且是一个NP难题,所以一般很难精确地求出其最优解,因而寻找出其有效的近似求解算法就具有重要的理论意义。另一方面,很多实际应用问题,如公安执勤人员的最优巡回路线、流水作业生产线的顺序问题、车辆调度问题、网络问题、切割问题以至机组人员的轮班安排、教师任课班级负荷分配等问题,经过简化处理后,都可建模为TSP问题,因而对旅行商问题求解方法的研究也具有重要的应用价值。再者,在各种遗传算法应用实例中,其个体编码方法大多都是采用二进制编码方法或浮点数编码方法,而TSP问题是一种典型的需要使用符号编码方法的实际问题,所以,研究求解TSP问题的遗传算法,对促进遗传算法本身的发展也具有重要意义。在过去的20年里,在求解旅行商问题的最优解方面取得了极大的进展。尽管有这些成就,但旅行商问题还远未解决,问题的许多方面还要研究,很多问题还在期待满意的回答。 另外,遗传算法就其本质来说,主要是解决复杂问题的一种鲁棒性强的启发式随机

基于BP神经网络和遗传算法的结构优化设计

收稿日期:2002-11-13;修订日期:2003-02-12 作者简介:郭海丁(1958-) 男 山东潍坊人 南京航空航天大学能源与动力学院副教授 博士 主要从事工程结构强度~断裂~疲 劳损伤及结构优化设计方法等研究. 第18卷第2期2003年4月 航空动力学报 Journal of Aerospace Power Vol.18No.2 E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E E Apr.2003 文章编号:1000-8055(2003)02-0216-05 基于BP 神经网络和遗传算法 的结构优化设计 郭海丁1 路志峰2 (1.南京航空航天大学能源与动力学院 江苏南京210016; 2.北京运载火箭技术研究院 北京100076) 摘要:现代航空发动机不断追求提高推重比 优化其零部件的结构设计日益重要 传统结构优化方法耗时多且不易掌握 针对这一问题 本文提出了将BP 神经网络和遗传算法相结合用于结构优化设计的方法 并编制了相应的计算程序 实现了一个含9个设计变量的发动机盘模型的结构优化计算 计算证明 与传统结构优化方法相比 此方法计算速度快~精度良好 关 键 词:航空~航天推进系统;结构优化;神经网络;遗传算法;航空发动机 中图分类号:V 231 文献标识码:A Structure Design Optimization Based on BP -Neural Networks and Genetic Algorithms GUO -ai -ding 1 LU Zhi -feng 2 (1.Nanjing University of Aeronautics and Astronautics Nanjing 210016 China ; 2.Beijing institute of Astronautics Beijing 100076 China ) Abstract :Owing to the increasing demand for raising the thrust -weight ratio of modern aero -engine it is very important to optimize the structures of the components .Traditional optimization methods of structure design are time -consuming and hard to be put into practice .So in this paper a new method of structure design optimization is induced to which both BP neural networks and genetic algorithms (in short :BPN -GA )are applied .A program which contains 9variables is designed for the structure optimization of a disk model with the BPN -GA method which proves that it has better calculating rate and precision than those with traditional optimization methods . Key words :aerospace propulsion ;structure optimization ;neural network ; genetic algorithms ;aero -engine 1 引言 在航空~航天等领域 结构优化设计技术正在得到越来越广泛的应用 结构优化设计逐步进入工程实用阶段!1"3# 但从工程应用角度来看 结构优化设计方法的推广仍存不少障碍 主要表现为: (1)优化中靠经验调整的参数较多 掌握困难;(2)优化计算效率较低 应用现有的结构优化算法进

利用遗传算法进行结构优化设计(开题报告)

本科生毕业设计开题报告书 题目利用遗传算法进行结构优 化设计的一些研究学生姓名 专业班级 指导老师 机械工程学院 2011年11月30日

论文题目用遗传算法进行结构优化设计的一些研究 课题目的、意义及相关研究动态: 优化设计是设计概念与方法的一种革命,它用系统的、目的定向的和有良好标准的过程与方法来代替传统的实验纠错的手工方法。优化设计是寻求最好或最合理的设计方案,而优化方法便是达到这一目的的手段。虽然对大多数现实问题而言,最好饿不一定能实现,但它提供了一种指导思想与标准,形成了概念和运作手段,只要一个问题存在有多种可能的解决方案,它就可以利用优化的思想和概念来更好地解决,故优化方法是求解问题和帮助决策的重要手段和工具。 现代工程结构设计中,大量的应用问题要求结构优化能够适用于各种类型的设计变量(尺寸变量、形状变量、拓扑变量、材料种类。结构布局等)、各种类型的约束(强度。刚度、稳定性、频率等)及各种类型的单元(杆、梁、板、壳、膜、二维元及三维实体元等)的组合结构的线性、非线性、静力、动力或控制结构优化等。为了有效地解决复杂工程优化问题,人们一直在不停地探索。多年来,通过对自然界的探索,人们认为自然界生物的某些行为是可以在计算机上模拟的优化过程。人们将这种生物行为的计算机模拟用于工程目的,提出了一些解决复杂工程优化问题的现代优化方法。 一类是用计算机模拟人类智能行为的智能计算方法,包括模拟人类大脑处理模糊信息能力的模糊系统、模拟人类大脑神经元的连接关系的神经网络和模拟生物进化过程中“物竞天择,适者生存”这一自然规律的进化计算三个方面。其中进化计算已经突破了传统优化方法基于数值计算的确定性搜索模式,而是采取非数值计算的概率性随机搜索模式,已经被广泛地应用于各个领域。进化计算又有分别模拟自然界生物进化不同方面的三条研究途径:遗传算法、进化策略和进化规划,其中以遗传算法(GAs)的研究最为深入、持久,应用也最为广泛。另一类是用计算机模仿生物的某种特性的仿生计算方法,如模拟生物免疫系统自我调节功能的人工免疫系统、模拟蚁群搜索食物过程的蚁群算法等。模拟自然界生物进化过程中“优胜劣汰”机制的遗传算法也属于仿生计算方法的范畴。我此次毕设主要研究的就是基于遗传算法的工程结构优化设计。

遗传算法

遗传算法 开放分类:编程、程序、数学、计算机、算法 目录 ? 遗传算法定义 ? 遗传算法特点 ? 遗传算法的应用 ? 遗传算法的现状 ? 遗传算法的一般算法 ? 遗传算法实例 遗传算法定义 [编辑本段] 遗传算法(Genetic Algorithm)是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它是有美国Michigan大学J.Holland教授于1975年首先提出来的,并出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J.Hilland教授所提出的GA通常为简单遗传算法(SGA)。 遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小挑选(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。 遗传算法特点 [编辑本段] 遗传算法是一类可用于复杂系统优化的具有鲁棒性的搜索算法,与传统的优化算法相比,主要有以下特点:1、遗传算法以决策变量的编码作为运算对象。传统的优化算法往往直接决策变量的实际植本身,而遗传算法处理决策变量的某种编码形式,使得我们可以借鉴生物学中的染色体和基因的概念,可以模仿自然界生物的遗传和进化机理,也使得我们能够方便的应用遗传操作算子。 2、遗传算法直接以适应度作为搜索信息,无需导数等其它辅助信息。 3、遗传算法使用多个点的搜索信息,具有隐含并行性。 4、遗传算法使用概率搜索技术,而非确定性规则。 遗传算法的应用 [编辑本段] 由于遗传算法的整体搜索策略和优化搜索方法在计算是不依赖于梯度信息或其它辅助知识,而只需要影响

MATLAB实验遗传算法与优化设计

实验六遗传算法与优化设计 一、实验目的 1. 了解遗传算法的基本原理和基本操作(选择、交叉、变异); 2. 学习使用Matlab中的遗传算法工具箱(gatool)来解决优化设计问题; 二、实验原理及遗传算法工具箱介绍 1. 一个优化设计例子 图1所示是用于传输微波信号的微带线(电极)的横截面结构示意图,上下两根黑条分别代表上电极和下电极,一般下电极接地,上电极接输入信号,电极之间是介质(如空气,陶瓷等)。微带电极的结构参数如图所示,W、t分别是上电极的宽度和厚度,D是上下电极间距。当微波信号在微带线中传输时,由于趋肤效应,微带线中的电流集中在电极的表面,会产生较大的欧姆损耗。根据微带传输线理论,高频工作状态下(假定信号频率1GHz),电极的欧姆损耗可以写成(简单起见,不考虑电极厚度造成电极宽度的增加): 图1 微带线横截面结构以及场分布示意图 (1)

其中 为金属的表面电阻率,为电阻率。可见电极的结构参数影响着电极损耗,通过合理设计这些参数可以使电极的欧姆损耗做到最小,这就是所谓的最优化问题或者称为规划设计问题。此处设计变量有3个:W、D、t,它们组成决策向量[W, D ,t] T,待优化函数 称为目标函数。 上述优化设计问题可以抽象为数学描述: (2) 其中 是决策向量,x1,…,xn为n个设计变量。这是一个单目标的数学规划问题:在一组针对决策变量的约束条件 下,使目标函数最小化(有时也可能是最大化,此时在目标函数 前添个负号即可)。满足约束条件的解X称为可行解,所有满足条件的X组成问题的可行解空间。 2. 遗传算法基本原理和基本操作 遗传算法(Genetic Algorithm, GA)是一种非常实用、高效、鲁棒性强的优化技术,广泛应用于工程技术的各个领域(如函数优化、机器学习、图像处理、生产调度等)。遗传算法是模拟生物在自然环境中的遗传和进化过程而形成的一种自适应全局优化算法。按照达尔文的进化论,生物在进化过程中“物竞天择”,对自然环境适应度高的物种被保留下来,适应度差的物种而被淘汰。物种通过遗传将这些好的性状复制给下一代,同时也通过种间的交配(交叉)和变异不断产生新的物种以适应环境的变化。从总体水平上看,生物在进化过程中子代总要比其父代优良,因

相关文档