<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D0%B5%D1%80%D0%B0_%28%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%29</id>
	<title>Задача коммивояжера (проект) - История изменений</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikicshse.ru/index.php?action=history&amp;feed=atom&amp;title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D0%B5%D1%80%D0%B0_%28%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%29"/>
	<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D0%B5%D1%80%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;action=history"/>
	<updated>2026-06-06T17:07:38Z</updated>
	<subtitle>История изменений этой страницы в вики</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://www.wikicshse.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D0%B5%D1%80%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=2229&amp;oldid=prev</id>
		<title>imported&gt;Ira dolgaleva: Migrated current public revision from wiki.cs.hse.ru</title>
		<link rel="alternate" type="text/html" href="https://www.wikicshse.ru/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B8%D0%B2%D0%BE%D1%8F%D0%B6%D0%B5%D1%80%D0%B0_(%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82)&amp;diff=2229&amp;oldid=prev"/>
		<updated>2015-10-20T07:42:15Z</updated>

		<summary type="html">&lt;p&gt;Migrated current public revision from wiki.cs.hse.ru&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Карточка_проекта&lt;br /&gt;
|name=Задача коммивояжера &lt;br /&gt;
|mentor=Алексей Гусаков&lt;br /&gt;
|mentor_login={{URLENCODE:Gusakov|WIKI}}&lt;br /&gt;
|semester=Весна 2015&lt;br /&gt;
|course=1&lt;br /&gt;
|summer=&lt;br /&gt;
|categorize=yes&lt;br /&gt;
|is_archived=yes&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Что это за проект? ===&lt;br /&gt;
Задача коммивояжера заключается в отыскании самого выгодного маршрута, проходящего через заданные города с последующим возвратом в исходный город. Для этой простой задачи нет (и скорее всего не будет) решения, правильно работающего за полиномиальное время. Однако, существуют подходы, дающие неплохие практические результаты. Мы изучим два таких подхода: переборный и приближённый. В первом подходе изучим техники, позволяющие быстро находить правильное решение для 50-100 городов, во втором - быстро находить решение, которое доказуемо &amp;quot;не сильно&amp;quot; (в 1.5 раза) отличается от правильного. Результатом работы будет библиотека, реализующая один из двух подходов.&lt;br /&gt;
&lt;br /&gt;
=== Чему вы научитесь? ===&lt;br /&gt;
* Основам теории графов&lt;br /&gt;
* Основам приближённых алгоритмов&lt;br /&gt;
* Как использовать линейное программирование (и что это такое), чтобы оптимизировать перебор&lt;br /&gt;
* Писать код без ошибок (ну почти что)&lt;br /&gt;
* Визуализировать решение&lt;br /&gt;
&lt;br /&gt;
=== Какие начальные требования? ===&lt;br /&gt;
* Программирование на C/C++ (в рамках прослушанного курса)&lt;br /&gt;
* Желание разбираться в алгоритмах&lt;br /&gt;
&lt;br /&gt;
=== Какие будут использоваться технологии? ===&lt;br /&gt;
* Визуализация на python&lt;br /&gt;
* Библиотека Lemon для алгоритмов на графах&lt;br /&gt;
* gtest&lt;br /&gt;
&lt;br /&gt;
=== Темы вводных занятий ===&lt;br /&gt;
* Основы теории графов (что это такое, базовые алгоритмы: минимальное остовное дерево, Эйлеровы циклы)&lt;br /&gt;
* Приближённые алгоритмы, 2-оптимальное решение, паросочетания, 3/2-оптимальное решение&lt;br /&gt;
* Алгоритмы: перебор с возвратом, метод ветвей и границ, эвристики 2-opt и 3-opt, линейное программирование&lt;br /&gt;
&lt;br /&gt;
=== Направления развития ===&lt;br /&gt;
Поскольку задача имеет некоторую практическую ценность, уже существует великое множество методов, помимо рассмотренных. Так например, для точного решения, помимо приведённых эвристик, могут быть полезны генетические алгоритмы, а для специального случая, когда расстояние между городами равно расстоянию на плоскости, существует полиномиальный алгоритм, находящий маршрут с любой наперёд заданной точностью.&lt;br /&gt;
&lt;br /&gt;
=== Критерии оценки ===&lt;br /&gt;
Как уже сказано, есть два пути решения задачи - точный и приближённый.&lt;br /&gt;
&lt;br /&gt;
Точный путь:&lt;br /&gt;
* 4: Алгоритм работает на графе до 20 вершин&lt;br /&gt;
* 6: Реализованы 2-opt и 3-opt, алгоритм работает для 50 вершин&lt;br /&gt;
* 8: Метод ветвей и границ с линейным программированием&lt;br /&gt;
&lt;br /&gt;
+1 балл за визуализацию решения. Цель визуализации - чтобы на небольшом примере было понятно, как работает алгоритм.&lt;br /&gt;
&lt;br /&gt;
+1 балл за сравнение трёх методов на практике с методом локальных оптимизаций: насколько часто локальными оптимизациями не получается добиться точного решения?&lt;br /&gt;
&lt;br /&gt;
Приближённый путь:&lt;br /&gt;
* 4: Алгоритм, который выдаёт какое-нибудь решение и оценку сверху на ошибку&lt;br /&gt;
* 6: 2-приближение с помощью эйлерова цикла&lt;br /&gt;
* 8: 3/2-приближение с использованием поиска паросочетания&lt;br /&gt;
&lt;br /&gt;
+1 балл за визуализацию решения. Цель визуализации - чтобы на небольшом примере было понятно, как работает алгоритм.&lt;br /&gt;
&lt;br /&gt;
+1 балл за сравнение трёх методов на практике с методом локальных оптимизаций: насколько часто локальными оптимизациями не удаётся получить лучшего решения, чем описанные?&lt;/div&gt;</summary>
		<author><name>imported&gt;Ira dolgaleva</name></author>
	</entry>
</feed>