Как оценить границы с помощью scipy, оптимизировать изменение диапазонов шагов

Я пытаюсь оптимизировать свои границы в «scipy» оптимизации. Некоторые переменные в моем векторе "x" чрезвычайно ограничены, и я не могу оптимизировать свою целевую функцию, используя другие значения.

Например, x1 просто может принимать следующие значения: 19, 20, 24, 40. Scipy просит предоставить границы x1, такие как (19, 40), но функция принимает шаги допуска по своему усмотрению.

Есть способ оптимизировать с помощью scipy разработку ограниченного шага для некоторых переменных ??

bounds = ((19, 40),...)
x0 = (300, 19, ...)
resultado = optimize.minimize(fun, x0, bounds = bounds, method = 'TNC',
                              constraints = cons)

person srgam    schedule 16.08.2019    source источник
comment
Возможно, проверьте это: stackoverflow.com /вопросы/39236863/   -  person Ardweaden    schedule 16.08.2019
comment
В целом: нет. Рамки алгоритма этого не позволяют. Ваши ограничения можно рассматривать как обеспечение целостности и многое другое: определение прерывистого множества. Даже первое в линейном случае делает задачу NP-трудной. Когда это линейно, это смешанное целочисленное программирование (и есть доступные решатели). При нелинейности существуют дополнительные категории, например MINLP. Тогда выпуклость играет роль, и некоторые решатели, которые можно проверить, могут быть Bonmin (только выпуклые) или Couenne. Однако MINLP, особенно в невыпуклой обстановке, очень сложны.   -  person sascha    schedule 16.08.2019
comment
Могу ли я решить проблему MINLP с помощью scipy.optimize?   -  person srgam    schedule 20.08.2019


Ответы (1)


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

Также другим вариантом может быть использование алгоритма Basin-Hopping, в котором вы можете определить свои собственные значения шагов, а затем при необходимости оптимизировать.

Если возможно, укажите, имеете ли вы в виду x1 второе предположение или второй элемент вектора «x».

person LearningPrince    schedule 16.07.2020