4.2 一些设计模式的应用 21
4.2.1 Singleton Pattern (单例模式) 21
4.2.2 IOC控制反转模式 23
4.2.3 Reflection (反射)机制 23
4.2.4 IOC与Reflection的代码实现 23
4.3 一些细节的处理 25
4.3.1 并发的处理 25
4.3.2 日志的处理 26
4.3.3 异常的处理 26
4.3.4 性能的监测 27
4.4 TDD测试驱动开发 27
4.4.1 TDD简介 27
4.4.2 TDD原则 27
4.4.3 TDD的实现 28
4.5 软件可拓展性、可维护性的考虑 29
4.5.1 遵循的原则 29
4.6 版本控制 30
4.6.1 GASystem1.0 30
4.6.2 GASystem2.0 30
4.6.3 GASystem3.0 31
结论 33
致谢 34
参考文献 35
1 引言
1.1 研究背景
自动组卷是出卷者给出一些约束条件,比如试卷的难度系数、试卷的总分、题目总量、题型比例、知识点覆盖率,然后根据这些约束条件,从题库里面搜索出符合要求的题目,它的本质上是一个有多重约束的组合问题,因此适合用遗传算法来解决。
1.2 国内外发展现状
1.3 论文研究内容
论文研究内容包括两个方面,一是算法层面,具体来说包括对遗传算法的了解,如何将遗传算法应用到组卷系统中,如何对遗传算法做出优化;二是工程层面,具体来说包括如何设计组卷系统,如何用代码实现等等实际工程问题。
2 相关技术介绍
2.1 遗传算法
2.1.1 遗传算法摘要
遗传算法(Genetic Algorithm,简称GA),之所以成为“遗传”,是因为该算法模拟了达尔文“优胜劣汰、适者生存”的进化论。在人类漫长的进化史的过程中,有个大的趋势,就是人类总是向好的方向发展,这是因为物种都不自觉的遵循了遗传规律,在此,我不多谈进化论,而是把重点转到进化论跟遗传算法的关系说清楚。
生物在进化的过程中,会经历染色体或者说是基因交叉、变异的过程,一般来说,不适应环境的生物会渐渐的灭亡,所以它能够遗传下去的基因就会很少,久而久之就灭绝了。这个就是遗传算法的借鉴的地方。遗传算法也是将要处理的问题看做一个种群,将求解问题的过程看做是进化的过程,这中间会经历问题的选择、交叉、变异的迭代过程,但是,问题的解空间总是向最优化的方向发展。这便是遗传算法跟进化论相似的地方。自然科学的神奇之处也许就在此,生物学和计算科学也能够有交融,这就是科学无边界,触类旁通!
跟A*算法一样,遗传算法也是一种启发式搜索算法,但是它又跟A*等启发算法不太一样,它是从生物进化论里面繁衍过来的,并且最核心的差别在于:A*算法只是对局部的搜索,依赖于个体和个体解的状态,往往越往后,效率会越低;而遗传算法则是对全局进行的一个搜索,它完全不依赖于个体,只需要一个适应度,在一定的迭代次数内,如果某个种群里面有个体的适应度超过预期的适应度值,则认为遗传算法是成功的,因为它找到了我们想要的解。