MATLAB实验报告-遗传算法解最短路径以及函数最小值问题

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
path(i+1,:)=[v2(1:temPm4-1) temp1 v2(temPm4-1+size(temp2):end)];%基因交叉end
end
path(Popsize,:)=BestS;
for i=1:Popsize
tempPm=rand(1);
if(tempPm<Pm)
temPm6=fix((rand(1)+0.2)*10);
B、设计遗传算法求解f(x)极小值,具体表达式如下:
3
f (x1, x2,x3)xi2
i1
5.12xi5.12,i 1,2,3
要求必须使用m函数方式设计程序。
C、利用MATLAB编程实现:三名商人各带一个随从乘船渡河, 一只小船只能容纳 二人,由他们自己划行, 随从们密约,在河的任一岸, 一旦随从的人数比商人多, 就杀人越货, 但是如何乘船渡河的大权掌握在商人手中, 商人们怎样才能安全渡 河?
D、结合自己的研究方向选择合适的问题,利用MATLAB进行实验。
以上四题任选一题进行实验,并写出实验报告。
选择题目:A
一、问题分析(10分)
如图如示,将节点编号,依次为1.2.3.4.5.6.7.8.9.10.11,由图论知识, 则可写出其带权邻接矩阵为:
0
2
8 1
500
500
500
500
500
500
(3)将个体Tx、Ty进行循环左移,遇到0就删除,直到编码串中交叉区域 的左端不再有0:然后将所有空位集中到交叉区域,而将交叉区域内原有的基因 依次向后移动。因0元素可能较多,在程序实现时,我是将非零元素提出,后面 再合成。
(4)将temp2插入到Tx的交叉区域,temp1插入到Ty的交叉区域。形成 新的染色体[1]。
0 50
0 1
500
500
500
500
500
2
500
500
0
7 500
9
500
500
500
500
500
6
500
7
0 1
2
500
500
500
500
500
500
1
500
1 0
4
500
500
500
500
500
500
500
9
2 4
0
注:为避免计算时无穷大数吃掉小数,此处为令inf=500。
问题要求求出任意两点间的最短路径,Floyd算法采用的是在两点间尝试插 入顶点,比较距离长短的方法。 我思考后认为, 用遗传算法很难找到一个可以统 一表示最短路径的函数, 但是可以对每一对点分别计算, 然后加入for循环,可 将相互之间的所有情况解出。 观察本题可发现, 所有节点都是可双向行走, 则可 只计算i到j的路径与距离,然后将矩阵按主对角线翻折即可得到全部数据。
硕士生考查课程考试试卷
考试科目:
MATLAB教程
考生姓名:
考生学号:
学 院: 专 业:
考 生 成 绩:
任课老师(签名)
考试日期:20年 月 日 午 时至 时
MATLAB教程》试题:
A、利用MATLAB设计遗传算法程序,寻找下图11个端点的最短路径,其中没有 连接的端点表示没有路径。要求设计遗传算法对该问题求解。
第二:计算适应度,因取最短路径值,即最小值,常用方法为C-F(x)或C/F(x)(C为一常数),此处采用前一种方式。于是,可进一步计算相对适应度。
第三:选择与复制
采用轮盘赌算法, 产生一个随机值, 比较它与累计相对适应度的关系, 从而 选择出优良个体进入下一代。
第四:交叉。
因编码是不重复的数字, 所以采用传统的交叉方法, 即上一行与下一行对位 交叉,会产生无效路径,于是,采用了不同的交叉方法,具体如下:
三、实验过程记录(含基本步骤、 程序代码 及异常情况记录等) (60分) 首先,写程序,修复Bug。
然后,调试种群数量,遗传代数,交叉概率,变异概率等,不断运行程序, 以达到较理想的状态。
有一次异常情况:算出来的最短距离均为
Matlab
clc;clear;
%初始化参数
%******Step 2 :选择与复制操作******
因为节点有11个,可采用一个1行11列的矩阵储存数据, 同时,由于编号 为数字,可直接使用数字编码表示路径的染色体。具体如下:
采用等长可变染色体的方式, 例如由2到9的路径,染色体编码可能为 (2,5,1,8,4,6,9,3,10,7,11),超过9之后的编码,用来进行算子的运算, 不具备实际意义。
(1)在表示路径的染色体Tx和Ty中,随机选取两个基因座(不能为起点 基因座)i和j,即将i个基因座和第j个基因座之间的各个基因座定义为交叉 域,并将交叉的内容分别记忆为temp1和temp2。
(2)根据交叉区域中的映射关系, 在个体Tx中找出所有与temp2相同的元 素,在个体Ty中找出所有与temp1相同的元素,全部置为0。
500
2
0
6 50
0 1
500
500
500
500
500
500
8
6
0 7
500
1
500
500
500
500 5
00
1
500
7
0 50
0 50
0 9
500
500
500
500
500
1
500
500
0
3 50
0 2
500
500
500
500
500
1
500
3
0 4
500
6
500 5
00wk.baidu.com
500
500
500
9
500
4
0 50
第五:变异
染色体编码为从1到11的无重复编码,所以不能采用一般的生成一个随机 数替代的办法。此处采用交换变异法。 即随机产生两个数, 交换两个节点的顺序。
例:p[1,2,3,4,5,6,7,8,9,10,11],K1 3, K2 8则新染色体编码为:
p[1,2,8,4,5,6,7,3,9,10,11]
ei(Pi1,Pi2)且eiE,若(Pi1,Pi2) (Pi2,Pi1),则G为一个有向图;又设ei的值为
ai,A{a1,a2...am},故G可表示为一个三元组G {P,E,A}
则求最短路径的数学模型可以描述为:
n
min Ai* Ei
i1
s.t. AiA EiE
实验具体: 第一:编码与初始化 因采用自然编码,且产生的编码不能重复,于是我采用了randperm函数产 生不重复的随机自然数。 因解题方法是使用的是计算每一对点, 则我们编码时将 第一个节点单独放入,合并成完整编码。
二、实验原理与数学模型(20分)
实现原理为遗传算法原理: 按所选择的适应度函数并通过遗传中的复制、交叉及变异对个体进行筛选, 使得适应度高的个体被保留下来, 组成新的群体, 新的群体既继承了上一代的信 息,又优于上一代。这样周而复始,群体中个体适应度不断提高,直到满足一定 的条件。
数学模型如下:
设图G由非空点集合V {V1,V2...Vn}和边集合E {e1,e2...em}组成,其中
%************Step 3 :
temppath2=path;
for i=1:2:row
[l m]=find(path(i+1,:)~=0);
v2=path(i+1,m);%取出i+1行的非零元素,成一向量path(i,:)=[v1(1:temPm4-1) temp2 v1(temPm4-1+size(temp1):end)];
temppath=path;
roulette=cumsum(Fitness);
for i=1:Popsize
tempP=rand(1);
for j=1:length(roulette)
if tempP<roulette(j)
break;
end
end
path(i,:)=temppath(j,:);
end
相关文档
最新文档