遗传算法在组卷中的应用 遗传算法代码( 二 )


可以自定义终止条件 。例如,本例中定义的终止条件是找到期望的序列,进化的次数或适应度的上限可以根据具体场景的要求来指定 。
"遗传算法在组卷中的应用
选择遗传算法最优解的原则可以应用于许多实际函数,本案例将其思想应用于组卷函数 。算法的基本原理相同,但算法的细节需要根据生成试卷的实际情况进行调整 。算法中的个体是一张试卷,试卷中的题目数量根据不同的题库系统而有所不同 。
其实网上有很多关于生成试卷的应用 。对于组卷来说,共同的属性是知识点的覆盖率和试卷的难度系数 。单项试卷需要按照自定义的RuleBean进行初始化,基本属性包括个人期望难度系数、试卷总分、试卷包含的知识点、选择题数量、选择题分值等 。初始化个体时,根据规则从数据库中随机选取相应的试题,计算试卷的适应度、难度系数和知识点覆盖率 。根据实际问题中个别对象的不同,三者的计算方法也会有所变化 。

遗传算法在组卷中的应用 遗传算法代码

文章插图
图6计算个人难度系数的实现代码 。
遗传算法在组卷中的应用 遗传算法代码

文章插图
图7个人知识点覆盖率实现代码 。
遗传算法在组卷中的应用 遗传算法代码

文章插图
图8计算个体适应度的实现代码 。
个体变异的操作是根据定义的变异概率进行概率变异 。变异对象是试题,个体中的试题有一定概率变异成数据库中其他科目、类型相同的试题 。利用淘汰数组选择种群中的最佳个体,具体操作是从种群中随机选择5个个体组成淘汰数组,并返回淘汰数组中的最佳个体 。
在试卷的开始,你可以定义进化的数量和期望的适合度 。初始化种群后,可以根据试卷规则进行迭代进化 。由于数据库数据的限制,无论进化多少次,都可能达不到预期的适合度 。所以你需要设定一个进化的上限,比如100次 。最初的人口数量不应该太多 。在遗传算法的组卷应用中,个体就是组卷,需要在种群初始化时进行初始化 。在按照定制规则进化的过程中,当种群中有满足要求的个体时,进化就结束了 。这时,最优的个体就是符合我们要求的个体,也就是一套试卷 。
"总结”
这种做法以前在互联网上是零散的研究,也是算法第一次应用到web的开发中 。可以认为对该领域的应用有一定的了解 。算法的设计和原理也是边学边写,主要应用于根据算法原理生成试卷的功能模块 。希望这篇文章能给其他朋友一些思路 。
对IT技术感兴趣的,欢迎关注微信官方账号:白帽同学 。


推荐阅读