数学建模智能算法精品文档完整版.docx

上传人:b****5 文档编号:3633307 上传时间:2022-11-24 格式:DOCX 页数:14 大小:294.65KB
下载 相关 举报
数学建模智能算法精品文档完整版.docx_第1页
第1页 / 共14页
数学建模智能算法精品文档完整版.docx_第2页
第2页 / 共14页
数学建模智能算法精品文档完整版.docx_第3页
第3页 / 共14页
数学建模智能算法精品文档完整版.docx_第4页
第4页 / 共14页
数学建模智能算法精品文档完整版.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数学建模智能算法精品文档完整版.docx

《数学建模智能算法精品文档完整版.docx》由会员分享,可在线阅读,更多相关《数学建模智能算法精品文档完整版.docx(14页珍藏版)》请在冰豆网上搜索。

数学建模智能算法精品文档完整版.docx

数学建模智能算法精品文档完整版

Part3——群智能算法

群智能算法,也称为启发式算法,起于上个世纪80年代初。

启发式算法近年来在实际应用方面得到了较大的发展,尤其是在大数据下,人们在不断探索研究以获得更有效的应用场景。

这些算法包括:

遗传算法、蚁群算法、粒子群算法、模拟退火算法、人工鱼群算法、人工蜂群算法、微分进化算法和免疫算法等,这些算法在理论上也较为完善。

该部分主要介绍几种常用的群智能算法。

 

第一章遗传算法

遗传算法(GeneticAlgorithm,GA),是模拟达尔文的遗传选择和自然淘汰的生物进化过程的计算模型,它是由美国Michigan大学的J.Holland教授于1975年首先提出的。

遗传算法作为一种新的全局优化搜索算法,以其简单通用、鲁棒性强、适于并行处理及应用范围广等显著特点,奠定了它作为21世纪关键智能计算之一的地位。

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

1.1遗传算法中的生物遗传学概念

由于遗传算法是由进化论和遗传学机理而产生的直接搜索优化方法;故而在这个算法中要用到各种进化和遗传学的概念.

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

表1-1.遗传算法相关概念

序号

遗传学概念

遗传算法概念

数学概念

1

个体

要处理的基本对象、结构

也就是可行解

2

群体

个体的集合

被选定的一组可行解

3

染色体

个体的表现形式

可行解的编码

4

基因

染色体中的元素

编码中的元素

5

基因位

某一基因在染色体中的位置

元素在编码中的位置

6

适应值

个体对于环境的适应程度,或在环境压力下的生存能力

可行解所对应的适应函数值

7

种群

被选定的一组染色体或个体

根据入选概率定出的一组可行解

8

选择

从群体中选择优胜的个体,淘汰劣质个体的操作

保留或复制适应值大的可行解,去掉小的可行解

9

交叉

一组染色体上对应基因段的交换

根据交叉原则产生的一组新解

10

交叉概率

染色体对应基因段交换的概率(可能性大小)

闭区间[0,1]上的一个值,一般为0.65~0.90

11

变异

染色体水平上基因变化

编码的某些元素被改变

12

变异概率

染色体上基因变化的概率(可能性大小)

开区间(0,1)内的一个值,一般为0.001~0.01

13

进化、

适者生存

个体进行优胜劣汰的进化,一代又一代地优化

目标函数取到最大值,最优的可行解

1.2遗传算法的步骤

遗传算法计算优化的操作过程就如同生物学上生物遗传进化的过程,主要有三个基本操作(或称为算子):

选择(Selection)、交叉(Crossover)、变异(Mutation).

遗传算法基本步骤主要是:

先把问题的解表示成“染色体”,在算法中也就是以二进制编码的串,在执行遗传算法之前,给出一群“染色体”,也就是假设的可行解.然后,把这些假设的可行解置于问题的“环境”中,并按适者生存的原则,从中选择出较适应环境的“染色体”进行复制,再通过交叉、变异过程产生更适应环境的新一代“染色体”群.经过这样的一代一代地进化,最后就会收敛到最适应环境的一个“染色体”上,它就是问题的最优解.

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

第一步:

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

第二步:

定义适应函数,便于计算适应值;

第三步:

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

第四步:

随机产生初始化群体;

第五步:

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

第六步:

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

第七步:

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

遗传算法有很多种具体的不同实现过程,以上介绍的是标准遗传算法的主要步骤,此算法会一直运行直到找到满足条件的最优解为止.

图1-1.本文算法的流程图

1.3遗传算法的演变流程

1>编解码

这里我们通过采用二进制的形式来解决编码问题,将某个变量值代表的个体表示为一个{0,1}二进制串。

当然,串长取决于求解的精度。

如果要设定求解精度到六位小数,假设区间为

,由于区间长度为

,则必须将闭区间

分为

等分。

因为

所以编码的二进制串至少需要22位。

将一个二进制串(b21b20b19…b1b0)转化为区间

内对应的实数值很简单,只需采取以下两步:

1)将一个二进制串(b21b20b19…b1b0)代表的二进制数化为10进制数:

2)

对应的区间

内的实数:

例如,一个二进制串a=<1000101110110101000111>表示实数0.637197。

=(1000101110110101000111)2=2288967

另假设我们所要求解的是一个含有三个变量的优化函数,并且三个变量作用域是在3000-3255之间,该优化函数是

这些整数可以使用8位二进制来代表,而8位二进制可代表的整数范围是255,所以我们使用基数3000,再加上二进制数的十进制值就是原来的数据了。

(当然这里取值恰好是255,可以使用8位编码,否则按照上面的方法进行编码位数设定。

例如:

整数3021、3058、3240可表示如下。

图1-2.编码示例

其中,像(3021,3058,3240)我们称为一个个体,而他们对应的二进制序列000101010011101011110000我们称为一条染色体。

一般情况下,我们认为染色体和个体是同一个概念,可以不作区分。

2>初始化

初始化单条染色体:

初始化大小为N的种群如下:

图1-3.种群初始化示例

其中,每个个体的长度是24,种群大小是N,如果存在一个二维数组中的话,该二维数组的大小是N×L。

3>适应度值和选择操作

在当前的迭代中,需要评估每个解的适应度值;然后基于适应度值计算个体的选择概率来选择个体用于下一次迭代;该阶段是为了选择优质的个体。

图1-4.通过适应度值计算选择概率

选择概率计算如下:

其中,

是第i个个体的适应度值,如图示中的15、27、6等;

为第i个个体被选择的概率,如图示中的10%、14%等都是所计算出来的选择概率。

4>交叉操作

交叉操作主要是局部搜索操作,可以分为单点交叉、两点交叉和均匀交叉。

目的是使用当前迭代中的两个个体产生2个新个体,用于下一次迭代;交叉概率一般在0.5~0.8之间,交叉点的选择是随机选择。

单点交叉:

两点交叉:

均匀交叉:

5>变异操作

变异操作主要是全局搜索,通过变异概率修改个体,变异概率一般在0.001-0.01之间。

操作如下:

6>细节流程

细节流程如下:

(1)编码、初始化、适应度值

(2)计算概率

(3)交叉操作

(4)变异操作

(5)计算适应度值

图1-5.细节流程

1.4遗传算法工具箱使用

工具箱的使用可以节约我们大量的时间,并且工具箱比较专业、规范,可以再较短的时间内获得想要的结果。

在这里建议大家使用英国Sheffield大学的工具箱,资料比较齐全,也是公认的比较强大的工具箱。

下面以校内赛A题《用户甄别与筛选》为例,来使用该工具箱。

原题如下:

3、某商家需要定位一批用户(从附件一中选取),使得这批用户的总影响力为10000、所有用户粉丝中男性总比例49.8%、所有用户平均每天发布的微博数量总和最大;请建立相关数学模型进行求解,并给出最优解时这批用户的平均“活跃粉丝比例”。

建立三个目标函数如下:

综合目标函数如下:

其中,N是所选的用户数。

在这里使用了常见的线性加权方式来解决多目标优化问题的,为了使用工具箱给出这个简单的示例,在实际中还需要把各个目标函数的数量级降成同级,还可以使用帕累托最优来求解多目标等。

具体程序如下:

主函数如下:

functionmain

%%数据清空

clc,clear

closeall;

%%数据读入

influence=importdata('data/influence.txt');

aveweibos=importdata('data/aveweibos.txt');

existactiveratio=importdata('data/existactiveratio.txt');

existratio=importdata('data/existratio.txt');

maleratio=importdata('data/maleratio.txt');

%%定义遗传算法参数

NIND=100;%个体数目(Numberofindividuals)

MAXGEN=10000;%最大遗传代数(Maximumnumberofgenerations)

GGAP=0.9;%代沟(Generationgap)

trace=zeros(MAXGEN,2);%遗传算法性能跟踪初始值

%%遗传算法实现

Chrom=randint(NIND,1000,[0,1]);%初始种群

gen=0;

ObjV=Objectvalue(Chrom,aveweibos,influence,maleratio);%计算初始种群函数值

whilegen

FitnV=ranking(ObjV);%分配适应度值(Assignfitnessvalues),求最小值

SelCh=select('sus',Chrom,FitnV,GGAP);%选择

SelCh=recombin('xovsp',SelCh,0.7);%重组

f=rep([0;1],[1,1000]);

SelCh=mutbga(SelCh,f);SelCh=fix(SelCh);%变异

ObjVSel=Objectvalue(SelCh,aveweibos,influence,maleratio);%计算子代目标函数值

[ChromObjV]=reins(Chrom,SelCh,1,1,ObjV,ObjVSel);%重插入

gen=gen+1

trace(gen,1)=min(ObjV);%遗传算法性能跟踪

trace(gen,2)=sum(ObjV)/length(ObjV);

end

%%结果展示

[Y,I]=min(ObjV);Chrom(I,:

),Y%最优解及其目标函数值,I是最优解对应的种群号

figure,plot(trace(:

1),'-.');grid;title('解的变化');

figure,plot(trace(:

2),'r');grid;title('种群均值的变化');

目标函数如下:

functionvalue=objectvalue(Chrom,aveweibos,influence,maleratio)

[m,n]=size(Chrom);

value=zeros(m,1);

weibocount=0;

influencecount=0;

maleratiocount=0;

index=0;

%参数权值

alpha=0.5;

beta=0.3;

gama=0.2;

fork=1:

m%循环每个用户,计算适应度函数值

fori=1:

n

if(Chrom(k,i)>0)

index=index+1;

weibocount=weibocount+aveweibos(i);

influencecount=influencecount+influence(i);

maleratiocount=maleratiocount+maleratio(i);

end

end

value(k)=alpha*log(abs(influencecount-10000)+1)+beta*log(abs(maleratiocount/index-0.498)+1)+gama*log(1+1/weibocount);

end

结果如下:

我们很容易看出来,程序迭代大概在2500次左右就达到了最优解,因而我们在设置迭代次数的时候开始就不需要设置太高,以防程序运行过慢。

具体程序请参考附件中的A_code程序。

1.5MATLAB自带工具箱的使用

简单的使用在《第二期培训资料》已经介绍过了,下面给出附件中《GAandPS》里面示例的结果(GA是遗传算法,PS是模式搜索算法)。

使用该示例的目的是让大家同时也熟悉动态作图的方法和一些技巧。

1、使用GA求非平滑函数最优解

具体函数参见程序nonSmoothFcn.m。

运行nonSmoothOpt.m的结果如下:

2、使用PS求平滑函数最优解

具体函数参见程序smoothFcn.m。

运行PSdemo.m的结果如下:

从图中可以看出标记有搜索起始点、FMINCON解、PS解,起始点是分别使用fmincon和PS优化的共同初始解,然而从最终的结果可以看出模式搜索可以达到最优解,而MATLAB自带的fmincon未能求得最优解。

1.6本章小结

写教程始终是个无止境的工作,期望大家比赛结束后能参与教程的撰写当中来。

近期写的教程主要是针对建模的,同时也添加了一些在毕业设计和研究生阶段也常用的知识,包括后续的神经网络、GUI设计、多目标优化、图像处理等。

最近一直在忙分布式集群的海量数据存储,后续会在此基础上进行各类数据挖掘工作,当然也会抽空把所做的一些框架、模型、算法和程序一并写出来与大家分享的,有兴趣的可以参与呐(主要是Java、Python开发哈)。

 

附录:

MATLAB自带优化函数:

1、fminbnd(单变量,黄金分割法和插值法)

2、fminunc(单、多变量,梯度最优化算法)

3、fminsearch(多变量,Nelder算法)

具体用法参见MATLAB的help,或者查看《第二期培训资料》

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小升初

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1