基于遗传算法的试题组卷(一)

news2024/11/16 5:21:25

基于遗传算法的试题组卷
IT企业每年都会在春季和秋季举行校园招聘,对于个性化定制的试卷需求量很大,如何组出又好又快的定制化试题对于IT企业非常重要。组卷技术主要针对知识点覆盖率,题型,难度系数,试题数量等一些试题的属性进行多条件约束优化组卷。

为了方便考官出题考试,系统中引入了试题组卷技术。如何又快又好地生成符合考官口味的试卷变得非常关键。下面将对一些常用的组卷算法进行介绍。

目前常用的组卷有随机选取法,回溯试探法,遗传算法三种。

随机选取法:根据状态空间的控制指标,由计算机随机的抽取一道试题放入试题库,此过程不断重复,直到组卷完毕,或已无法从题库中抽取满足控制指标的试题为止。该方法结构简单,对于单道题的抽取运行速度较快,但是对于整个组卷过程来说组卷成功率低,即使组卷成功,花费时间也令人难以忍受。尤其是当题库中各状态类型平均出题量较低时,组卷往往以失败告终。

回溯试探法:这是将随机选取法产生的每一状态记录下来,当搜索失败时释放上次记录的状态类型,然后再依据一定的规律变换一种新的状态类型进行试探,通过不断的回溯试探直到试卷生成完毕或退回出发点为止,这种有条件的深度优先算法,对于状态类型和出题量都较少的题库系统而言,组卷成功率较好,但是对于程序结构相对比较复杂,该算法表现就比较差了。

遗传算法:遗传算法(Genetic Algorithm)是借鉴生物界中的自然选择和自然遗传等生物进化论的内容而提出的一种搜索算法。算法主要用来处理多约束的近似最优解。得到的结果取决于繁衍的代数,适应度函数的计算等。遗传算法主要包括如下几个阶段:初始化阶段,选择阶段,交叉阶段,变异阶段,验收阶段。在试题的组卷过程中会有很多约束条件如难度,题型,试题数量等多种因素,因此比较适合用遗传算法进行组卷。

3.2 遗传算法

遗传算法(Genetic Algorithm)是借鉴生物界中的自然选择和自然遗传等生物进化论的内容而提出的一种搜索算法。遗传算法的大体流程如下

在这里插入图片描述

图3-1 遗传算法的基本过程

初始化阶段:确定染色体的形式。先选择一种方式对x进行编码,使其从实际的解空间(phenotype space)被映射到编码空间(genotype space),也就是把实数x变成一条染色体。一般有两种编码方式,实数编码和二进制编码,各具优缺点。实数编码,直接用实数表示基因,容易理解且不需要解码过程,但容易过早收敛,从而陷入局部最优。二进制编码,稳定性高,种群多样性大,但需要的存储空间大,需要解码且难以理解确定好染色体形式之后,我们便可以拿它生成一个初始的种群。

选择阶段:选择阶段经历了适应性选择和随机选择。在适应性选择中,我们通过适应性函数(fitness function)对种群中的每一条染色体进行适应性评估,按评估结果对染色体进行排序。筛选出适应性最好的一定数量(可以通过参数调节)的染色体,作为下一代的父母加入存货列表。而在随机选择中,我们会随机挑选一些没有通过适应性选择的个体也加入存活列表,这样做是为了使得一些拥有潜在价值基因但适应性很差的个体得以生存下来。

交叉阶段:每一代染色体的数量是一定的,我们淘汰了一部分染色体,就要生成新的染色体来补足空缺。从上一代中,我们保留了一部分存活的染色体,它们之间将会进行交叉。交叉是指随机从存活列表中抽取两个染色体,将这两条染色体进行融合从而生成新的染色体(就是取一部分父染色体的基因,再在母染色体取在父染色体没有取到的基因,把这些基因合成一条新的染色体),把新的染色体加入种群中。交叉操作会一直持续,直到种群数量跟之前的种群数量相同。常见的交叉策略有重复交叉最优保留策略、混合交叉策略、随机基因交叉策略。

变异阶段:对于种群中的每一条染色体,使其一定几率地发生随机变异。常见的变异策略有自适应变异、多变异。

3.3.1 试卷约束目标
将一份试卷映射为一个染色体,组成试卷的每个试题映射为一个基因向量。每一道都有多个属性,这些属性构成了试卷的约束条件。论文对于试题的约束属性如下表所示
在这里插入图片描述
3.3.2 试题编解码设计
由于试题的数量较多,不适合采用二进制进行编码,决定采用实数进行编码。试题的ID就是实数的编码值。将一整份试卷作为一个染色体,试题作为染色体上的基因。染色体进行分段处理,每一个段作为一个题型,这样可以保证每种题型的数据不会发生变化。比如要组一套《软件开发工程师的招聘试卷》,其中选择题3道,简答题4道,编程题2道,染色体的编码如下:
在这里插入图片描述
3.3.3 种群初始化设计
通过随机的方法对种群进行初始化。

3.3.4 适应度计算设计
适应度函数是用来评判试卷群体中个体优劣程度的指标。遗传算法利用适应度这一信息来指导搜索方向。在传统的遗传算法适应度跟试卷难度系数和知识点分布有关的基础上我们增加了信息匹配度。

试卷难度系数公式:

在这里插入图片描述

其中i=1,2,…N。N是试卷所包含的题目数,Di,Si分别是第i题的难度系数和分数。

知识点分布用一个个体知识点的覆盖率来衡量,例如期望本试卷包含N个知识点,而一个个体所有题目知识点的并集包含M个(M<=N),则知识点的覆盖率为M/N。

用户的期望难度系数EP与试卷难度系数P之差越小越好,知识点覆盖率越大越好,信息匹配度越大越好。因此适应度函数如下:

在这里插入图片描述

f1为知识点分布的权重,f2为难度系数所占权重

3.3.5 交叉变异设计
交叉和变异过程主要步骤是去重。变异的去重过程相对比较简单,在试题搜索的过程中就直接排除掉要变异的试题就可以达到去重的目的了。这里重点介绍下交叉过程的中的去重。

交叉去重的过程如下,首先将要交叉的染色体的所以基因即试题全部合并到一起,合并时候去重。比如

在这里插入图片描述

接着按照原来每个题型的数量等概率的选取组成新的染色体。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832299.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么感觉 C/C++ 不火了?

首先C和C是两个非常不一样的编程语言。 C语言在系统开发领域地位非常稳固&#xff0c;几乎没有替代产品。应用层开发近年来略微有被Rust取代的迹象。 C由于支持的编程范式过多&#xff0c;导致不同水平的人写出来的代码质量差异太大&#xff0c;这给软件的稳健性带来了很大的…

C高级_第二讲_shell指令和shell脚本_递归练习

思维导图 递归实现&#xff0c;输入一个数&#xff0c;输出这个数的每一位 int funh(int num){if(0 num){return 0;}else{funh(num/10);printf("%d\n", num%10);} }int main(int argc, const char *argv[]) {puts("请输入一个数");int num 0;scanf(&quo…

C++11中的内存模型

一、几种关系术语 1.1、sequenced-before sequenced-before用于表示同一个线程中&#xff0c;两个操作上的先后顺序&#xff0c;这个顺序是非对称、可以进行传递的关系。 它不仅仅表示两个操作之间的先后顺序&#xff0c;还表示了操作结果之间的可见性关系。两个操作A和操作…

《长安的荔枝》阅读笔记

《长安的荔枝》阅读笔记 2023年6月9号在杭州的小屋读完&#xff0c;作者以“一骑红尘妃子笑”的典故&#xff0c;想象拓展出来的荔枝使李善德&#xff0c;为了皇帝要求在贵妃寿辰&#xff0c;六月一号那天要吃到10斤的荔枝。需要从广州运送到长安即如今的西安。本来以为这个差事…

SequenceDiagram 查看代码时序图的利器,做技术方案必备!

前言 “ 无论是快速了解业务流程&#xff0c;还是快速的熟悉系统的业务代码逻辑&#xff0c;以及各个类和方法等的调用关系&#xff0c;时序图无疑是其中一种不可获取的简便快捷的方式。一起来了解下&#xff0c;IDEA如何快速生成时序图吧。” 工作中&#xff0c;经常需要绘制…

async 和 await的用法

async 函数 async 函数是使用async关键字声明的函数。async 函数是 AsyncFunction构造函数的实例&#xff0c;并且其中允许使用 await 关键字。async 和 await 关键字让我们可以用一种更简洁的方式写出基于 Promis的异步行为&#xff0c;而无需刻意地链式调用 promise。 asyn…

MySQL实用命令

一、 DISTINCT 去重 案例&#xff1a;user_test表对班级字段进行去重操作 SELECT DISTINCT class FROM user_test 二、 的作用 案例&#xff1a; SELECT NULL10 三、 concat 实现连接字符串 ​​​案例&#xff1a; SELECT CONCAT(NAME,class) AS 姓名班级 FROM user_test 四…

看了那场直播后,我们发起了一个讨论

几天前&#xff0c;我们做了一场直播&#xff0c;关于如何用 Serverless 技术让文化古籍“活过来”。 完整视频进入阿里云云原生视频号看直播回放 背景信息&#xff1a; 通过阿里云函数计算帮助复旦大学特藏中心建立数字图书馆&#xff0c;为用户提供更丰富、更具互动性的古籍浏…

使用Claude为杜甫写简历

杜甫生平的百度链接&#xff1a;杜甫&#xff08;唐代著名现实主义诗人&#xff09;_百度百科 选中所有内容。 打开claude网页&#xff1a;App unavailable \ Anthropic 粘贴刚刚复制的内容。 输入&#xff1a; 按照这个格式总结杜甫的一生&#xff1a;“公元712年 杜甫出…

Shell脚本学习-while循环2

案例&#xff1a;使用while守护进程的方式监控网站&#xff0c;每隔10秒确定一次网站是否正常。 [rootvm1 scripts]# cat url_monitor1.sh #!/bin/bashif [ $# -ne 1 ]thenecho "USAGE: $0 url"exit 1 fiwhile true doif [ curl -I -s -w "%{http_code}" -…

友盟+、GrowingIO和神策数据 对比

对于市面上的数据平台&#xff0c;先简单归个类。 1、移动统计平台&#xff0c;如友盟、talkingdata、百度云统计、腾讯移动应用统计等。 相同点是数据源都是埋点数据。友盟有免费版本。 前端效果&#xff1a;展现形式上为BI报表。 常用操作是页面内点击和筛选。 使用要求…

使用 RSA 密钥进行 SSH 连接

使用 RSA 密钥进行 SSH 连接 平时用 SSH 连树莓派和虚拟机每次都要输入密码&#xff0c;比较烦人。Windows Terminal 出于安全原因是不支持记录密码进行自动连接的功能的&#xff0c;所以还是老老实实创建 RSA 密钥进行连接好了。 生成 RSA 密钥对 Windows 上可以用 Putty K…

leetcode17. 电话号码的字母组合(java)

电话号码的字母组合 leetcode17. 电话号码的字母组合题目描述回溯算法代码演示 回溯算法 leetcode17. 电话号码的字母组合 难度 中等 leetcode17 跳转链接 题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数…

基于遗传算法的试题组卷(二)

实例讲解 一、准备工作 1、问题实体 问题实体包含编号、类型&#xff08;类型即题型&#xff0c;分为五种&#xff1a;单选&#xff0c;多选&#xff0c;判断&#xff0c;填空&#xff0c;问答&#xff0c; 分别用1、2、3、4、5表示&#xff09;、分数、难度系数、知识点。一…

前端Vue入门-day08-vant组件库

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 vant 组件库 安装 导入 全部导入 按需导入 浏览器配饰 Viewport 布局 Rem 布局适配 vant 组件库 …

九耶|阁瑞钛伦特:产品经理面试题—产品经理在工作中是如何划分需求优先级的?

产品经理在工作中划分需求优先级是为了指导产品团队的开发和发布流程。以下是产品经理在划分需求优先级时通常考虑的因素&#xff1a; 业务目标&#xff1a;产品经理会与企业领导层或业务方合作&#xff0c;了解公司的战略目标和销售策略。然后&#xff0c;他们会根据这些目标评…

【数据分享】1901-2022年1km分辨率的逐年平均气温栅格数据(免费获取)

气温数据是我们最常用的气象指标之一&#xff0c;之前我们给大家分享过1901-2022年1km分辨率逐月平均气温栅格数据&#xff0c;该数据来源于国家青藏高原科学数据中心&#xff0c;数据持续更新&#xff0c;最新数据为2022年的数据&#xff01;很多小伙伴拿到数据后还咨询我们有…

Docker-Compose编排与部署(lnmp实例)

第四阶段 时 间&#xff1a;2023年8月3日 参加人&#xff1a;全班人员 内 容&#xff1a; Docker-Compose编排与部署 目录 一、Docker Compose &#xff08;一&#xff09;概述 &#xff08;二&#xff09;Compose适用于所有环境&#xff1a; &#xff08;三&#xf…

数据结构基础4:带头指针双向。

一.基本概念&#xff1a; 一.基本结构&#xff1a; 1.逻辑结构&#xff1a; 二.结构体的基本组成。 和单链表非常大的区别就是函数不需要传二级指针&#xff0c;因为头不存有效数据。头节点不需要改变。 二.功能接口的实现 0.创建一个新的节点 //创建新的节点ListNode* buy…

【C++】BSTree 模拟笔记

文章目录 概念插入和删除非递归实现中的问题递归中的引用简化相关OJ复习直达 概念 由下面二叉搜索树的性质可以知道&#xff0c;中序遍历它便可以得到一个升序序列&#xff0c;查找效率高&#xff0c;小于往左找&#xff0c;大于往右走。最多查找高度次&#xff0c;走到到空&am…