Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты по проге.docx
Скачиваний:
5
Добавлен:
01.07.2025
Размер:
630.61 Кб
Скачать
  1. Отбрасывание заведомо неверных вариантов (обрезание каких-то ветвей дерева подзадач). Допустим, нельзя поставить ферзей на одну горизонталь.

  2. Применение эвристик.

Эвр. Алгоритм - Представляющий совокупность приёмов в поиске решения задачи, которые позволяют ограничить перебор. Не имеет строгого обоснования Эвристика в программировании – это решение задачи при помощи разбора частных случаев, так как каждая ветвь эвристического алгоритма эффективнее, чем общее решение. Таким образом эвристический алгоритм не решает задачу в общем виде, а работает только в определенных случаях, но это и хорошо, так как некоторые задачи не имеют общего решения и они решаются только при помощи эвристики. Применяется тогда, когда мы ищем одно из возможных решений, а не все. Таким образом эвристика позволяет выбрать из всех вариантов самый вероятный.

Эвристический алгоритм — это алгоритм решения задачи, правильность которого для всех возможных случаев не доказана, но про который известно, что он даёт достаточно хорошее решение в большинстве случаев. В действительности может быть даже известно (то есть доказано) то, что эвристический алгоритм формально неверен. Его всё равно можно применять, если при этом он даёт неверный результат только в отдельных, достаточно редких и хорошо выделяемых случаях, или же даёт неточный, но всё же приемлемый результат.

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

Важно понимать, что эвристика, в отличие от корректного алгоритма решения задачи, обладает следующими особенностями:

Она не гарантирует нахождение лучшего решения.

Она не гарантирует нахождение решения, даже если оно заведомо существует(возможен «пропуск цели»).

Она может дать неверное решение в некоторых случаях.

Например, при эвристике для обхода коня , так же может завести в тупик.

  1. Метод ветвей и границ. (Когда частичная выборка уже заведомо хуже, чем текущий оптимум) Если недостроенное до конца решение оказывается хуже, чем локальный оптимум, то все эти решения(начинающиеся с данной точки) можно отбросить.

Пример метода ветвей и границ – задача про коммивояжёра.

Эвристика для ферзей:

 Он работает для всех N ≥ 4 или N = 1:

Разделить N на 12 и запомнить остаток (N будет равно 8 для задачи о восьми ферзях).

Занести в список все четные числа от 2 до N по порядку.

Если остаток равен 3 или 9, перенести 2 в конец списка.

Добавить в список все нечетные числа от 1 до N по порядку, но, если остаток равен 8, перевернуть пары соседних чисел (например: 3, 1, 7, 5, 11, 9, …).

Если остаток равен 2 и N ≥ 3, поменять местами 1 и 3, затем, если N ≥ 5, перенести 5 в конец списка.

Если остаток равен 3 или 9, переместить 1 и 3 (именно в этом порядке, а не в котором они сейчас) в конец списка.

Разместить ферзя в первом столбце и в строке с номером, равным первому элементу списка, затем поместить следующего ферзя во втором столбце и в строке с номером, равным второму элементу списка, и т. д.

Жадный алгоритм

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

Такой алгоритм делает на каждом шаге локально оптимальный выбор, допуская, что итоговое решение также окажется оптимальным

Принцип жадного выбора

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

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

Показывается, что подзадача, возникающая после жадного выбора на первом шаге, аналогична исходной.

Рассуждение завершается по индукции.

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

Билет 13. Алгоритм оптимального поиска. Метод ветвей и границ.

Если для выполнения задачи необходимо найти не одно возможное решение (или все), а оптимальное по каким-либо критериям, то для этого необходимо получить все возможные решения, и в процессе их получения оставлять только то, что в некотором смысле является оптимальным. Теоретически, конечно, можно перебрать все допустимые решения, поскольку их число конечно, но практически только при малых объёмах задачи. В методах неявного перебора допустимое множество решений разбивается на непустые подмножества меньшей мощности. Затем анализируется возможность исключения этих подмножеств, а также улучшения найденного допустимого решения (рекорда). В результате возможно сокращение перебора допустимых решений. Хотя не исключены ситуации, когда не удается отсечь ни одно подмножество, содержащее более одного элемента. В последнем случае будут проверены все допустимые решения, т. е. осуществлен полный перебор решений.

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

В методе ветвей и границ разбиение допустимого множества на подмножества называется ветвлением, а отсечение подмножеств

решений основано на сравнении верхней и нижней оценок (границ) (Не идти в след. Город, если маршрут уже хуже) функционала. Сначала рекорд x 0 либо произвольное допустимое решение, либо не известен. Алгоритм ветвей и границ последовательно выполняет итерации (шаги). На очередном шаге алгоритма выбирается и проверяется некоторое не отсеченное множество. В результате проверки оно может быть отброшено (отсечено). Наибольшее распространение среди схем неявного перебора получил метод ветвей и границ, в основе которого лежит идея последовательного разбиения множества допустимых решений. На каждом шаге метода элементы разбиения (подмножества) подвергаются анализу – содержит ли данное подмножество оптимальное решение или нет. Если рассматривается задача на минимум, то проверка осуществляется путем сравнения нижней оценки значения целевой функции на данном подмножестве с верхней оценкой функционала. В качестве оценки сверху используется значение целевой функции на некотором допустимом решении.

Допустимое решение, дающее наименьшую верхнюю оценку, называют рекордом. Если оценка снизу целевой функции на данном подмножестве не меньше оценки сверху, то рассматриваемое подмножество не содержит решения лучше рекорда и может быть отброшено. Если значение целевой функции на очередном решении меньше рекордного, то происходит смена рекорда. Будем говорить, что подмножество решений просмотрено, если установлено, что оно не содержит решения лучше рекорда. Если просмотрены все элементы разбиения, алгоритм завершает работу, а текущий рекорд является оптимальным решением. В противном случае среди непросмотренных элементов разбиения выбирается множество являющееся в определенном смысле перспективным. Оно подвергается разбиению (ветвлению). Новые подмножества анализируются по описанной выше схеме. Процесс продолжается до тех пор, пока не будут просмотрены все элементы разбиения.

Запишем алгоритм на псевдоязыке: void try ( n) { int k; for (k=0; k<m; k++) { If (подходит) { запись_варианта ( ); if (n<N) try(n+1); else

{

if (f (вариант)> f (оптимум) )

оптимум=вариант;

стирание_варианта;

} } } }

В переменной «оптимум» хранится лучшее из полученных до сих пор решений. Значение f(оптимум) принято хранить в отдельной переменной, чтобы избежать ее частого перевычисления.

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

Метод ветвей и границ требует: 1) Способность получить для каждого узла дерева границу наилучшего значения функции для всех решений (эта граница должна быть нижней для задачи минимизации и верхней для задачи максимизации). ( то есть, в узле мы знаем кратчайший к нему путь) 2) Значение наилучшего решения, полученного к этому моменту.

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

Замечание! Модификация Литтла – позволяет решать задачу о коммивояжере с количеством городов до 100. Идея – разбить все варианты на классы и получить оценки снизу для каждого класса (оценкой снизу называется такое число, что стоимость любого варианта из данного класса заведомо не может быть ниже него)