Это происходит из-за численного дифференцирования , которое само по себе необходимо не только для определения направления шага и размера, но также и для причины завершения .
В общем, вы не можете сделать многое, не будучи очень осторожным в отношении любого используемого решателя (и есть много бэкэнд-решателей). Основная идея c состоит в том, чтобы заменить automati c числовое дифференцирование на предоставленный вами: тогда учитывает эти границы и должен быть внимателен к решающим элементам. Например, «как обосновать прекращение на этом конце».
Исправить A:
Ваша проблема должна vani sh автоматически при использовании: Pull- запрос # 10673 , который касается вашей конфигурации: L-BFGS-B
.
Кажется, этот PR не является частью текущего выпуска SciPy 1.4.1 (так как это было 2 месяца до PR).
См. также # 6026 , где упоминается этап 1.5.0 в отношении некоторых изменений, включая относительно границ в num -diff .
Для вышеприведенного PR вам потребуется установить scipy из источников, а именно:
- вполне выполнимо на linux (и, возможно, OS X)
- не то, что вы должны попробовать windows!
При необходимости см. Документацию.
Исправление B:
Кроме этого поскольку вы выполняете безусловную оптимизацию (с переменными границами), где доступно больше решающих бэкэндов (по сравнению с ограниченной оптимизацией), вы можете попробовать другой решатель, trust-constr
, который явно поддерживает это, см. # 9098 .
Примите во внимание, что вам необходимо явно указать это при настройке границ!