Ограничения, по-видимому, игнорируются при использовании тазобедренных методов с использованием метода COBYLA - PullRequest
0 голосов
/ 17 сентября 2018

У меня проблемы с определением ограничений с использованием бассейна с методом method = 'COBYLA'. Вот тестовый случай, когда все идет не так. По сути, ограничения игнорируются, и существуют функциональные испытания вне указанного диапазона. Я задаю простую квадратику с минимумом в [0,0], ища -3<x[0], но, как вы можете видеть из выходных данных, есть много поисков за пределами этого диапазона (я увеличил размер шага, чтобы сделать его очевидным)

import numpy as np
from scipy.optimize import basinhopping

def f(x):
    if x[0]<-3 : 
        print('outside range ',x[0])
    return x[0]**2+x[1]**2

cons = [{'type':'ineq','fun': lambda x: x[0]+3}]
kwargs = {'method':'COBYLA','constraints':cons}

ret=basinhopping(f, [5,1],T=1,stepsize=1000,niter=1,minimizer_kwargs=kwargs)
print(ret)

runfile('py/cobyla_test', wdir='/py', post_mortem=True)
outside range  -446.14581341127945
outside range  -445.14581341127945
outside range  -445.14581341127945
outside range  -444.14581341127945
[etc... lots of output deleted]
[-4.81217825e-05 -5.23242054e-05] 5.0535284302996725e-09

1 Ответ

0 голосов
/ 17 сентября 2018

Как написано в scipy.optimize.basinhopping - Справочное руководство по SciPy v1.1.0 , переключение между бассейнами - это двухэтапный метод:

  • сначала случайный скачоквыполнено (take_step обратный вызов)
  • затем из этой точки найден локальный минимум с использованием специального метода минимизации
  • наконец, решается, принят ли шаг (accept_test обратный вызов)

Указанные вами ограничения относятся к методу минимизации, они не влияют на шаг перехода.Для шага прыжка либо настройте stepsize (максимальное смещение для случайного прыжка), либо определите свой собственный take_step.


"Я думал, что смысл ограничения заключается в том, чтоон никогда не попробует x вне ограничения " - ограничения в математических задачах, включая ограниченную задачу оптимизации , не работают таким образом.Они только указывают, каким условиям должно удовлетворять само решение .Они не ограничивают точки, которые можно использовать при получении этого решения, их выбор полностью зависит от алгоритма.

Подход к ограничению области, в которой ищет численный метод, заключается в настройке параметров метода в некоторыхспособ, специфичный для характера функции и метода, для «направления» метода в правильном направлении.

...