Имитация отжига, нормированная температура

У меня проблема, что мне нужно максимизировать значение X данной функции:

математическая формула

Это код Python для формулы: 2 ** (-2 *((((x-0.1) / 0.9)) ** 2)) * ((math.sin(5*math.pi*x)) ** 6).

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

probability = pow(math.e, (actual_cost - best_cost) / temperature)

Моя стоимость (то, что я пытаюсь оптимизировать) — это очень короткое число, чаще всего от 0 до 0,1, но моя температура, с другой стороны, равна 100.

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

Как я могу адаптировать значение моей температуры для изменения вероятности с помощью итераций?


person Alvaro Leandro Cavalcante    schedule 26.04.2020    source источник
comment
Почему у вас фиксированная температура? Обычно вы выбираете его в зависимости от вашей проблемы. Если вы не обязаны использовать свой собственный алгоритм, доступна реализация: scipy.optimize.basinhopping. Значение по умолчанию для T в этой функции равно 1.0.   -  person Joe    schedule 26.04.2020
comment
Это хороший вариант, я попытаюсь изучить эту реализацию, чтобы больше понять, как я могу установить хорошую температуру для своих задач! Танки   -  person Alvaro Leandro Cavalcante    schedule 26.04.2020


Ответы (1)


Решение этой проблемы можно найти в документации по scipy. .optimize.basinhopping:

Выбор T: Параметр T — это «температура», используемая в критерии Метрополиса. Переходные шаги всегда принимаются, если func(xnew) < func(xold). В противном случае они принимаются с вероятностью:

exp( -(func(xnew) - func(xold)) / T )

Таким образом, для достижения наилучших результатов T должно быть сопоставимо с типичной разницей (в значениях функции) между локальными минимумами. (Высота «стен» между локальными минимумами значения не имеет.)

Если T равно 0, алгоритм становится Monotonic Basin-Hopping, в котором все шаги, увеличивающие энергию, отбрасываются.

person Joe    schedule 26.04.2020