遗传算法(二)之组卷算法
2015-12-05 23:46
836 查看
组卷算法主要用于编制科学、公正的试卷的一种算法,具体大家可以百度看一下。我这篇文章主要是讲解如何通过遗传算法来实现组卷,遗传算法大家不清楚的地方仍然可以查看百度,不是这篇文章的重点。
一、遗传算法的表示
基本遗传算法(SGA)可以定义为一个8元数组:
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115352046-922545149.png)
。
其中:
C:个体的编码,SGA种一般采用固定长度的二进制编码;
E:适应度评价函数;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115534124-1039008135.png)
:初始种群;
M:群体大小,一般取20;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115552827-1408301826.png)
:选择算子;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115601312-1690568747.png)
:交叉算子;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115609312-962871891.png)
:变异算子
T:结束条件
二、遗传算法的设计
遗传算法的设计通常有以下5个步骤:
1、编码方案的确定
编码对遗传算法的效率、解空间的收敛程度有很大的影响。如何把现实问题,转化为算法的使用的编码,也是一个难度比较大的问题。
2、选择适应度评价函数
好的适应度函数能把种群的优劣程度充分、准确的体现出来,能让遗传算法在目标空间中更快的找到近优解。
3、初始化参数
参数主要是包括:种群数目M,交叉概率,变异概率以及迭代的代数。
4、算子的设计
算子主要包括选择算子、交叉算子、变异算子等
5、终止条件
终止条件是要是根据求解的性质,在质量和效率上做出合理的均衡和侧重。
三、基于遗传算法的组卷实现
1、组卷问题的数学模型
一套题目
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115654343-1292970191.png)
包含n个属性指标,如:章节、难度、题型等;一套试题
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115713843-1657795102.png)
是有m个题目数,这样就构成了一个的矩阵。
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115724609-439933135.png)
对于这个矩阵应该满足
(1)试卷的总分是一个常数G,例如100分;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120033468-1739287418.png)
(2)各题型的分数也是一个常数,例如填空题多少分,选择题多少分。
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120103437-1588955237.png)
是个常数,M表示每个题型占总分的比例。
(3)各难度系数所占试卷的比值一般也是一个常数,
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120116515-463736496.png)
2、染色体的编码
题库中有L个待选题目,我们用一个长度为L的01字符串来表示,0表示题未被选中,1表示题选中。这样每一个试卷都对应了一个长度为L的二进制字符串,称为染色体。
3、目标函数
我们可以把上述约束条件转化为目标函数,设
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120304796-833899392.png)
(i=1,....p,p为要求的难度系统的总和)为难度要求为i的实际总分值与要求的总分值的偏差,偏差的平均值就为
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120318531-1730870115.png)
;
同理,
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120352562-1588478872.png)
(i=1,...q,q为试题的总类型数)为实际试题类型第i章所占的分数与试题要求的分数之间的偏差,偏差的平均值就为
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120405015-1351694174.png)
;每种偏差要求的权重为
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120419843-1513772411.png)
其中
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120429562-1298238958.png)
那我们的目标函数就为:
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120541421-1288986345.png)
f越小选出的试题越好。
4、初始种群
一套试卷结构表为:
题库数据表
假设,一套试题总分100分,综合难度系统为0.55,也就是说,期望得分为55分。
四、代码实现
参考背包问题的实现。
一、遗传算法的表示
基本遗传算法(SGA)可以定义为一个8元数组:
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115352046-922545149.png)
。
其中:
C:个体的编码,SGA种一般采用固定长度的二进制编码;
E:适应度评价函数;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115534124-1039008135.png)
:初始种群;
M:群体大小,一般取20;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115552827-1408301826.png)
:选择算子;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115601312-1690568747.png)
:交叉算子;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115609312-962871891.png)
:变异算子
T:结束条件
二、遗传算法的设计
遗传算法的设计通常有以下5个步骤:
1、编码方案的确定
编码对遗传算法的效率、解空间的收敛程度有很大的影响。如何把现实问题,转化为算法的使用的编码,也是一个难度比较大的问题。
2、选择适应度评价函数
好的适应度函数能把种群的优劣程度充分、准确的体现出来,能让遗传算法在目标空间中更快的找到近优解。
3、初始化参数
参数主要是包括:种群数目M,交叉概率,变异概率以及迭代的代数。
4、算子的设计
算子主要包括选择算子、交叉算子、变异算子等
5、终止条件
终止条件是要是根据求解的性质,在质量和效率上做出合理的均衡和侧重。
三、基于遗传算法的组卷实现
1、组卷问题的数学模型
一套题目
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115654343-1292970191.png)
包含n个属性指标,如:章节、难度、题型等;一套试题
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115713843-1657795102.png)
是有m个题目数,这样就构成了一个的矩阵。
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128115724609-439933135.png)
对于这个矩阵应该满足
(1)试卷的总分是一个常数G,例如100分;
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120033468-1739287418.png)
(2)各题型的分数也是一个常数,例如填空题多少分,选择题多少分。
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120103437-1588955237.png)
是个常数,M表示每个题型占总分的比例。
(3)各难度系数所占试卷的比值一般也是一个常数,
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120116515-463736496.png)
2、染色体的编码
题库中有L个待选题目,我们用一个长度为L的01字符串来表示,0表示题未被选中,1表示题选中。这样每一个试卷都对应了一个长度为L的二进制字符串,称为染色体。
3、目标函数
我们可以把上述约束条件转化为目标函数,设
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120304796-833899392.png)
(i=1,....p,p为要求的难度系统的总和)为难度要求为i的实际总分值与要求的总分值的偏差,偏差的平均值就为
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120318531-1730870115.png)
;
同理,
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120352562-1588478872.png)
(i=1,...q,q为试题的总类型数)为实际试题类型第i章所占的分数与试题要求的分数之间的偏差,偏差的平均值就为
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120405015-1351694174.png)
;每种偏差要求的权重为
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120419843-1513772411.png)
其中
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120429562-1298238958.png)
那我们的目标函数就为:
![](http://images2015.cnblogs.com/blog/804386/201511/804386-20151128120541421-1288986345.png)
f越小选出的试题越好。
4、初始种群
一套试卷结构表为:
题型 | 填空题 | 选择题 | 判断题 | 简答题 | 综合题 |
总分数 | 10 | 10 | 10 | 30 | 40 |
每题分数 | 1 | 1 | 1 | 10 | 20 |
数目 | 10 | 10 | 10 | 3 | 2 |
题型 | 填空题 | 选择题 | 判断题 | 简答题 | 综合题 |
每题分数 | 1 | 1 | 10 | 30 | 20 |
难度系数 | 0.85~1 | 0.76~0.86 | 0.40~0.76 | 0.23~0.39 | 0.0~0.22 |
数目 | 50 | 150 | 70 | 30 | 20 |
四、代码实现
参考背包问题的实现。
相关文章推荐
- Ubuntu 14 Trusty安装hue
- 算法(三)粒子群算法之算法分类
- 算法(三)粒子群算法之局部粒子
- 算法(三)粒子群算法PSO的介绍
- 算法(二)之遗传算法(SGA)
- 算法(一)之洗牌算法
- cgi中的环境变量
- C++与Java
- 55-懒省事的小明
- 你真的说的清楚ArrayList和LinkedList的区别吗
- Solr5.0源码分析-SolrDispatchFilter
- 我面试电商行业的经历-负载均衡
- linux之wc命令
- Google Play 2015年度最佳游戏与应用公布
- Google Play 2015年度最佳游戏与应用公布
- 如何解决SSH连接Linux超时自动断开?
- PHP如何连接MySQL数据库
- input子系统 事件流程浅析
- lijhtoj Ekka Dokka 1116 (简单数学题)
- 数据结构上机测试4.1:二叉树的遍历与应用1