Имитация отжига, нормализованная температура - PullRequest
0 голосов
/ 26 апреля 2020

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

math formula

Это код 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%, что заставляет мой алгоритм принимать отрицательные значения во всех итерациях, вместо того, чтобы уменьшать эту вероятность посредством итераций.

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

1 Ответ

0 голосов
/ 26 апреля 2020

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

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

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

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

Если T равен 0, алгоритм становится Monotoni c Переход по бассейну, в котором все шаги, которые увеличивают энергию, отклоняются.

...