
- •Основные понятия теории графов. История возникновения
- •2. Понятие ориентированного графа. Его основные структуры
- •3. Понятие неориентированного графа. Его основные структуры.
- •4. Степени и полустепени вершин. Теорема Эйлера о рукопожатии.
- •5. Изоморфизм графов. Теорема Жордана.
- •6. Части графа. Связность графов.
- •7. Операции над графами. Способы задания графов.
- •8. Эйлеровы графы. Критерий эйлеровости. Критерий квазиэлеровости.
- •9. Теория графов. Деревья и лес
- •10. Гамильтоновы графы
- •12. Понятие сети. Понятие двухполюсной сети.
- •14. Разрез сети. Теорема о максимальном потоке и минимальном разрезе
- •16. Постановка задачи о максимальном потоке. Задача о потоке минимальной стоимости.
- •17. Постановка транспортной задачи.
- •18. Задача о распределении торговых агентов по городам.
- •19. Постановка задачи коммивояжера
- •21. Методы спу, их применение. Преимущества спу
- •22. Правила построения сетевых моделей
- •23. Параметры сетевых моделей
- •24. Методы расчета параметров сетевых моделей. Табличный метод расчета параметров сетевой модели.
- •25. Анализ сетевых моделей
- •27. Венгерский метод решения задачи о назначениях
- •28. Решение задачи коммивояжера методом ветвей и границ
- •29. Решение задачи коммивояжера методом ближайшего соседа
- •30. Основные понятия динамического программирования
- •31. Постановка задачи динамического программирования
- •32. Геометрическая интерпретация задачи динамического программирования
- •34. Функциональные уравнения Беллмана
- •36. Основные понятия производственных функций. Их экономический смысл.
- •37. Свойства производственных функций
- •40. Эластичность функции, ее геометрический и экономический смысл
- •43. Виды эластичности в экономике
- •44. Понятие функции полезности.
- •46. Понятие линий безразличия. Бюджетное множество
- •49. Функция спроса в случае кратковременного промежутка
- •50. Модели экономической динамики. Паутинообразная модель
29. Решение задачи коммивояжера методом ближайшего соседа
Алгоритм ближайшего соседа — один из простейших эвристических методов решения задачи коммивояжёра. Относится к категории «жадных» алгоритмов.
Формулируется следующим образом:
Пункты обхода плана последовательно включаются в маршрут, причем, каждый очередной включаемый пункт должен быть ближайшим к последнему выбранному пункту среди всех остальных, ещё не включенных в состав маршрута.
Алгоритм прост в реализации, быстро выполняется, но, как и другие «жадные» алгоритмы, может выдавать неоптимальные решения. Одним из эвристических критериев оценки решения является правило: если путь, пройденный на последних шагах алгоритма, сравним с путём, пройденным на начальных шагах, то можно условно считать найденный маршрут приемлемым, иначе, вероятно, существуют более оптимальные решения. Другой вариант оценки решения заключается в использовании алгоритма нижней граничной оценки (lower bound algorithm).
Для любого количества городов большего трех в задаче коммивояжёра можно подобрать такое расположение городов (значение расстояний между вершинами графа и указание начальной вершины), что алгоритм ближайшего соседа будет выдавать наихудшее решение.[1]
30. Основные понятия динамического программирования
Динамическое программирование в теории управления и теории вычислительных систем — способ решения сложных задач путём разбиения их на более простые подзадачи. Он применим к задачам с оптимальной подструктурой (англ.), выглядящим как набор перекрывающихся подзадач, сложность которых чуть меньше исходной. В этом случае время вычислений, по сравнению с «наивными» методами, можно значительно сократить.
Ключевая идея в динамическом программировании достаточно проста. Как правило, чтобы решить поставленную задачу, требуется решить отдельные части задачи (подзадачи), после чего объединить решения подзадач в одно общее решение. Часто многие из этих подзадач одинаковы. Подход динамического программирования состоит в том, чтобы решить каждую подзадачу только один раз, сократив тем самым количество вычислений. Это особенно полезно в случаях, когда число повторяющихся подзадач экспоненциально велико.
Метод динамического программирования сверху — это простое запоминание результатов решения тех подзадач, которые могут повторно встретиться в дальнейшем. Динамическое программирование снизу включает в себя переформулирование сложной задачи в виде рекурсивной последовательности более простых подзадач.
Словосочетание «динамическое программирование» впервые было использовано в 1940-х годах Р. Беллманом для описания процесса нахождения решения задачи, где ответ на одну задачу может быть получен только после решения задачи, «предшествующей» ей. В 1953 г. он уточнил это определение до современного. Первоначально эта область была основана, как системный анализ и инжиниринг, которая была признана IEEE. Вклад Беллмана в динамическое программирование был увековечен в названии уравнения Беллмана, центрального результата теории динамического программирования, который переформулирует оптимизационную задачу в рекурсивной форме.
Слово «программирование» в словосочетании «динамическое программирование» в действительности к "традиционному" программированию (написанию кода) почти никакого отношения не имеет и имеет смысл как в словосочетании «математическое программирование», которое является синонимом слова «оптимизация». Поэтому слово «программа» в данном контексте скорее означает оптимальную последовательность действий для получения решения задачи. К примеру, определенное расписание событий на выставке иногда называют программой. Программа в данном случае понимается как допустимая последовательность событий.