Нелинейная многомерная оптимизация - это просто. Часть 3. Имитация отжига

13.10.15

Разработка - Инструментарий разработчика

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
ИмитацияОтжига.epf
.epf 18,05Kb
32
32 Скачать (1 SM) Купить за 1 850 руб.

Сегодня у нас тема для довольно долгого и, надеюсь, интересного разговора - метода имитации отжига.

Сам метод является подвидом более общего метода поиска решения, известного под названием "метода Монте-Карло".  Как и любой стохастический метод, имитация отжига не гарантирует нам наилучшего решения, но в дополнение к этому данный метод не гарантирует нам получение даже наилучшего решения среди рассмотренных. Такая вот довольно на первый взгляд непрактичная штуковина. Однако, как учит нас диалектика, всегда есть "но". Это "но" в данном случае - хороший шанс выбраться из "локального минимума". Еще одним несомненным достоинством данного метода является простота реализации. Ну а для того, чтобы Вам было действительно просто его реализовать, давайте попытаемся разобраться с тем, что такое отжиг, для чего он нужен и как это все, собственно, работает.

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

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

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

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

2. Атомы стремятся занять в кристаллической решетке положения с наибольшей энергией связи и наименьшей энергией отталкивания, а это значит, что переход из лучшего состояния в худшее менее вероятен и вероятность этого перехода тем меньше, чем меньше имеется энергии на разрыв сил притяжения у атомов. Или, попросту говоря, чем ниже температура и чем дальше состояние от оптимального, тем сложнее веществу перейти в это состояние.

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

3. Температура должна снижаться постепенно и достичь значения, при котором движение атомов полностью прекращается. Это и будет означать окончание процессов отжига и поиска решения.

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

Теперь введем несколько обозначений:

Х - множество значений переменных, составляющих возможное решение задачи оптимизации.

Z(X) - целевая функция, которую возможно рассчитать для любой совокупности Х. Оптимальное решение будет означать минимум данной функции.

Tmax и Tmin - максимальная и минимальная температуры отжига.

Frand(Xi) - функция случайного преобразования решения Xi. Функция произвольная и теоретически должна выбираться с учетом специфики задачи, но на практике замена случайных переменных новыми случайными значениями дает вполне приличный результат. Количество изменяемых на случайные (инвертируемых) переменных также выбирается произвольно. Для гибкости я сделал интенсивность инверсии одним из параметров функции поиска решения.

N - количество итераций поиска решения (длительность отжига).

И под конец распишем алгоритм по шагам:

1. Формируем начальное решение, инициируя Хi случайными значениями. i=0.

2. Устанавливаем температуру.

  

3. Если Тi>Tmin продолжаем. Иначе возвращаем Xi.

4. Вычисляем возможное решение Х* 

 

3. Находим

 

5. Определяем Xi+1. В зависимости от значения ΔZ и текущей температуры вероятность того, что Xi+1 будет равно Х*, выражается формулой:

 

Определяем, переходит ли Х* в Хi+1, бросая монетку. То есть генерируем случайное число от 0 до 1 и сравниваем с вероятностью Р. Если случайное число превысило или равно Р - переход произошел, и мы присваиваем Xi+1=X*, если же Х* не перешло в Хi+1, тогда присваиваем Xi+1= Xi.

6. Увеличиваем счетчик итераций i=i+1. Переходим к шагу 2.

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

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

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

И под конец гифка о том, как решается задача коммивояжера методом имитации отжига на карте США.

 

 

оптимизация имитация отжига алгоритм поиска решения многомерная оптимизация поиск решения

См. также

SALE! 15%

Инструментарий разработчика Роли и права Запросы СКД Программист Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159475    874    399    

862

SALE! 15%

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 Конфигурации 1cv8 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP и т.д.). Поддерживаются управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя.

8400 7140 руб.

20.08.2024    7785    57    22    

66

Инструментарий разработчика Программист Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Инструмент для написания и отладки кода в режиме «1С:Предприятие». Представляет собой консоль кода с возможностью пошаговой отладки, просмотра значений переменных любых типов, использования процедур и функций, просмотра стека вызовов, вычисления произвольных выражений на встроенном языке в контексте точки останова, синтаксического контроля и остановки по ошибке. В консоли используется удобный редактор кода с подсветкой, контекстной подсказкой, возможностью вызова конструкторов запроса и форматной строки.

9360 руб.

17.05.2024    23444    68    45    

117

SALE! 15%

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

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

10000 8500 руб.

10.11.2023    10434    36    25    

61

SALE! 15%

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 19980 руб.

06.10.2023    15405    35    7    

70

SALE! 35%

Инструментарий разработчика Инструменты администратора БД Системный администратор Программист Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

4800 3120 руб.

14.01.2013    187996    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17305    6    32    

42

Производство готовой продукции (работ, услуг) Программист Пользователь Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Лесное и деревообрабатывающее хозяйство Платные (руб)

Оптимизация раскроя листовых материалов для 1С - размещение прямоугольных деталей в область (области) с возможностью вращения деталей на 90 градусов. Создание карт кроя материала.

10000 руб.

13.04.2021    18098    19    15    

33
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dj_serega 393 13.10.15 14:36 Сейчас в теме
Как всегда круто :)
Но эту публикацию даже знаю где можно взять в работу.
Спасибо.
2. dusha0020 1117 14.10.15 10:18 Сейчас в теме
(1) dj_serega, И Вам спасибо за теплые слова. А где это можно взять в работу - решайте сами. Самая очевидная сфера применения - логистические задачи. Можно оптимизировать не только маршруты, а и загрузку транспорта или размещение ТМЦ на складе и т.д. Главное набраться смелости, сделать презентацию, подсчитать возможную экономию и пойти к начальству с предложением. И сразу обсудить премию в случае успеха:)
3. aspirator23 339 17.10.15 14:33 Сейчас в теме
Гораздо интересней чем бесконечные печатные формы.
Приятно, что число "ильдаровичей" растет.
4. igo1 270 08.12.16 14:35 Сейчас в теме
Отличное решение!!! Спасибо.
При 8000 итераций отжигом, он не очень оптимально работает, так что лучше пользоваться ген алгоритмом.
Оставьте свое сообщение