我目前正在一个网站上工作,该网站将允许我所在大学的学生根据他们想修的课程自动生成有效的课程表。

在网站上工作之前,我决定解决如何有效地安排课程的问题。

一些澄清:我们大学的每门课程

大学)由一个或多个部分组成。比如说,

微积分I目前有4个部分可用。这意味着,取决于课程的节数,以及课程是否有实验室,这会极大地影响排课过程。

我们大学的课程用学科缩写和课程代码的组合来表示。在微积分I中:数学1110。

CRN是一个区段特有的代码。

我就读的大学不是男女混合的,意思是男女在(几乎)不同的校园学习。我几乎是说校园被分成了两部分。

datetimes和timeranges dict旨在减少对datetime.datetime.strTime()的调用,这是一个真正的瓶颈。

我的第一次尝试是算法不断循环,直到找到30个调度。通过从一个输入的课程中随机选择一个部分,然后尝试从其余课程中放置部分来构建有效的计划,创建计划。如果不是所有课程都符合时间表,即存在冲突,则取消时间表并继续循环。

显然,上述解决方案存在缺陷。算法运行时间太长,而且过于依赖随机性。

第二种算法与旧算法完全相反。首先,它使用itertools.product()生成所有可能的计划组合的集合。然后,它遍历计划,删除所有无效的。为了确保分类的部分,计划组合在被验证之前被洗牌(random.shuffle())。同样,也有一些随机性。

经过一点优化,我能够让调度程序在1秒内运行,平均调度由5个课程组成。那很好,但一旦你开始增加更多的课程,问题就开始了。

给你一个想法,当我提供一组特定的输入时,可能的组合量非常大,以至于itertools.product()不会在合理的时间内终止,并且在这个过程中会消耗1GB的RAM。

显然,如果我想让它成为一个服务,我需要一个更快更高效的算法。两个已经出现在网上和IRC:动态规划和遗传算法。

动态规划不能应用于这个问题,因为如果我正确理解这个概念,它涉及到将问题分解成更小的部分,单独解决这些部分,然后将这些部分的解决方案组合在一起形成一个完整的解决方案。据我所见,这不适用于这里。

至于遗传算法,我不太了解它们,甚至无法理解如何在这种情况下应用它们。我也知道,对于一个非常大的问题空间,遗传算法会更有效,而这不是的大。

我有什么选择?有没有一种相对可以理解的方法来解决这个问题?或者我应该坚持我所拥有的并希望下学期没有多少人决定选修8门课程?

我不是一个伟大的作家,所以我很抱歉在这个问题上有任何模棱两可的地方。请随时要求澄清,我会尽力帮助你的。

这是完整的代码。

注意:很抱歉使用了误导性的标签(日程安排)。

用python写排课系统_大学课程的有效排课相关推荐

  1. python写一个crm系统_用Python打造一个CRM系统(四)

    在上一篇中在本地进行初始化,并让项目顺利运行.在本篇中将实现一个线索管理模块,支持线索的增删改查. 新建线索应用模块 进入项目目录,使用django命令创建线索应用模块,命令如下: $ python ...

  2. 每日好课分享【精品课程】 每日好课分享

    每日好课分享[精品课程] 每日好课分享 腾讯课堂链接 https://ke.qq.com/course/460096?tuin=55f6c5a5 网易云课堂 https://study.163.com ...

  3. 用python写排课系统_JSP基于WEB的网上选排课系统,源码下载

    大家好,我是全微毕设团队的创始人,本团队擅长JAVA(SSM,SSH,SPRINGBOOT).PYTHON.PHP.C#.安卓等多项技术. 今天将为大家分析一个网上选排课系统(高校排课系统要求十分严格 ...

  4. python排课系统_关于排课系统的实现?

    这种系统 跟各校自己的生态关系很大 由于你没说哪个环节有问题 因此以下我的回答只能猜测与乱枪打鸟 事先说明 我并没做过类似系统 但这类系统 网路上查到的资料是 老师们的可授课时间自己填 然后系统再排 ...

  5. 教务排课系统毕业设计,大学排课系统设计与实现,排课系统论文作品参考

    功能清单 [后台管理员功能] 录入分院:录入分院名称,简介,详情 分院管理:管理已经录入分院,支持修改和删除 老师录入:录入老师姓名.联系方式.头像.老师简介 老师管理:管理所有已经录入老师信息,支持 ...

  6. python脚本自动化赚钱系统_自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万!...

    Python Python开发 Python语言 自从用python写了个自动弹幕脚本后,各大主播都来找我,净赚十万! 大家好,今天又给大家带来了Python爬虫的分享,今天我们继续上次的问题,继续来 ...

  7. python写论文难吗_师兄一年发表5篇CSSCI,原来高手也用套路……

    对于多数科研人而言,写论文是件特别磨人的事情. 以前,几千几万字,写上好几个月,有的甚至需要花上一年左右的时间,还不见得能顺利发表. 这也让我一再感受到,科研真的不是那么好做的,做出一点扎扎实实的&q ...

  8. python股权变动监控系统_每天5分钟玩转Python(12) - 生成器(下)

    这一章开始介绍生成器函数和 yield关键字,以及Python中的协程的概念. yield关键字 当我们调用一个普通的函数时,执行过程从第一条语句开始,直到碰到一个 return语句或者遇到一个异常抛 ...

  9. c语言 排课系统 利用栈,C语言-课表排课系统

    功能模块概要说明: 1.输入函数: char* uscanf(int,int,int) //图形模式下输入函数,大小写26个字母0-9数字外加空格键为有效输入,可以使用BACKSPACE. 2.开始界 ...

最新文章

  1. 【网站汇总】单片机常用通讯协议
  2. 怎么查看SQL SERVER 2000是否打过SP4的补丁
  3. 【渝粤教育】国家开放大学2018年秋季 0267-21T摄影技术 参考试题
  4. Karma 5:集成 Karma 和 Angular2
  5. 如何在Mac上控制对日历的访问?
  6. BZOJ2431:[HAOI2009]逆序对数列(DP,差分)
  7. 《HTTP权威指南》学习总结1——HTTP协议概述
  8. 华为校园招聘面试题目及流程
  9. 截止失真放大电路_模拟放大器
  10. ZigBee技术及其应用
  11. 从西直门立交桥谈IT架构与重构
  12. 企业运维,至少包括如下几个大方面: 1,桌面运维(以windows为主,工资偏低,桌面运维经理可以达到8K到10K,很多人在公司里干的就是安装windows系统,windows里的QQ坏了重装下,砸个
  13. FreeRTOS 任务调度 任务切换
  14. 【Mockplus教程】如何修改手机外壳?
  15. hive获取近12个月数据
  16. 试试多线程(java)
  17. 区块链如何解决数据安全问题?
  18. 计算机组成原理-唐朔飞 学习指导与习题解答 第2版
  19. 中国历史朝代 英文翻译 A Brief Chinese Chronology
  20. 【题解报告】ZJNU综合训练(2021.1.26)

热门文章

  1. (二)爬取新房销售信息——数据分析+可视化篇
  2. 可穿戴式计算机技术,可穿戴式无线网络技术方案详解(一)
  3. 最优雅的数据结构之一——字典树Trie(Java)
  4. 【Python公开课】零基础玩转Python:Python中的文件操作
  5. 52、交换机的4种网络结构方式,看看你掌握了哪种
  6. 中国公路养护行业规划建议及项目经济效益分析报告2022-2028年版
  7. 【SCADA】启动KingSCADA运行系统,提示加载报警库服务失败?
  8. MySql 插入数据
  9. 阿里云云导播---直播时,优化延迟及观看直播时清晰度迷糊问题
  10. Django模型系统——ORM中跨表、聚合、分组、F、Q