0

总体规划

获取我的班级信息以自动优化和选择我的大学课程时间表

整体算法

  1. 使用其 Enterprise Sign On Engine 登录名登录网站
  2. 查找我当前的学期及其相关科目(预设置)
  3. 导航到右侧页面并获取每个相关主题的数据(讲座、实践和研讨会时间)
  4. 剥离无用信息的数据
  5. 将彼此接近的班级排名较高,随机日期的班级排名较低
  6. 解决最佳时间表解决方案
  7. 给我输出一份BEST CASE信息的详细清单
  8. 向我输出可能的类信息的详细列表(例如,有些可能是完整的)
  9. 获取程序以自动选择最佳课程
  10. 继续检查,看看我们是否可以达到 7。

6 详细 获取所有课程,以讲座为重点,排名最高(每个科目只有一个),并尝试围绕该课程安排课程。

问题

任何人都可以向我提供可能与希望用 python 编写的类似内容的链接吗?关于 6.:您建议将这些信息存储在什么数据结构中?每个uniclass对象的链表在哪里?我应该将所有信息写入文本文件吗?

我正在考虑将 uniclass 设置为以下属性:

  • 学科
  • 时间
  • 类型
  • 老师

我在 Python 方面几乎没有经验,并认为这将是一个很好的学习项目,可以尝试完成。感谢您提供的任何帮助和链接,以帮助我开始,打开编辑以适当地标记或任何必要的(不知道这属于编程和 python 之外的什么?)

编辑:无法真正获得我想要的这个 SO 帖子的正确格式><

4

3 回答 3

2

取决于您计划在#6 上走多远,以及数据集有多大,这可能不是微不足道的;它对我来说肯定带有 NP-hard 全局优化的味道......

尽管如此,如果您谈论的是数十个(而不是数百个)节点,那么一个相当愚蠢的算法应该可以提供足够好的性能。

所以,你有两个限制:

  1. 按分数对班级进行总排序;这是灵活的。
  2. 阶级冲突;这不灵活。

我所说的灵活是指您可以去更多间隔的课程(分数较低),但您不能同时上两个课程。有趣的是,得分和冲突之间可能存在正相关关系。得分较高的班级更有可能发生冲突。

我第一次通过算法:

selected_classes = []
classes = sorted(classes, key=lambda c: c.score)
for clas in classes:
    if not clas.clashes_with(selected_classes):
        selected_classes.append(clas)

如果课程长度不均匀、从奇怪的时间开始等等,解决冲突可能会很尴尬。将开始和结束时间映射为时间“块”的简化表示(每 15 分钟/30 分钟或任何您需要的时间)将使查找不同类的开始和结束之间的重叠变得更容易。

于 2009-01-07T10:29:08.360 回答
0

BeautifulSoup在这里被提到过几次,例如get-list-of-xml-attribute-values-in-python

Beautiful Soup 是一个 Python HTML/XML 解析器,专为屏幕抓取等快速周转项目而设计。三个功能使其功能强大:

  1. 如果你给它错误的标记,Beautiful Soup 不会窒息。它会生成一个解析树,其意义与您的原始文档大致相同。这通常足以收集您需要的数据并逃跑。
  2. Beautiful Soup 提供了一些用于导航、搜索和修改解析树的简单方法和 Pythonic 习惯用法:用于剖析文档和提取所需内容的工具包。您不必为每个应用程序创建自定义解析器。
  3. Beautiful Soup 自动将传入文档转换为 Unicode,将传出文档自动转换为 UTF-8。您不必考虑编码,除非文档未指定编码并且 Beautiful Soup 无法自动检测编码。然后你只需要指定原始编码。

Beautiful Soup 解析你给它的任何东西,并为你做树遍历的东西。您可以告诉它“查找所有链接”,或“查找类 externalLink 的所有链接”,或“查找所有 url 匹配“foo.com”的链接,或“查找带有粗体文本的表格标题,然后给出我那条短信。”

曾经锁定在设计不佳的网站中的宝贵数据现在触手可及。使用 Beautiful Soup 需要数小时才能完成的项目只需几分钟。

于 2009-01-07T09:39:56.103 回答
0

这里有太多的问题。

请将其分解为主题领域,并针对每个主题提出具体问题。请专注于其中一个有具体问题的问题。请定义您的术语:“最佳”并不意味着没有一些特定的衡量标准来优化。

这是我认为我在您的主题列表中看到的内容。

  1. 抓取 HTML

    1 使用其企业登录引擎登录名登录网站

    2 查找我当前的学期及其相关科目(预设置)

    3 导航到右侧页面并获取每个相关主题的数据(讲座、实践和研讨会时间)

    4 剥离无用信息的数据

  2. 一些算法基于“彼此更接近”来“排名”以寻找“最佳时间”。由于这些术语未定义,因此几乎不可能对此提供任何帮助。

    5 将彼此接近的班级排名较高,随机日期的班级排名较低

    6 解决最佳时间表解决方案

  3. 输出一些东西。

    7 给我输出一份BEST CASE信息的详细列表

    8 向我输出可能的类信息的详细列表(例如,有些可能是完整的)

  4. 优化某些东西,寻找“最佳”。另一个无法定义的术语。

    9 让程序自动选择最好的课程

    10 继续检查,看看我们是否能达到 7。

顺便说一句,Python 有“列表”。他们是否“链接”并没有真正参与其中。

于 2009-01-07T12:09:58.797 回答