В математической оптимизации и информатике эвристика ( от греч. εὑρίσκω «нахожу, обнаруживаю» [1] ) — это метод, разработанный для более быстрого решения задач , когда классические методы слишком медленны для нахождения точного или приблизительного решения, или когда классические методы не могут найти ни одного точного решения в поисковом пространстве . Это достигается путем обмена оптимальности, полноты, точности или аккуратности на скорость. В некотором смысле это можно считать сокращением пути.
Эвристическая функция , также называемая просто эвристикой , — это функция , которая ранжирует альтернативы в алгоритмах поиска на каждом шаге ветвления на основе доступной информации, чтобы решить, какой ветви следовать. Например, она может аппроксимировать точное решение. [2]
Цель эвристики — выработать решение в разумные сроки, которое будет достаточно хорошим для решения поставленной задачи. Это решение может быть не лучшим из всех решений этой задачи или может просто приближаться к точному решению. Но оно все равно ценно, потому что его нахождение не требует чрезмерно длительного времени.
Эвристики могут давать результаты сами по себе или их можно использовать в сочетании с алгоритмами оптимизации для повышения их эффективности (например, их можно использовать для генерации хороших начальных значений).
Результаты исследований NP-трудности в теоретической информатике делают эвристику единственным приемлемым вариантом для множества сложных задач оптимизации, которые необходимо регулярно решать в реальных приложениях.
Эвристики лежат в основе всей области искусственного интеллекта и компьютерного моделирования мышления, поскольку они могут использоваться в ситуациях, когда нет известных алгоритмов . [3]
Критерии компромисса при принятии решения об использовании эвристики для решения данной проблемы включают следующее:
В некоторых случаях может быть сложно определить, является ли найденное эвристикой решение достаточно хорошим, поскольку теория, лежащая в основе эвристики, не очень проработана.
Один из способов достижения ожидаемого от эвристики прироста вычислительной производительности состоит в решении более простой задачи, решение которой также является решением исходной задачи.
Пример приближения описан Джоном Бентли для решения задачи коммивояжера (TSP):
чтобы выбрать порядок рисования с помощью перьевого плоттера . Известно, что задача TSP является NP-трудной , поэтому оптимальное решение даже для задачи среднего размера трудно найти. Вместо этого жадный алгоритм может быть использован для получения хорошего, но не оптимального решения (это приближение к оптимальному ответу) за достаточно короткий промежуток времени. Эвристика жадного алгоритма говорит выбирать то, что в данный момент является лучшим следующим шагом, независимо от того, предотвращает ли это (или даже делает невозможным) хорошие шаги позже. Это эвристика в том смысле, что практика показывает, что это достаточно хорошее решение, в то время как теория показывает, что существуют лучшие решения (и даже указывает, насколько лучше, в некоторых случаях). [4]
Другой пример эвристики, ускоряющей алгоритм, возникает в некоторых задачах поиска. Первоначально эвристика пробует каждую возможность на каждом шаге, как алгоритм поиска по всему пространству. Но она может остановить поиск в любой момент, если текущая возможность уже хуже, чем лучшее решение, которое уже найдено. В таких задачах поиска эвристика может использоваться для того, чтобы сначала попробовать хорошие варианты, чтобы плохие пути можно было исключить на ранней стадии (см. альфа-бета-отсечение ). В случае алгоритмов поиска по лучшему первому , таких как поиск A* , эвристика улучшает сходимость алгоритма, сохраняя его правильность, пока эвристика допустима .
В своей речи при получении премии Тьюринга Аллен Ньюэлл и Герберт А. Саймон обсуждают гипотезу эвристического поиска: физическая система символов будет многократно генерировать и изменять известные структуры символов до тех пор, пока созданная структура не будет соответствовать структуре решения. Каждый последующий шаг зависит от предыдущего шага, таким образом, эвристический поиск узнает, какие пути следует использовать, а какие игнорировать, измеряя, насколько близок текущий шаг к решению. Следовательно, некоторые возможности никогда не будут сгенерированы, поскольку они, как оценивается, с меньшей вероятностью завершат решение.
Эвристический метод может выполнить свою задачу, используя деревья поиска. Однако вместо того, чтобы генерировать все возможные ветви решения, эвристика выбирает ветви, которые с большей вероятностью дадут результаты, чем другие ветви. Она избирательна в каждой точке принятия решения, выбирая ветви, которые с большей вероятностью дадут решения. [5]
Антивирусное программное обеспечение часто использует эвристические правила для обнаружения вирусов и других форм вредоносного ПО. Эвристическое сканирование ищет код и/или поведенческие шаблоны, общие для класса или семейства вирусов, с различными наборами правил для разных вирусов. Если обнаруживается, что файл или исполняемый процесс содержат соответствующие шаблоны кода и/или выполняют этот набор действий, то сканер делает вывод, что файл заражен. Самая продвинутая часть эвристического сканирования на основе поведения заключается в том, что оно может работать против высокорандомизированных самомодифицирующихся/мутирующих ( полиморфных ) вирусов, которые не могут быть легко обнаружены более простыми методами сканирования строк. Эвристическое сканирование имеет потенциал для обнаружения будущих вирусов без необходимости сначала обнаруживать вирус где-то еще, отправлять его разработчику вирусного сканера, анализировать и предоставлять пользователям сканера обновление обнаружения.
Некоторые эвристики имеют сильную базовую теорию; они либо выводятся сверху вниз из теории, либо достигаются на основе экспериментальных или реальных данных. Другие являются просто практическими правилами, основанными на реальных наблюдениях или опыте без малейшего намека на теорию. Последние подвержены большему количеству ловушек.
Когда эвристика повторно используется в различных контекстах, поскольку было замечено, что она «работает» в одном контексте, без математического доказательства того, что она соответствует заданному набору требований, возможно, что текущий набор данных не обязательно представляет будущие наборы данных (см.: переобучение ) и что предполагаемые «решения» оказываются сродни шуму.
Статистический анализ может быть проведен при использовании эвристики для оценки вероятности неверных результатов. Чтобы использовать эвристику для решения задачи поиска или задачи о рюкзаке , необходимо проверить, что эвристика является допустимой . При наличии эвристической функции, предназначенной для аппроксимации истинного оптимального расстояния до целевого узла в ориентированном графе, содержащем общее количество узлов или вершин, помеченных , «допустимая» означает примерно, что эвристика недооценивает стоимость достижения цели или формально, что для всех , где .
Если эвристика недопустима, она может никогда не найти цель, либо попав в тупик графа , либо перескакивая вперед и назад между двумя узлами и где .
Слово «эвристика» вошло в употребление в начале 19 века. Оно образовано нерегулярно от греческого слова heuriskein , что означает «находить». [6]