- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
决策支持系统(双语)实验报告(DSS)
《决策支持系统》实验报告
开课实验室:信息中心
学院 年级、专业、班 姓名 成绩 课程
名称 决策支持系统(双语) 实验项目
名 称 TSP问题的遗传算法求解 指导教师 教师评语
教师签名:
年 月 日 一、实验目的
1、掌握智能程序的构造方法;
2、掌握遗传算法的设计过程;
3、掌握概率发生器的编写过程;
4、讨论TSP问题中不同评价函数的使用结果。
二、实验原理
遗传算法(genetic algorithm, GA)是模拟生物进化的自然选择和遗传机制的一种搜索寻优算法。它利用适者生存的进化原则,通过演化逐步逼近问题的最优解。基本原理是通过随机方式将问题的每一个可能的解进行数字编码,编码后的解称作染色体(个体),随机选取N个染色体构成初始种群,通过适应度函数给每个个体一个数值评价,淘汰低适应度的个体,选择适应值高的染色体进行复制,通过遗传算子(选择、交叉、变异),产生一群新的适应环境的染色体,形成新的种群。这样一代一代不断进化,最后收敛到适应环境较好的一些个体中,求得问题的最优解。
遗传算法的执行过程中,每一代有许多不同的染色体(个体)同时存在,这些染色体中哪个保留、哪个淘汰是根据它们对环境的适应能力来决定的,适应性强的有更多的机会保留下来。适应性强弱是由适应值函数f(x)的值来判别的。每个个体代表一条可能的路径。个体n的适应值为,其中,N为种群数,为沿个体标示的城市序列所经过的路径长度,可通过以下公式计算出来:其中,表示个体第i位的城市编号。表示所有个体的路径长度的总和。适应值为非负,且取值越大越好。
遗传算法中主要的遗传算子有如下几种:
(1)选择(selection)算子:
又称复制、繁殖算子。选择是从种群中选择生命力强的染色体产生种群的过程。依据每个染色体的适应值大小,适应值越大,被选中的概率就越大,其子孙在下一代产生的个数就越多。本实验采用的是比率法,比率法的原理是每个染色体产生后代的数目正比于它的适应值,并有一个约束条件,即每一代中染色体的总数应保持不变。
(2)交叉(crossover)算子
又称重组、配对算子。交叉采用部分匹配交叉策略,首先根据交叉概率,随机地从新复制的种群中选出要交叉的两个不同个体;然后,随机地选取一个交叉段,交叉段中两个个体的对应部分通过匹配换位实现交叉操作。
例如,对个体A和B:
交叉后得到:
(3)变异(mutation)算子
即根据变异概率,随机地从种群中选出要变异的个体,随机地在该个体上选出两个变异位置,然后将两个位置上的城市序号进行变换。选择和交叉算子基本上完成了遗传算法地大部分搜索功能,而变异则增加了遗传算法找到接近最优解的能力。如:
A=9 8 4 5 6 7 1 3 2 10
下划线部分为要变异的两个位置,变异为:
A’=9 7 4 5 6 8 1 3 2 10
三、使用仪器、材料
计算机,VB系统
四、实验步骤
(1) 编写适应值函数
适应度值是根据适应度函数来计算的,如适应度函数代码如下:
Public Function calfitness(ByRef c As Integer) As Single
Dim temp As Single
Dim i As Integer
If Form1.Combo1.Text = 1 Then
calfitness = 1# / lengthchro(c)
Else
temp = 0#
For i = 1 To Pool_Size
temp = temp + lengthchro(i)
Next
calfitness = temp - lengthchro(c)
End If
End Function
(2)编写概率发生器
即选择算子,选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代产生后代个体,如代码:
Public Sub reproduce()
ReDim temppchropool(1 To Pool_Size, 1 To City_Num) As Integer
ReDim temppro(0 To Pool_Size) As Single
Dim rndnum As Single
Dim i, j, k As Integer
temppro(0) = 0#
For i = 1 To Pool_Size
temppro(i) = temppro(i - 1) + calprobability(i)
文档评论(0)