zhongxinghong / PKUAutoElective

北大选课网补退选阶段自动选课小工具
MIT License
668 stars 231 forks source link

多门课可选时似乎不检查mutex #25

Closed Gompyn closed 4 years ago

Gompyn commented 4 years ago

Check List

Version / Environment

System infomation: Ubuntu 18.04.4 LTS Python version: Python 3.8.1 AutoElective version: 3.0.6

Config

已经修改过, 无法复原. 大体上是备选项中有很多体育课, 并将它们添加到同一mutex下, 而且只有这一mutex下有这些课.

Issue Description

What

在同时发现有多门体育课可选时, 在一个选课成功后仍继续试图选择其余课程.

Console Log

这是这一周期的输出. 全部输出我有存log, 如果需要可以提供, 但有971M大小.

Reproduce

config.ini中添加多个course, 并将它们添加到同一mutex下, 若它们同时可选, 则可能同时选上.

zhongxinghong commented 4 years ago

噢... 我的设计是,假设多门互斥的课在一个周期里同时有名额的概率是很小的视这种情况不存在,因此这个mutex规则只在每回合开始的时候有效,根据当前下载到的课程列表来判断有几个课已经选上,然后对应检查mutexes来判断哪些课可以被忽略,经过过滤后去构造一个tasks,然后根据这个queue提交选课。这个tasks一旦构造出来以后就不会再提交过程中动态更新了。全部提交结束后,下回合根据选课网返回的结果判断你现在选上了哪些课,然后再进行忽略。所以mutexes不会根据你这回合开始提交选课后已经选上的课动态更新,你这个情况我确定是没有考虑到 ... 我可以考虑一下修这个问题 :(

zhongxinghong commented 4 years ago

我刚刚更新了一版 v3.0.7,现在应该可以正确应对这个情况了,可以试一下看看 :)