Я использую BFGS-оптимизатор с ограниченной памятью, чтобы минимизировать значение функции черного ящика. Я симулировал случайным образом множество комбинаций входных параметров и понял, что параметр ftol
и gtol
только мешает, и он не способствует уменьшению значения моей функции (существует положительная корреляция между выходами и случайные значения для ftol
и gtol
, поэтому чем меньше, тем лучше). Поэтому я установил оба параметра на 1E-18
и сконцентрировался на настройке других параметров, таким образом, выходное сообщение CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH
означает, что вся оптимизация зависела от правильного значения для eps
Я думаю.
Затем я установил оба ftol
и gtol
до 1E-20
, чтобы не мешать, но потом я начал получать неоптимальные результаты.
Итак, мой оптимизатор:
scipy.optimize.minimize(function, x0=guess.flatten(), method='L-BFGS-B', bounds=bounds, options={ 'maxcor': maxcor, 'ftol': 1E-20, 'gtol': 1E-20, 'eps': eps, 'maxfun': maxrounds, 'maxiter': maxrounds, 'maxls': maxls})
Поэтому я установил его на 1E-20
, а остальные значения подаются случайным образом. Средний выход для большей выборки меньше с 1E-20
, чем с 1E-18
, я не понимаю, почему, они должны быть очень маленькими числами, которые незначительны. Я также начал получать сообщения о выходе, такие как CONVERGENCE: NORM OF PROJECTED GRADIENT <= PGTOL
, которые я не знаю, как это было возможно для такой небольшой толерантности. Поэтому у меня есть следующие вопросы:
1) Стоит ли устанавливать ftol
и gtol
на такие низкие значения, как 1E-20
?
2) Должен ли я установить tol
(значение внешнего допуска), если ftol
и gtol
уже установлены? Я не хочу, чтобы это вышло раньше времени. Или tol
в качестве порога выхода отключается, если включены gtol
и ftol
?
3) Возможно ли, что сам Сципи, Numpy или Python3 не может обработать плавающую точку значения с 20 десятичными знаками. Я заметил, что Python в основном печатает 18 цифр для чисел с плавающей запятой, поэтому проблема может быть в том, что я поставил слишком много цифр. Если так, то каково максимальное количество цифр, обрабатываемых scipy.optimize? (Scipy v1.4.1 | Numpy v1.18.1 | Python 3.5.3)