届本科毕业生学位论文《模拟退火算法解课表问题》.docx
- 文档编号:8565490
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:15
- 大小:77.09KB
届本科毕业生学位论文《模拟退火算法解课表问题》.docx
《届本科毕业生学位论文《模拟退火算法解课表问题》.docx》由会员分享,可在线阅读,更多相关《届本科毕业生学位论文《模拟退火算法解课表问题》.docx(15页珍藏版)》请在冰豆网上搜索。
届本科毕业生学位论文《模拟退火算法解课表问题》
使用模拟退火算法解课表问题
UsingSAAtoSolveTimeTableProblem
2011届本科毕业生学位论文
专业:
计算机科学与技术
摘要
本文给出一种使用模拟退火算法(SSA:
SimulatedAnnealingAlgorithm)求解课表问题的方案,详细地讨论了该方案涉及的各种问题,包括目标函数和初解的确定,邻域和新解的产生方法,初始“温度”的确定和“温度”更新的方式,内循环次数及算法终止条件等等。
文章的最后给出了该方案实现的一个实例和若干性能分析。
关键词:
时间表问题;模拟退火算法;性能分析;课表实例
ABSTRACT
WeproposeanschemetosolvetheTimeTableProblem(TTP)usingSimulatedAnnealingAlgorithm(SSA),anddiscussvariableproblemsoftheschemesuchastargetfunctionandinitialsolution,themethodtogenerateneighboringareaandnewsolution,initia1temperatureselectionandtheformu1ationtoproducenewtemperature,innercyclenumberanddetermlna1condition.Finally,wepresentedanrealexampleandperformanceanalysisofthisscheme.
Keywords:
timetableproblem;simulatedannealingalgorithm;performanceanalysisanexample
目录
摘要1
ABSTRACT2
第1章绪论4
1.1模拟退火算法(SAA)介绍4
1.2问题的描述5
第2章算法结构7
第3章SAA在求解课表问题中的实现9
3.1数据结构的建立9
3.2解的表达方式和目标函数的计算9
3.3初始解的确定10
3.4邻域的确定和新解的产生10
3.5“初始温度”和“温度”的更新方式11
3.5.1“初始温度”的确定11
3.5.2“温度”的更新方式12
3.6内循环次数及SAA的终止条件12
3.6.1内循环次数的确定12
3.6.2SAA的终止条件13
第4章实例和性能分析14
4.1目标函数的计算方式14
4.2邻域内的搜索方法14
4.3“温度”参数的设计14
4.3.1α,γ对“温度”的影响14
4.3.2初始“温度”和终止“温度”对算法性能的影响15
第5章结束语17
致谢18
参考文献19
第1章绪论
1.1模拟退火算法(SAA)介绍
模拟退火算法(SAA:
SimulatedAnnealingAlgorithm)来源于固体退火原理,将固体加温至充分高,再让其徐徐冷却。
加温时,固体内部粒子随温升变为无序状,内能增大;而徐徐冷却时粒子渐趋有序,在每个温度都达到一个平衡态,最后在常温时达到基态,内能减为最小。
模拟退火算法最早由Kirkpatrick等应用于组合优化领域,它是基于Mente-Carlo迭代求解策略的一种随机寻优算法,出发点是物理中固体物质的退火过程与一般组合优化问题求解过程之间的相似性。
模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优。
模拟退火算法是一种通用的优化算法,理论上算法具有概率的全局优化性能。
模拟退火算法用于解组合优化问题的一般性流程如下:
确定初始温度
随机选择在此此温度下的初始模型m0计算其能量E(m0)
随机扰动m0产生一个新状态ms计算其能量E(ms)
n
y
△E=E(ms)-E(m0)
△E<0?
m0=ms新状态按metropolis准则接受
n
扰动次数+1
y
满足扰动次数要求?
降低温度
y
n
满足收敛条件?
退出:
最后状态是最优解
类似于排课表这样的时间表问题(TTP:
TimeTableProblem),是典型的组合优化和不确定性调度问题,并且已被证明是NP—完全性问题,不存在确定型多项式复杂性解法。
因此,人们把研究的重点放在启发式算法上。
课表问题的难度在于:
首先,它是个多元受限的问题,如果一定要满足所有的约束条件(这些条件往往是相互矛盾的),则极有可能找不到完整的解;其次,它是一个好坏标准很难统一的问题:
同一个排课结果,有人说好,有人说不好,因此其质量标准很难固定和量化。
课表问题的这些特点说明,一个好的排课系统,通常要使用启发式算法,而且要与用户有较强的交互性,可由用户确定每个条件的权值,并可根据对排课结果的不同看法,对条件的权值作调整和重排,以满足不同用户对课表质量的要求。
为此,本文选择了对解组合优化问题很有效又能提供交互性的模拟退火算法,其目标函数诸因素的权值可以由用户设定和修改,从而使退火结果所获得的解尽可能满足不同用户对课表质量的要求。
1.2问题的描述
本文所研究的课表问题,是以我校我院的实用课表为具体对象。
根据我们的调研,大学实用有效的课表应满足以下约束条件:
(1)教师和学生都不能发生课时冲突,即没有教师要同时给两个(或两个以上的)班上课,也没有一个班要同时上两门(或两门以上)不同的课程;
(2)教师和学生合理的不排课时间(例如:
政治学习时间)要求一定要满足;
(3)若一个老师连上四节课,则中间不应换教室;
(4)原则上,课堂讲授的课程排上午,实验实习课排下午;
(5)一个教师一天最多排四节讲授课,但可以加排2—4节实验实习课;
(6)一门课程一个班一天最多只排两节讲授课,但可以加排2—4节实验实习课;
(7)同一门课程在一周内尽可能均匀分布;
(8)同一个教师的课程在一周内尽可能均匀分布。
在上述条件中,
(1)~(3)为硬要求,(4)~(6)为软要求,(7)~(8)为中间要求。
硬条件
(1)~(3)是必须满足的,否则课表不可行,故应在求解过程中作为约束条件;而中间条件和软条件应尽量满足,但可酌情放松,因此,将目标函数定义为课表对这两类条件(3)~(8)的罚函数,即:
(1.1)
(1.2)
其中
为第j个要求对第i次课的权值,Check为开关函数。
当第i次课的时间安排满足第j个要求时为0,否则为1。
可见,课表的满意度越高,f值越小。
第2章算法结构
模拟退火算法(SAA:
SimulatedAnnealingA1gorithm)是一种启发式的随机搜索算法,往往能在较短的时间和较大的解空间内找到最优解,对解课表这样的组合优化问题是很有效的。
设S={S1,S2,…,Sm}是所有可能解的集合,f:
S→R为非负目标函数,则寻找最优解即是寻找S*∈S,使得:
(2.1)
SAA主要包括Metropolis抽样过程和退火过程两个部分,可描述如下
/*
分别为初始状态和控制参数初值*/
{S=
;k=0;
{//Metropolis抽样
while(notinner-loopstopcriterion)
{
Snew=Generate(S);
if
;
elseif(Accept(Snew,S))
;
}//退火过程
T=update(T);
K=k+1;
}
}
这里:
(1)Generate函数表示从当前解的邻城,随机产生下一解;
(2)Accept函数决定接受新解作为当前解的条件,描述如下:
Accept(Snew,,S)
{
if
accept=true;
elseaccept=false;
}
第3章SAA在求解课表问题中的实现
上面给出的SAA只是一种抽象算法,要在求解课表问题中得以实现,还须具体解决以下问题:
(1)数据结构的建立;
(2)解的表达方式及目标函数的计算方法;
(3)初始解的确定;
(4)邻域及新解的产生方法;
(5)初始“温度”的确定和“温度”的更新方式;
(6)内循环次数的确定和算法的终止条件。
下面将本文解决上述问题的方法作一简单介绍。
3.1数据结构的建立
我院的课表问题涉及到以下几个实体:
教师,班,课程,课。
每个实体建立一种数据结构,限于篇幅,具体建构方式从略。
3.2解的表达方式和目标函数的计算
最终课表有两种表达方式:
(1)班级课表;
(2)教师课表;
本文将班级课表和教师课表都设置为指针数组,指向结构“课”。
它们可以相互导出,但为了方便,如不计较其所占空间,可同时设置这两个数据结构。
为了适应算法需要,本文分别建立了最佳班级课表,当前班级课表和最佳教师课表,当前教师课表,分别记录历史最优解和当前解。
由本问题的性质及其数据结构可见,其目标函数并不是一个易于计算的数学式,而需要检索大量数据,过程比较复杂。
如何尽可能的减少检索数据和计算量呢?
首先,考虑到每个新解都是在旧解的邻域中产生的,变化涉及的课很少,因此计算
的步骤大致如下:
(1)计算变换涉及的所有课在变换前对目标函数的贡献之和,从△f中减去;
(2)计算变换后以上课对目标函数的贡献之和,加入△f中;
(1),
(2)步中都需要分别求出每个涉及到的课对目标函数的贡献,求和,再减去重叠的部分。
由SAA算法的特点可知,在当前解的邻域中,接受为下一当前状态的新解相对于产生出的新解来说只是很小的一部分(特别当退火“温度”足够低时),因此以上第
(1)步的计算有许多不必要的重复。
为了尽可能避免这种重复,本文对第
(1)步和第
(2)步使用了不同的计算方法,即不对称的计算方法。
3.3初始解的确定
确定初始解时,本文要求它仅满足硬条件
(1)~(3),且要求退火过程中产生的每个解都满足此条件.其他各项要求在目标函数中都得以体现,可在退火过程中逐步优化,故无须在初始解中加以考虑。
建立初始解的大致思路是将每位教师的课依次插入相应班的课表的空余课中,可能导致产生初解困难的原因有二:
(1)连堂课必须安排在连续课时上。
这样,即使有空余课时,如果不相连,也无法安排下连堂课;
(2)有的教师教多个班,这样,即使有空余课时,如发生教师冲突,也无法安排。
课表的剩余空间越大,课就越容易安排,因此,本文采取两种措施避免以上提到的两种情况:
(1)连堂课(指教师四节连堂)先安排,单堂课(指两节)后安排;
(2)教授课程多的教师先安排,教授课程少的教师后安排;
对每一位教师,当在某天的课表中安排他(她)的某次课后,就在其后一天安排他(她)的下一次课,这样可以尽量减少发生冲突的可能性,也使课程安排尽量均匀。
虽然从理论上讲上述方法不能确保一定能产生初解,但从实验情况看,只要适当地进行回溯,初解都能成功产生。
3.4邻域的确定和新解的产生
当前解经过一次变换形成的新解的集合称为当前解的邻域。
变换以交换为主,每次交换时,先选定一个班的课表,然后选定任两个课时,分情况进行以下变换;
(1)如果一个课时为空,另一个课时不为空,则将不为空的课时对应的课插入到空的课时中,原来其所在的课时腾空;
(2)如果两个课时对应的长度相等,则交换其位置;
(3)如果两个课时对应的课的长度不相等,但处于相邻位置,则颠倒其顺序;
(4)如果两个课时对应的课的长度不相等,且处于不相邻位置,则将单堂课与其后相连的课合在一起与连堂课交换位置,要求此单堂课必须不为上午或下午的最后一次课,否则没有与其相连的后继课。
以上
(1),
(2),(3),(4)在交换中都可能导致教师或学生冲突,产生不可行解,此时需要撤消变换回到原状态。
产生新解后,按照前述目标函数的计算方法求△f,然后用Accept函数判断是否接受此解作为当前状态,若是,则更新课的ftime字段和课程的CM矩阵相应行列;若否,则进行逆变换回到原状态。
变换类型的选择要保证能从当前状态经过若干次以上变换达到任意指定的可行状态,这样算法才有可能搜索到所有可行解。
选择交换课时有不同的方法:
(1)随机抽取;
(2)遍历,即依次抽取所有的两两课时的组合方式;
(3)启发式,每次先选取对目标函数贡献最大的课,再遍历其所在课表的其它课时与其进行交换;
经过分析比较,本文采用的是随机抽取法。
3.5“初始温度”和“温度”的更新方式
3.5.1“初始温度”的确定
初始“温度”的选择方式有以下几种常用方式:
(1)均匀随机抽样{Si},取此时f(Si)的方差为初始“温度”;
(2)在所有可能的组合状态中,选两个状态使△f,取初始“温度”为最大值的若干倍;
(3)按经验给出。
本文采用第三种方式,即按经验给出。
一般选取相邻解(相差一个变换的解)△f的最大值,令初始“温度”为此最大值的若干倍。
在此“温度”下,多数新解都可被接受为下一当前解。
3.5.2“温度”的更新方式
总体来说,无论“温度以什么方式变化,它必须满足T→0。
常用的有以下几种方式:
(1)
,其中
,一般取
;(3.1)
(2)
,(3.2)
(3.3)
根据退火算法的特点,可看出
(2)方式更科学:
在搜索初期,它能使解迅速收敛,在搜索末期,又能使退火过程逐渐稳定。
本文采用了一种特殊的“温度”变化方式,即“温度”并不是单调递减的,而偶尔会回升。
一般情况下,“温度”以
(2)中方式下降,当有迹象表明,退火算法陷入了某个局部最优时,“温度”会适当提升,增加扰动以跳出此局部最优。
通常,以目标函数长时间没有改善或当前解一直不变为陷入局部最优的特征。
“温度”的回升公式如下:
(3.4)
其中
为常数,通常设为2或3。
在这种“温度”更新方式下,搜索开始时“温度”急剧降低,中间“温度”呈锯齿状逐渐降低,退火过程即将结束时“温度”缓慢降低,各项参数的设置对系统性能影响较大。
3.6内循环次数及SAA的终止条件
3.6.1内循环次数的确定
内循环次数决定Metropolis抽样是否达到稳定,有以下几种检验方式:
(1)检验目标函数的均值是否稳定;
(2)继续若干步目标函数值变化很小;
(3)按固定步数抽样;
本文采用第三种方式,内循环次数大致设定为邻域大小。
若一共有k个班,每个班一周有m个课时,则内循环次数为:
。
这样,在每个退火“温度”下,邻域中的每个解都很有可能被搜索到。
3.6.2SAA的终止条件
算法的终止条件通常有:
(1)T小于某值;
(2)系统的熵已达到最小;
本文采用的终止条件为:
T小于某值,或用户满足已搜索到的最优解,或系统已达到稳定。
第4章实例和性能分析
文本给出的方法已用c语言编程实现,并为若干所中学排出了满意的实用课表。
下面仅以某中学初中(3个年级,21个班,80位教师,644课次)为倒,对影响算法性能的诸因素作一简单的讨论和比较。
4.1目标函数的计算方式
表4.1给出了在相同条件下,两种计算方式的代价和目标函数值。
表4.1计算方式效果表
计算方法
运算时间/s
f值
对称
145
195
不对称
117
195
效率提高了约1/5,在解决规模较大的问题时,此性能差异是不可忽视的,故不对称的计算方式是可取的。
4.2邻域内的搜索方法
表4.2给出了随机抽样、启发式和遍历3种搜索策略的性能和代价,由此可见,随机抽样方式是一种简单有效的方法,它往往能避开种种启发式方法难以预见的局限。
启发式策略在搜索开始期间收敛速度较快,但随后趋于停滞;遍历方式吃力不讨好,实不可取。
4.3“温度”参数的设计
4.3.1α,γ对“温度”的影响
实验表明,α,γ值越大,“温度”下降趋势越慢,反之,越快。
因此,合理设置α,γ的值,可对退火过程的时间和性能进行合理调配。
表4.2搜索方法统计表
方法
计算时间/s
F值
初始“温度”
结束“温度”
随机抽样
117
195
300
1
启发式
135
205
300
1
遍历
452
295
300
1
表4.3在不同的起止“温度”条件下的计算时间(s)
11.52410
200
60
59
60
60
130
300
117
118
117
119
130
400
193
196
194
190
221
500
287
229
281
294
318
4.3.2初始“温度”和终止“温度”对算法性能的影响
表4.3和表4.4分别记录了初始“温度”和终止“温度”对计算时间和目标函数的影响,由此两表可看出,计算时间对初始“温度”敏感,而计算结果对终止“温度”敏感(通常初始“温度”比终止“温度”大几个数量级,故计量单位也相应增大。
此处,前者一般设置为10以内数,而后者常为百位数。
可以此为依据为调节算法性能设置参数。
表4.4在不同的起止“温度”条件下的目标函数值
11.5345
200
195
210
200
295
1105
300
195
205
215
265
900
400
195
205
205
285
930
500
195
200
210
255
845
第5章结束语
在本文中,“温度”是单调递减的,并没有出现预计中的回火现象,原因是回火条件过于苛刻。
跟踪退火过程我们可以发现,当目标函数值没有改变时,当前解却改变了。
实际上,解空间的每个状态都有一定数量的等价状态,其目标函数相等。
所以,在退火过程已陷入局部最优时,变换仍在等价状态的互相转化中进行,故不满足本文提出的回火条件。
如何更加准确的判断局部最优,以及如何确定回火公式使性能最优有待进一步探讨。
除此之外,本文将不发生教师和学生冲突作为硬约束仅是为方便起见。
此项要求亦可作为软约束反映在目标函数中,只要取值足够大,亦能保证得以满足。
废除此项硬性规定后,解空间将有所扩大,目标函数也可能因此得以改进,但计算每一次课的目标函数分量时都必须检索由同一教师教授的所有其他课的时间,以检测是否发生冲突,因此计算量大大增加了。
权衡利弊,如何做才能又合算又满意?
在此方面,还需要大量尝试。
就算法本身,SAA算法在求解规模较大的实际问题时,往往存在有收敛速度慢的特点,为此人们对该算法提出了各种各样的改进(4,5,6),其中包括并行SAA算法,快速SAA算法(Cauchy机)和对SAA算法中各参数的重新设计。
近年来,又有人提出ASAA算法(AdaptedSimulatedAnnealingAlgorithm),对解决较大规模的非线形规划问题很有帮助。
这些都是进一步提高算法性能可供探讨的方向。
最后要说明的是,本文是使用模拟退火算法解大学课表问题的一次有益的尝试,并且编程实现了这种尝试,获得了较好的效果。
排课表的软件很多,但不一定是使用模拟退火算法。
如上所说,本文的主要工作在于,对模拟退火算法实现时的各个关键环节,如初始解的确定,目标函数的计算方法,邻域及新解的产生方法,初始“温度”的确定和“温度”的更新方式,内循环次数的确定和算法的终止条件等,都提出了自己独到的看法和方法。
实验表明,这些方法是可行的和有效的,大大提高了算法的运行速度和课表对约束条件的满足度。
应该说,这些看法和方法,对解其他组合优化问题,也是可供借鉴和很有帮助的。
致谢
时光茬蒋,转眼间就要结束本科阶段的学习生活。
我衷心地感谢我的导师黄干平教授对我无私的关怀和悉心地教导。
我由衷地感觉到自己点滴的进步都离不开导师的辛勤培育,导师平易近人,是他的教诲和帮助激励我完成本文的撰写工作。
论文的完成过程渗透着导师的智慧和心血,凝聚着导师对我的关怀和启迪。
在此向我的导师陈志刚教授表示诚挚的感谢和崇高的敬意。
感谢他在百忙之中抽出时间审阅和指正我的论文。
由于作者学术水平有限,论文中对一些问题的研究难免存在不够严谨之处,还请各位教授予以指正,助其完善。
此外,撰写论文期间,我得到了许多同学以及同门兄弟姐妹的热情帮助,并与他们结下深厚的友谊,在此祝愿他们学业有成、前途似锦!
最后,感谢我的父母,是他们给予我家庭的温暖,父母的关心和勉励使得我在学校能够顺利完成学业。
参考文献
[1]康立山.非数值并行算法[M].北京:
科学出版社,1994.
[2]黄干平.解时间表问题的启发式算法[J].武汉大学学报(自然科学版),VOL.51,No.3,2001.
[3]陈华根.吴建生等模拟退火算法机理研究[J].同济大学学报(自然科学版),VOL.32,No.6,2004.
[4]张霖斌.姚振兴等.快速模拟退火算法及其应用[J].石油地球物理.VOL.32,No.5,2007.
[5]蔡亮等.模拟退火算法的改进和应用[J].内江师范学院学报,第20卷,第2期,2010.
[6]吕青英.混合遗传模拟退火算法的研究[J].内蒙古大学学报,第31卷,第5期,2009.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟退火算法解课表问题 本科毕业生 学位 论文 模拟 退火 算法 课表 问题
![提示](https://static.bdocx.com/images/bang_tan.gif)