zhongxinghong/PKUAutoElective

建议增加一个符合条件自动退课的功能

MapleCatalpa opened this issue · 14 comments

有时候已选上的课是备选方案,需要选同名其他班课程或者退掉某门课程才能符合学分限制,因此建议增加一个某课程班级可选时先退掉某门课程再选该门课程的功能

此外,有时同时要选多门同名课,可能也需要一个课程组选课功能,选上该组任意课程即视为完成该组的选课

其实有人跟我提过这个想法,但我个人觉得退课那一下是有一定风险的(可能有几百毫秒的间隔),有点不大敢做... 有一些热门的课,根本就不知道有多少个刷课机在盯着,我怕给人家把好不容易选上的课给退了,那就比较尴尬了 :( 而且还考虑到校园网有的时候会有一些奇怪的bug和偶发的网络不畅 ...

组合选课我觉得其实有很多要考虑的地方,比如整个组是否真正都是全部可选的,组与组之间如果有冲突怎样抉择,组内课与其他课有冲突怎样抉择,然后整个调度系统要写好点可能会很复杂,然后可能也不好测试 ...

比如我随便举个例子,有两个组 (abc) (def) 假如 (ad) (be) (cf) 互斥,然后你现在选上了 aef 现在出了个 c 可选,究竟选还是不选呢 ...

其实有人跟我提过这个想法,但我个人觉得退课那一下是有一定风险的(可能有几百毫秒的间隔),有点不大敢做... 有一些热门的课,根本就不知道有多少个刷课机在盯着,我怕给人家把好不容易选上的课给退了,那就比较尴尬了 :( 而且还考虑到校园网有的时候会有一些奇怪的bug和偶发的网络不畅 ...

关于这个风险,我认为应该交给用户去做权衡取舍(
因为很多时候备选方案其实没什么人去选,不是老师比较雷就是课比较雷
如果有人一定要冒这个风险去做,那只能说风险自负了

此外还可以增设一个补救措施,就是退课之后如果没选上就自动把退掉的这门课加到选课监听列表中

比如我随便举个例子,有两个组 (abc) (def) 假如 (ad) (be) (cf) 互斥,然后你现在选上了 aef 现在出了个 c 可选,究竟选还是不选呢 ...

不啊,我的意思是某甲课还有可以抵甲课的乙、丙等课都没有选上,需要刷课,而且用户认为这些课是无差异的,这时候只要选上了任何一门,就自动把同组的剩下几门都从监听列表中去除

如果说是组内无差异的话其实现在已经实现了,不过它是惰性校验的。刷课机只有在提交选择的时候才会确定是否真的能选上,假设你有abc无差异而且互斥,那么你选上任何一个课以后,另外两个课还会继续选,但是在提交后会被选课网拒绝,在这个时候这个课就会被忽略,以后就不会再监听了,这样其实也没有很大的代价

如果说是组内无差异的话其实现在已经实现了,不过它是惰性校验的。刷课机只有在提交选择的时候才会确定是否真的能选上,假设你有abc无差异而且互斥,那么你选上任何一个课以后,另外两个课还会继续选,但是在提交后会被选课网拒绝,在这个时候这个课就会被忽略,以后就不会再监听了,这样其实也没有很大的代价

明白了,看来这一条必要性不大(然而仍有课号时间不同但可互替的问题存在,不过这种情况还是比较少)

允许用户自定义课程互斥的规则确实是可以实现的,而且也不算非常复杂,但我最近不是很想改了 ... 可能我争取明年做一下吧 :)

另外,理想的情况是你有足够学分并且能把可互换的课全部选上,那其实更爽,你还可以纠结一下到底退那门课 :) 想想假如你现在手持 5 门通选课(x 退课这事情可比选课简单多了 ...

😄哈哈
可惜一个人就99个点和25(30)学分

没有错 :)

我已经在新的 v3.0.x 里添加了这个设计 :)

我想了解目前实现的mutex的具体语义是什么.
我把这个理解为同一mutex下选上一个后就不会选其余的, 但似乎不是这个含义.

查看log后发现是同时发现多门课程可以选择, 选择成功一门后似乎没有检查mutex.
这个bug提交于issue #25 .

我想了解目前实现的mutex的具体语义是什么.
我把这个理解为同一mutex下选上一个后就不会选其余的, 但似乎不是这个含义.

你这个理解没有错,但是我的过滤时机是下一回合 :( 你可以看一下我的详细解释