基于遗传算法的排课系统

整体思路

为所有课程班找到一个时空序列。课程班,(有别于课程的概念)即特定老师所上的具体的课程。时空序列是指,某一教室某一天的某一课时的开始时间。在时空序列不冲突的情况下,再去解决老师上课时间的冲突。

文件介绍
`│  chromosomeSet.js` 
`│  chromosomeSet1.js 第一个学期课程表结果`
`│  chromosomeSet2.js 第一个学期课程表结果`
`│  classRooms.js    教室`
`│  common.js     工具函数`
`│  config.js       配置文件`
`│  courses.js   所有课程`
`│  ga-demo.html` 
`│  GA.js     遗传算法主要函数`
`│  lessonClasses_2020-2021-1.js  第一个学期课程`
`│  lessonClasses_2020-2021-2.js  第二个学期课程`
`│  teachers.js`
`│  view.js    页面显示`
`├─lib`
`│  │  echarts.min.js`
`│  │  vue.js`
`│  │` 
`│  └─element-ui`
`│      │  index.css`
`│      │  index.js`
`│      │` 
`│      └─fonts`
`│              element-icons.woff` 

数据结构

adaptability:二维数组保存各个课程班,在各个时空序列的适应程度,根据是否符合条件打分。


`function initAdapt(){`
 `adaptability = [];`
 `for (let i = 0; i < lessons.length; i++) {`
 `adaptability[i] = [];` 
 `for (let d = 0; d < DAYS; d++) {`
 `for (let t = 0; t < TIMES; t++) {`
 `for (let r = 0; r < classRooms.length; r++) {`
 `// 判断不可用时段`
 `if (unableDayTime[d] && unableDayTime[d].includes(t)){`
 `adaptability[i][index] = 0;`
 `continue;`
 `}`
 `var index = indexUtil.getIndex(d,t,r);` 
 `adaptability[i][index] = adapt(i,d,t,r);`
 `}`
 `}`
 `}`
 `}`
`}`

chromosomeSet:一组基因,geneOrder:每组基因按照课程班顺序保存对应时空序列,badSelect:冲突数,adapt:适应度

 `this.getIndex = (day,time,roomIndex)=>{`
 `return timeLength *roomIndex + times*day + time;`
 `}`
 
 `this.getPosition = (index)=>{`
 `var room= Math.floor(index/timeLength);`
 `var daytime = index%timeLength;`
 `var day = Math.floor(daytime/ times);`
 `var time = daytime%times;`
 `return {day,time,room};`
 `}`
 

其中:

days:一周上课日 规定 0-6为周一-周日

times:每天上课总时间

timeLength= days*times

此三个参数: (day,time,roomIndex)第几天,第几节课,教室下标

由于此处仅仅记录了,课程的上课时间。所以要限制上课开始时间。联排两课时的可以选择第一节,第三节开始,第五节开始。联排三次课的可以选择第7节课,第10节课开始。


 `var unitUnableTime = {  //此处时间为下标,从零开始`
 `1: [],`
 `2: [1,3,5,7,8,10,11],`
 `3: [0,1,2,3,4,5,7,8,10,11],` 
 
 `};`

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值