以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  关于排课  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=153793)

--  作者:刘林
--  发布时间:2020/8/23 9:00:00
--  关于排课
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目3.foxdb



设置了一个随机排课,现在的问题是当附加条件多了后出来卡死,也就是符合全部安排完的结果无解,这怎么办
现在需要将排课增加一些基本条件的还有:
(1)限定排课(限定某节不能安某科,如每天1、2节不安体育、美术、音乐
(2)一个老师在同一节次不能出现跨班安课(如星期1第1节已上1班语文,就不能安2班任何科该老师的课)
(3)教师在一个班的每天排课节数<=周课时/5天的最大整数

基于以上三个条件考虑,当加了第一个条件就出来有时随机安不下去(无解卡死),请老师帮指导研究下:
1、如何解决当无解时再随机排
2、如何增加条件(2)(3)
3、如何优化效率

--  作者:天宇科技
--  发布时间:2020/8/23 11:40:00
--  
我可以给你提供一个思路,首先执行条件一,再执行条件二,三。如果执行上述条件无解时,可以把没有安排完的课程显示在最后一列里(增加一列辅助列),然后人工调课或者更改排课条件,重新排课。
--  作者:刘林
--  发布时间:2020/8/23 16:41:00
--  
一旦加条件进行随机排课都要人工去做,那就不能叫做排课软件了,人工调整最多到以上最基本条件达到排好后进行人性化个别调课才用,比如说还没有考虑到或根本无法考虑的特殊条件最后采用人工调课,如夫妻同校第四节不重,领导有课星期二不安等一些奇奇怪怪的想法等,现在想请老师,帮改写下面面代码能实现(1)(2)(3)基本条件实现随机排有解排完,如遇无解系统会判断无解并重新排课至到有解
--  作者:天宇科技
--  发布时间:2020/8/23 17:01:00
--  
网上排课软件,他们有一列暂存区,就是将没有排完的课程放那儿的
--  作者:刘林
--  发布时间:2020/8/23 21:51:00
--  
未报不用暂存列也可以,因为没安排就是这些节次吧,痛点在用手工进行排课肯定不现实,班级少的好点,一旦多了后将无法控制,调了一个教师的课,其他又出矛盾了,请高手帮指点
--  作者:刘林
--  发布时间:2020/8/24 12:34:00
--  
请蓝老帮下例子中的代码,谢谢
--  作者:有点蓝
--  发布时间:2020/8/24 13:59:00
--  
不好意思,我无能为力。您如果觉得高数还没有还给老师,可以百度“排课算法”,可以参考学习一下,反正我是看不懂的。
--  作者:shenyl0211
--  发布时间:2020/9/14 16:15:00
--  
物理、化学等不仅受实验室数量限制,还受实验后重新整理、配备物品的时间限制
音乐受音乐教室的数量控制
体育受体育场地的数量控制

--  作者:shenyl0211
--  发布时间:2020/9/15 13:41:00
--  
(1)限定排课(限定某节不能安某科,如每天1、2节不安体育、美术、音乐
1、可以引入【字典管理】表,有【科目】、【优先顺序】等列名,【优先顺序】对应【科目】,把【科目】下【语文】、【数学】、【英语】的【优先顺序】分别设为【1】、【2】、【3】,就会自动安排在【早上】,把【体育】、【美术】、【音乐】分别设为【7】、【8】、【9】之类,自然变成了【下午】的课。
2、如果某课不能在指定时间上课,那就直接指定上课时间,避免对天气的要求和因资源不足造成的冲突。在【教师安排】表中增加【星期1】、【节次1】、【星期2】、【节次2】等辅助列即可完成指定科目的安排,无需在【课程安排】表中增加【限定】之类的列。
3、如果在【字典管理】表中有各【班级】的【每天节数】、【周五节数】,即可用代码自动生成初始的【课程安排】表,然后可以用代码自动将【教师安排】表中已指定上课时间的【科目】填写到【课程安排】表中。
(2)一个老师在同一节次不能出现跨班安课(如星期1第1节已上1班语文,就不能安2班任何科该老师的课)
利用二次搜索即可完成。
1、先搜索当前【班级】BJ、【星期】I(for循环)、【节次】J(for循环)、【教师姓名】为空的记录。必须找到。
2、再搜索【星期】I(for循环)、【节次】J(for循环)、【教师姓名】等于当前【教师姓名】XM的记录。必须没找到。
(3)教师在一个班的每天排课节数<=周课时/5天的最大整数
这个问题实际上在第一个问题的解答中已经解决,即通过【优先顺序】解决。
[此贴子已经被作者于2020/9/15 13:41:01编辑过]