Автоматизированное расписание занятий оптимизирует гусеничный ход? - PullRequest
0 голосов
/ 07 января 2009

Общий план

Получить информацию о моем классе для автоматической оптимизации и выбрать расписание занятий в универе

Общий алгоритм

  1. Войдите на сайт, используя его Enterprise Sign On Engine логин
  2. Найдите мой текущий семестр и его связанные предметы (предварительная настройка)
  3. Перейдите на нужную страницу и получите данные от каждого связанного предмет (лекция, практическая и время семинара)
  4. лишить данные бесполезных информация
  5. Ранжируйте классы, которые ближе друг другу выше, те на случайные дни ниже
  6. Решите лучшее решение по расписанию
  7. Выведите мне подробный список ЛУЧШИЙ СЛУЧАЙ Информация
  8. Выведите мне подробный список возможная информация о классе (некоторые например, может быть заполнен)
  9. Получить программу для выбора лучшего занятия автоматически
  10. Продолжайте проверять, можем ли мы достичь 7.

6 в деталях Получить все классы, используя лекции в качестве точки фокусировки, будет иметь самый высокий рейтинг (только один на предмет), и попытаться организовать классы вокруг этого.

Вопросы

Может кто-нибудь предоставить мне ссылки на что-то, что может быть похоже на это, мы надеемся, написано на python? В отношении 6 .: в какой структуре данных вы бы порекомендовали хранить эту информацию? Связанный список, где каждый объект uniclass? Должен ли я записать всю информацию в текстовый файл?

Я думаю, что Uniclass будет настроен следующим образом атрибуты:

  • Тема
  • место
  • Время
  • Тип
  • Учитель

У меня нет опыта работы с Python, и я подумал, что это будет хороший учебный проект, чтобы попытаться выполнить его. Спасибо за любую помощь и ссылки, предоставленные, чтобы помочь мне начать, открыты для редактирования, чтобы пометить соответствующим образом или что когда-либо необходимо (не уверен, что это подпадает под другие, кроме программирования и Python?)

РЕДАКТИРОВАТЬ: не могу получить правильное форматирование, которое я хочу для этого ТАК сообщения> <</p>

Ответы [ 3 ]

2 голосов
/ 07 января 2009

В зависимости от того, как далеко вы планируете взять # 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 минут или все, что вам нужно) облегчит поиск совпадений между началом и концом различных классов.

0 голосов
/ 07 января 2009

Здесь слишком много вопросов.

Пожалуйста, разбейте это на предметные области и задайте конкретные вопросы по каждому предмету. Пожалуйста, сосредоточьтесь на одном из них с конкретными вопросами. Пожалуйста, определите ваши термины: «лучший» ничего не значит без какого-либо конкретного измерения для оптимизации.

Вот что я вижу в вашем списке тем.

  1. Соскоб HTML

    1 Вход на веб-сайт с использованием входа в систему Enterprise Sign On Engine

    2 Найти мой текущий семестр и связанные с ним предметы (предварительная настройка)

    3 Перейдите на нужную страницу и получите данные по каждому связанному предмету (время лекций, практических занятий и семинаров)

    4 Убрать данные бесполезной информации

  2. Какой-то алгоритм «ранжирования» основан на «сближении друг с другом» в поисках «лучшего времени». Поскольку эти термины не определены, почти невозможно оказать какую-либо помощь в этом.

    5 Ранжируйте классы, которые ближе друг к другу, а в случайные дни - выше

    6 Решите лучшее решение по расписанию

  3. Вывести что-нибудь.

    7 Выведите мне подробный список информации о ЛУЧШЕМ СЛУЧАЕ

    8 Выведите мне подробный список возможной информации о классе (например, некоторые могут быть полными)

  4. Оптимизируйте что-то, ищите «лучшее» Еще один неопределимый термин.

    9 Получить программу для автоматического выбора лучших классов

    10 Продолжайте проверять, можем ли мы достичь 7.

Кстати, Python имеет " списков ". Являются ли они «связанными», на самом деле это не касается.

0 голосов
/ 07 января 2009

BeautifulSoup упоминался здесь несколько раз, например, get-list-of-xml-attribute-values-in-python .

Beautiful Soup - это синтаксический анализатор Python HTML / XML, разработанный для быстрых поворотных проектов, таких как очистка экрана. Три функции делают его мощным:

  1. Прекрасный суп не захлебнется, если вы дадите ему плохую разметку. Это дает дерево разбора, которое имеет примерно такой же смысл, как и ваш исходный документ. Обычно этого достаточно, чтобы собрать нужные данные и убежать.
  2. Beautiful Soup предоставляет несколько простых методов и Pythonic идиом для навигации, поиска и изменения дерева разбора: инструментарий для разбора документа и извлечения того, что вам нужно. Вам не нужно создавать собственный анализатор для каждого приложения.
  3. Beautiful Soup автоматически конвертирует входящие документы в Unicode и исходящие документы в UTF-8. Вам не нужно думать о кодировках, если только в документе не указана кодировка, а Beautiful Soup не может ее автоматически определить. Тогда вам просто нужно указать оригинальную кодировку.

Beautiful Soup анализирует все, что вы ему даете, и выполняет обход дерева для вас. Вы можете сказать ему «Найти все ссылки», или «Найти все ссылки класса externalLink», или «Найти все ссылки, URL-адреса которых соответствуют« foo.com », или« Найти заголовок таблицы, в котором выделен жирный текст, а затем дать мне этот текст. "

Ценные данные, которые когда-то были заблокированы на плохо спроектированных веб-сайтах, теперь доступны вам. Проекты, которые заняли бы часы, заняли всего несколько минут с Beautiful Soup.

...