Курс «Эффективные алгоритмы» для МФТИ

Материал из DISCOPAL
Перейти к: навигация, поиск




Курс лекций «Эффективные алгоритмы» для 6 курса МФТИ.




Преподаватель
С.А. Фомин


Для ФУПМов 6 курса, желающих записаться на курс по выбору «Эффективные алгоритмы», нужно:

  • Зарегистрироваться здесь. Залогинится.
  • Зайти на страницу настроек, указать свой email и подтвердить его.
  • На своей личной странице (это не страница настроек, это то, что сверху слева, с иконкой человечка), написать хотя бы ФИО и группу.
    • Боже, как много народу с рассеянным вниманием уже до сюда не дочитывает.
  • Присоединится к телеграмм-группе  → все, два месяца прошло, набор закрыт.
  • Отметится в этом голосовании:

+ Зарегистрируйтесь на «лабе»

Записываемся на курс «Advanced Algorithms-2024»?

Да33
100%
ADanilenko, Akazikov, AlferovIS, Eavladimirov, EjenY, Evgeny Poturilo, Evvnes, Gallyamov.im, Glbmkrv, Isypovi, Izwin is, Kdzelenova, Korchagin sergey, KoshelevEA, LunevLA, Maratkhusainov, MariaZharova, Markvernikov, Miroshnichenko, MordashovAP, NikitaAkshaev, Nikitashapovalov, RomanFilonov, Seryj09, Solovev, Ssergomol, Ssyrovatkin, Tiniakov.ad, Vladyur, VoyakinaES, Yaroslav Klimov М05-304Б, Ydanyok, Зайченкова Екатерина
Нет0
0%

Вы должны войти в систему, чтобы участвовать в этом голосовании.

  • Первое установочное занятие будет 6 сентября, в 18-30 в 907 КПМ


Формат flipped classroom — т.е. по существующим материалам не будем повторять лекции, встречаться будем только для семинаров, и активной работы (решение задач, разбор сложных моментов, что-нибудь интересное придумаю) по заранее изученным материалам.


Вопросы пишите на почту, или задавайте в группе.



Успеваемость зарегистрированных студентов

В списке вы можете видеть разные цифры, отражающие вашу активность по темам курса. В конце — некоторые суммарные метрики, рассчитанные по волшебным формулам.

Если вы в зеленой группе — вы кандидат на «отлично автоматом».


Блок 1 — Алгоритмическая практика

2021-10-15 Practical Block 2021-11-03 14-27-56 image0.png

Концептуально:

2021-10-15 Practical Block 2021-11-03 15-02-30 image0.png

2021-10-15 Practical Block 2021-11-03 14-24-09 image0.png

(Их там 119)

    • Не нужно брать десятки задач на себя сразу, и освобождайте то, что не получается.
  • Решенное
    • Ну смотрите, как оформлено в прошлые годы
    • Решение на подстранице вашей личной страницы
      • Вики-ссылка на задачу
      • Python-код в «<source lang="python"></source>»
      • Метка «{{checkme}}», когда решите.
2021-10-15 Practical Block 2021-11-03 14-22-47 image0.png

(Их там 19)


  • Как легче решать Python
    • Загрузка данных
    • Выбирайте более свежий CPython или PyPy.

Блок 2 — «Бизнес-моделирование»

Моделирование труднорешаемых задач и решение из промышленными солверами. Концептуально:

Уровень 1
«потренироваться на кошках» — решите пару уже решенных задач, постарайтесь оформлять максимально компактно и понятно:
  • используйте хелперы
  • выделите построение модели в функцию от параметров
  • максимально понятные русскоязычные атрибуты модели.
  • оформляем свои ноутбуки в подпапке «homeworks/2024-autumn», заведите там подпапку по вашему логину, желательно без пробелов. Там же можно сохранять какие-то версии обучающих ноутбуков, если хотите с ними жестко поиграть.
  • сравните с решением, если вроде решение совпадает (или вы уверены, нашли ошибку и решили более правильно) — пинганите меня на ревью.

Цена — 1 балла за две задачи, но это обязательно, чтобы перейти к остальным квестам этого блока. Если найдете более эффективную постановку — например, раньше не решалось быстро через CBC, а теперь решается, ну или раза в два быстрее стало с SCIP, и т.п. — 1-2 балла.

Бонусный квест
который можно совместить с обучением — сделать визуализацию (matplotlib-networkx-seaborn-d3js… что хотите, на худой конец просто таблицей), для какой-нибудь решенной задачи, как в

… если ее нет. Это креативная задача, при этом потребует понимания решенной задачи — балл за хорошую визуализацию. Цена: 1-2 балла (ну насколько хорошая будет визуализация)


Уровень 2
решение нерешенной задачи:
  • Надо решить одну! нерешенную задачу, но очень желательно сделать это красиво!
  • Воркфлоу «взятия задачи» аналогичен блоку «Практикуемся_В_Алгоритмах»
  • Только здесь, в вики, на «странице решения» обсуждаем постановку (если что-то непонятно), а решением будет юпитер-ноутбук подпапке «homework/2024/autumn» на алгоритмах.
    • Если все совсем шикарно — бонусные очки (если задача окажется сложной — тоже).
  • Выбирайте задачи из Открытые бизнес-задачи, переходите к редактированию по «Беру…» →
  • Зарезервированные задачи убираются в Зарезервированные практические задачи

Цена: 1-2 балла (насколько хорошо оформленно, насколько хорошая будет визуализация)

  • Можно решать дополнительные задачи (к первой задаче), но наверно всего больше двух пока не надо (нерешенные задачи — ценный ресурс, я его экономлю). Старайтесь сделать качественно, тогда можно будет решать больше.
Уровень 3
записать видеоролик по хорошо решенной задаче (если она сдана, отработаны претензии к оформлению и все такое). Используйте OBS


Цена: 1 балл, но постарайтесь.

Для истории, презентация от 2022 года: 📺 видео 📺

Блок 3 — Моделирование труднорешаемых задач

Обязательно посмотрите

Цели: для осеннего курса 2023, где собрались скорее заинтересованные практикой, чем сложностью задач, можно

  • Сделать одну задачу целиком (визуализация, постановка в ЦЛП и сведение от 3SAT)
  • Или пару задач «поверхностно» — постановка + визуализация (это легкая часть), без части про сведение от 3SAT и тестирования (это может быть очень головоломно).
  • Можно сделать и больше, такой же блок, может заменить решение задачи из Моделирование бизнес-задач, если те почему-то не понравились.
  • Может можно будет даже сделать и меньше, если будет сделано качественно (красивая визуализация, или сложная задача и т.п) — т.е. не надо гнать количество, лучше сделать хорошо и красиво.
  • Разумеется, можно использовать все, что найдете в интернете (код, статьи, книги), или подскажут нейросети (но они обычно подсказывают неверно).


Проблема текущих подходов.

Моделирование труднорешаемых задач 2023-04-24 14-45-02 image0.png

Проблема текущих подходов к преподаванию вычислительной сложности и труднорешаемых задач:

  • «ненужная заумь для ботанов»
  • «всякой фигни как матло у нас нет, у нас проектный подход»© (день открытых дверей МФТИ).
  • множество книг, слайдов, видео и т.п. — но все как правило перепев «ГД», на досках или одноразовых веселых видео.
    • но не «живые модели»!

Результат .

  • Нет навыков проверяемых доказательств
  • Не получаются навыки работы с труднорешаемыми задачами.
    • Мучать «эвристики» и «нейросети» не приходя в сознание.
      • «Какая у вас задача» — ну мы тут «GAN» сети пробовали, вот теперь трансформеры… — Задача то какая?


Что делать?.

  • Научится формализованно формулировать
    • ЦЛП
    • 3SAT
  • Использовать решатели
    • ЦЛП (cbc, coin, SCIP, CPLEX, GUROBI, COPT, MIPT…)
    • SAT (см. SAT-Races [3]).

Тогда можно .

  • Часто решить задачу для реальных данных сходу
    • Или покрутить постановку чтобы задача решалась (релаксация бизнес-ограничений).
  • Начать тестировать
    • Алгоритмы полиномиальные в среднем
    • Приближенные алгоритмы с гарантией точности
    • Вероятностные алгоритмы
    • Эвристики
  • Доказать труднорешаемость
    • Конструктивное сведение кодом, тестирование
    • Потом статья с объяснением.

Конструктивные алгоритмические доказательства .

Что вы получите .


  • → Бизнес-аналитик-алгоритмист! (нарасхват!)
  • → Курсовые-дипломы-статьи в JN
    • В любой ситуации

С чем работаем .

  • Настоящие классические задачи в одном месте (ГД+ВК+…)
    • Open Classic Hard Problems
      • Не пугайтесь, вам достаточно изучить одну задачу… но можно и все.
        • Не «книга, толщиной защищающая от прочтения»
  • Там (см. беджики-ссылки)
    • Постановки
    • Наброски ноутбуков для всех задач в Lab17
    • Частично готовая модель
        • тестовые данные (генератор)
        • визуализация
        • сведение к ЦЛП через Pyomo
        • сведение с 3SAT к задаче
        • вероятностное тестирование
        • видео с разьяснениями

Начать с простого .

Ваш квест .

  • Pyomo-сведение к ЦЛП → PyomoLogo.png — есть Pyomo-формулировка для ЦЛП., Data-vis-logo.png — есть тестовые данные и визуализация.
  • 3SAT-сведение к задаче → Npc-reduction-python-logo.png — есть сведение на Python NP-полной задачи к данной.
  • Вероятностное тестирование → Yes-you-can-icon.png Можно доработать — сделать Вероятностное тестирование NPC-сведения!
  • Можно
    • все для одной задачи,
    • можно для разных (исправление ошибки или улучшение — ОК)
Желательно напрямую с 3SAT .

Без классического дерева сведения (но можно копировать функции сведения тех задач).

Моделирование труднорешаемых задач 2023-04-27 00-05-30 image0.png

Как с этим работаем .

  • Выбирайте задачи из Open Classic Hard Problems, переходите к редактированию по «Беру…» →
    • Зарезервированные задачи просто помечаются в том же списке, для простоты.
      • Если видите, что зарезервировано кем-то в прошлом году — можно снять чужое резервирование, и поставить свое.
    • Воркфлоу «взятия задачи» аналогичен блоку «Практикуемся_В_Алгоритмах»
    • Только здесь, в вики, на «странице решения» обсуждаем постановку (если что-то непонятно), а решением будет юпитер-ноутбук в «лаборатории»..
  • Текущая лаборатория
    • Lab22
    • Lab17 заболела (и может сдохла).
  • Как поотлаживаться локально через VSCode — потом.

Еще раз обо всем этом на одном слайде .

Файл:Idea-hard-problems-course.svg

Картинка в полный размер

Блок 4 — Теоретический

Необязательно (если вы набрали нужные баллы другими блоками), но может быть полезно, у кого аллергия к коду, Pyomo, а хочется что-то читать и решать, как в старые добрые времена. Тут буду упражнения, и простые темы, по которым будут тесты.

ТеорУпражнения

Осенью 2023 достаточно 4 задач из двух тем.

  • Нужно быть залогиненным
    • Скрыто из интернета
  • Надо решить N задач из M разных разделов.
  • Либо одну бонусную задачу — считаем, что ее решение закрывает квест.
  • Выбирайте задачи из Open Exercises, переходите к редактированию по «Беру…»
    • помечайте их как {{reserve-task|~~~~~}}
    • Решение на подстранице вашей личной страницы
      • Вики-ссылка на задачу
      • Решение — можно использовать текст, латех целиком внутри тега «latex», или просто вставки математики внутри тега «m»
      • На худой конец — очень аккуратно оформить на листочке, сфотографировать, загрузить файлы (разберетесь).
      • Метка «{{checkme}}», когда решите.
      • Внизу вставка всего этого по клику →
  • Они попадут в Категория:На проверку
  • Все как обычно в наших квестах.




ТеорТемы

Тут отобраны только детские темы про алгоритмы, никакой сложности, будем проверять, то что вы их читали тестами на созвонах — и так, можно будет набрать «переключающий балл» (отберем персентилями по сумме всех результатов). Плюс можно еще балл за задачи, ну или как-то вместе может они наберут балл, или как-то учтется в 10-бальной оценке.

Замечания по каждой презентации можно (и нужно) писать на вкладку «Обсуждение», для соответствующего PDF-файла.


Материалы

Наверно не пригодятся для курса 2022 года.

Книга

Специальная верстка для чтения с ноутбуков и КПК:

  • альбомная ориентация
  • крупные беззасечные шрифты

Кому не нравится — пишите обоснованные протесты (почему, конструктивные предложения).

Пишите замечания по содержимому — про проблемы с версткой и библиографией не писать, все там только в процессе.

File:Book-advanced-algorithms.pdf

Book-advanced-algorithms.pdf

Смешное — реакция «обычных программистов»


Примечания и ссылки

  • Рекомендуется прочитать хотя бы первые лекции по введению в Python и научные вычисления.

Полезная сопутствующая литература по курсу.



  1. Особенно для физтехов, которые скипают теорию и не приходя в сознание смотрят «как решать»

[ Хронологический вид ]Комментарии

Можно ввести какое-то ограничение на количество забронированных задач? Люди бронируют по 10 задач и за неделю не делают ни одной из них.

Да, я учел, ваш коммент, стал «срубать блокировки» старше 5 дней. Ограничение по количеству увы, в таком простом ворфлоу сделать сложно, остается рассчитывать на разумность и совесть (что не залочит все задачи) участников.

Войдите, чтобы комментировать.