Дискретная оптимизация

Материал из Wiki - Факультет компьютерных наук
Перейти к: навигация, поиск

О курсе

Курс читается для студентов 3-го курса ПМИ ФКН ВШЭ в 4 модуле.

Лектор: Игнат Колесниченко

Лекции ПМИ проходят по вторникам, 13:40 - 15:00, ауд. 622.

Полезные ссылки

Канал в телеграм для объявлений: https://t.me/joinchat/AAAAAFD1-ZdchZS1FoOduA

Таблица с оценками: TODO

Оставить отзыв на курс: TODO

Семинары

Группа Преподаватель Связь Страница Расписание
МОП 151 Лахтанов Иван telegram: @ivan_lakhtanov  ? Пятница 15:10 - 16:30
МОП 152 Колесниченко Игнат ignat1990@gmail.com http://wiki.cs.hse.ru/%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Ignat Вторник 15.10-16.30
АПР 153 Суханов Николай -  ?  ?
АДИС 154 Савченко Руслан -  ?  ?
РС 155 Ахмедов Максим telegram: @max_akhmedov, http://t.me/discrete_opt_155  ?  ?
ТИ 156 Саакян Вильям telegram: @wilwell  ? Вторник 10:30 - 11:50


Консультации

Консультации с преподавателями и учебными ассистентами (если иное не оговорено на странице семинаров конкретной группы) по курсу проводятся по предварительной договорённости ввиду невостребованности регулярных консультаций.

Правила выставления оценок

В курсе предусмотрено 3 домашних задания – 2 практических и 1 теоретическое. За каждое домашнее задание выставляется оценка по 10-бальной шкале, правила получения оценки будут оговариваться при публикации домашнего задания.

Итоговая оценка вычисляется исходя из оценок за домашние задания

Oитоговая = round(0.33 * OДЗ1 + 0.33 * ОДЗ2 + 0.34 * ОДЗ3), где round – это функция арифметического округления.

Также на семинарах иногда будут выдаваться небольшие домашние задания. Их решение будет засчитываться как доп. баллы в домашних заданиях (доп. баллы к исходной оценке в ДЗ, а не к результирующей).

Правила сдачи заданий

Дедлайны по всем домашним заданиям являются жёсткими, то есть после срока работы не принимаются.

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

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

Лекции

Лекция 1 (3 апреля). Метод Branch&Bound решения оптимизационных задач. Задача о рюкзаке: 2-приближение, динамическое программирование по весам и по стоимостям.

Лекция 2 (10 апреля). Задача о рюкзаке: PTAS с временем работы (n^(1+1/eps)), FPTAS с временем работы O(n^3 * 1 /eps). Напоминание об переменных нежесткости и условиях дополняющей нежесткости.

Лекция 3 (17 апреля). Методика Primal-Dual построения решений для комбинаторных задач. Применение Primal-Dual к задаче о поиске кратчайших путей.

Лекция 4 (24 апреля). Задача о взвешенном паросочетании в двудольном графе, применение Primal-Dual для её решения.

Лекция 5 (15 мая). Поиск паросочетаний в недвудольных графах. Алгоритм Эдмонса. Минимаксная формула для размера паросочетания в произвольном графе (формула Татта-Бержа).

Лекция 6 (22 мая). Симплекс-метод, геометрическая интерпретация, базисные перменные и эффективная реализация (табличный симплекс-метод).

Лекция 7 (29 мая). Метод эллипсоидов, решение выпуклых задач оптимизации с помощью метода отделяющей плоскости. Задача о разрезе максимального веса, 0.5-приближение с помощью дерандомизации. Построение 0.878-приближения с помощью сведения к задаче полуопределенного программирования.

Лекция 8 (5 июня). Метод локального поиска. Применение его к задаче о ферзях. Применение к задаче о раскраске графа. Алгоритм sqrt(n) раскраски 3-раскрашиваемого графа.

Семинары

Семинар 1 (2-6 апреля). Напоминание о линейном и целочисленном программирование. Построение двойственных программ. Задача о поиске максимального паросочетания в двудольном графе.

Семинар 2 (9-13 апреля).

Семинар 3 (16-20 апреля).

Семинар 4 (23-24 апреля). Задача Set-Cover. Решение с помощью округления ЛП. Примерение Primal-Dual для построение f-приближения. Вероятностный способ округления для построения log(n)-приближения.

Семинар 5 (14-18 мая). Разложение Эдмонса-Галлаи, его полученеи из алгоритмы Эдмонса и его свойства. Задача о существовании совершенного паросочения в 3-регулярном графе без мостов.

Семинар 6 (21-25 мая). Задача о поиске упаковки вершинно-непересекающихся T-путей, минимаксная формула Галлаи. Связь с задачей о паросочетаниях.

Семинар 7 (28 мая - 1 июня). Программирование в ограничениях (CP), базовая концепция. Примеры решения задач с помощью CP: задача о ферзях, задача о магической последовательности, задача о сборке автомобилей.

Семинар 8 (4-8 июня). Задача коммивояжера. Алгоритмы для 2 и 1.5 приближений. Алгоритмы локального поиска в данной задаче: 2-OPT, 3-OPT, эвристика Ли-Кернигана.


Домашние задания

Домашнее задание 1 (практика)

Дедлайн: 14 мая 23:59

В домашнем задании требуется решить три практических задачи, архив с условием: https://yadi.sk/d/t9yrhBy-3UiVgA


Контест для сдачи задач: https://contest.yandex.ru/contest/8104/

Грейдер для задачи о рюкзаке: http://akhmedov.me:50010/knapsack


Задание следует отправлять на почту discret.opt.hse@gmail.com. В заголовке письма с решением указывайте "[Название группы] ФИО Домашнее задание 1". В случае вопроса добавляйте в заголовок письма слово "вопрос".

Критерий оценки задачи о рюкзаке

Оценивание производилось на закрытых тестах. Оценка ставится в зависимости от отличия вашего решения и оптимального решения. Также в случае отсутствия отчета или плохо написанного отчета семинарист вправе снять еще до 1 балла.


Суммарная ошибка 0 – 6 баллов.

Суммарная ошибка <200 – 5 баллов.

Суммарная ошибка <1500 – 4 балла.

Суммарная ошибка <5000 – 3 балла.

Суммарная ошибка <15000 – 2 балла.

Суммарная ошибка <21000 – 1 балл.


Последняя граница выбрана исходя из того, что стандартное жадное решение имеет ошибку примерно 20800)

Приватные тесты: https://yadi.sk/d/1n9vMPTi3XLFiM

Домашнее задание 2 (теория)

Дедлайн: 2 июня 23:59

В домашнем задании требуется решить 5 теоретических задач, условия: https://yadi.sk/i/o4gtEhpA3VywLM


В качестве решения в каждой задачи должно быть подробное доказательство требуемого факта/описание работы алгоритма/структуры данных с оценкой времени его работы. При выполнении этого домашнего задания можно использовать все алгоритмы и теоремы, которые были разобраны и доказаны на лекциях и семинарах. Однако, следует подробно объяснить к чему и как они применяются.

Решения настоятельно рекомендуется записывать в latex-е.


Оценка будет выставлять по формуле min(10, баллы за решение + баллы за семинар 1 + баллы за семинар 2)


Задание следует отправлять на почту discret.opt.hse@gmail.com. В заголовке письма с решением указывайте "[Название группы] ФИО Домашнее задание 2". В случае вопроса добавляйте в заголовок письма слово "вопрос".

Домашнее задание 3 (практика)

Дедлайн: 25 июня 23:59

В домашнем задании требуется решить три практических задачи, архив с условием: https://yadi.sk/d/7fEE0CuN3Xk5bJ

Контест для сдачи задач: https://contest.yandex.ru/contest/8422

Оценка будет выставлять по формуле min(10, баллы за решение)

Задание следует отправлять на почту discret.opt.hse@gmail.com. В заголовке письма с решением указывайте "[Название группы] ФИО Домашнее задание 3". В случае вопроса добавляйте в заголовок письма слово "вопрос".

Пересдача

Пересдачи будут проходить 4-го и 7-го сентября. 4-го сентября пересдача будет в аудитории Кэмбридж в ШАДе в 10.00 (с 09.55 до 10.05 мы будем ждать вас у проходной). 7-го сентября пересдача будет в аудитории 435 на Кончовском в 10.00.

Правила проведения пересдачи и программа экзамена поступны тут: https://yadi.sk/d/P2NVdCGy3Zrkh9

Практика. Условие задачи и открытые тесты доступно по следующей ссылке: https://yadi.sk/d/E_h4glrb3acMWJ

Контест доступен по следующей ссылке: https://contest.yandex.ru/contest/8801/problems/

Решения принимаются до 23:59:59 2 сентября вне зависимости от даты пересдачи, на которую приходит студент. Несданное к дедлайну решение практическое части оценивается в 0 баллов.

Комиссия

Состоится 27 сентября в 10.00 в аудитории ауд.322. Формат аналогичен теоретической части на пересдаче.

Полезные материалы

Рекомендуемая литература

 * "B.Korte, J.Vygen – Combinatorial optimization" – подробная книга по теории комбинаторной оптимизации (http://www.or.uni-bonn.de/~vygen/co.html).
 * "V. Vazirani – Approximation Algorithms" – одна из лучших книг по приближенным алгоритмам.
 * "H. Papadimitriou – Combinatorial Optimization: Algorithms and Complexity" – классический учебник по комбинаторной оптимизации. 
 * "Where are the hard knapsack problems?" [David Pisinger] - интересные рассуждения по поводу того, как генерировать сложные тесты для задачи о рюкзаке.
 * ["Heuristics for the Traveling Salesman Problem" [Christian Nilsson]]  - краткое но насыщенное описание эвристик для задачи о коммивояжёре.
 * "Handbook of Constraint Programming" [F. Rossi, P. van Beek and T. Walsh] - справочник по программированию в ограничениях.
 * "Handbook of Metaheuristics" [Michel Gendreau, Jean-Yves Potvin] - справочник с описанием эвристических алгоритмов оптимизации.

Полезные ссылки

 * [Визуализатор маршрута коммивояжёра] (вершины подаются в 0-индексации)
 * Курс по дискретной оптимизации на [Coursera]. Содержит хорошие видео-лекции по Constraint Programming и Local Search.

Библиотеки для решения задач оптимизации

 *  [Google Optimization Tools] (C++, Python, Java, C#) - фреймворк для решения задач дискретной оптимизаций. Позволяет программировать в парадигме Constraint Programming. Содержит инструменты для решения задач линейного программирования. ([Более полная документация])
 * [Numberjack] (Python)
 * [Choco] (Java)
 * [Gecode] (C++)
 * [MiniZinc] (MiniZinc) - Довольно выразительный язык для CP. Есть ((http://www.hakank.org/minizinc/ много примеров)).