Дифференциальная эволюция Сципи с целыми числами
Я пытаюсь запустить оптимизацию с scipy.optimize.differential_evolution. Код требует границ для каждой переменной в x. Но я хочу найти решение, где части x должны быть целыми числами, в то время как другие могут свободно варьироваться как числа с плавающей точкой. Соответствующая часть моего кода выглядит
bounds = [(0,3),(0,3),(0,3),???,???]
result = differential_evolution(func, bounds)
Чем я заменяю???, чтобы заставить эти переменные быть целыми в данном диапазоне?
3 ответа
Как отмечено в комментариях, нет прямой поддержки "целочисленного ограничения".
Однако вы можете минимизировать модифицированную целевую функцию, например:
def func1(x):
return func(x) + K * (x[3] - round(x[3]))**2
и это заставит x[3]
к целочисленному значению (к сожалению, вы должны настроить K
параметр).
Альтернативой является округление (некоторые из) вещественных параметров перед оценкой целевой функции:
def func1(x):
z = x;
z[3] = round(z[3])
return func(z)
Оба являются общими методами решения проблемы дискретной оптимизации с использованием дифференциальной эволюции, и они работают довольно хорошо.
Дифференциальная эволюция может поддерживать целочисленное ограничение, но текущая реализация scipy должна быть изменена.
Из исходного кода Scipy видно, что их DE основаны на Storn, R и Price, K, дифференциальной эволюции - простой и эффективной эвристике для глобальной оптимизации в непрерывных пространствах, Журнал глобальной оптимизации, 1997
Однако в этой области был достигнут прогресс, на который указывает этот обзорный документ. Последние достижения в области дифференциальной эволюции - обновленный обзор
Есть несколько статей, которые вносят изменения в алгоритм, чтобы он мог обрабатывать целые числа. У меня не было времени, чтобы посмотреть на все варианты, но, возможно, эта статья может помочь.
Что мне заменить ???, чтобы заставить эти переменные быть целыми в заданном диапазоне?
wrapdisc
это пакет, который представляет собой тонкую оболочку, которая позволит вам оптимизировать ограниченные целочисленные переменные вместе с числами с плавающей запятой с различными