0

Я нахожусь на Scipy Optimize, используя функцию fmin_cobyla. Я изо всех сил писать ограничений функции, которые:Функции ограничения на FMIN_COBYLA (scipy optimize)

  1. убедитесь, что все элементы сумму до 1
  2. убеждаться все детали> = 0

Кто-нибудь есть понимание? Для fmin_slsqp, например, у меня была функция:

def w_constraint(w, v, x0, x1): 
    return np.sum(w) - 1 

Как также оценки в функции.

Но они не работают на cobyla.

+1

«все предметы, суммируемые до 1» - это ограничение равенства. ['fmin_cobyla'] (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_cobyla.html) не обрабатывает ограничения равенства. –

+0

Спасибо, @WarrenWeckesser, можете ли вы помочь мне убедиться, что они все больше 0? –

ответ

1

Сформулируйте ваше равенство как пару неравенств. Значение:

  • x == y становится:
    • x >= y
    • x <= y = -x >= -y

Конечно, это может ввести численные проблемы (боль много видов решателей), но я видел, это во множестве реализаций интерфейсов COBYLA (с поддержкой поддержки ограничений равенства таким образом).

Комментарий от документации NLopt:

(Основной код COBYLA поддерживает только неравенство ограничений ограничения равноправия автоматически преобразуется в пары неравенств, что в случае этого алгоритма, кажется, не вызывает. проблемы.)

+0

Спасибо @sascha; Я очень новичок в scipy, напишите ли вы, что мне придется возвращать в моей функции ограничения? –

+0

@GuilhermeNazarethdeSouza Просто проверьте документы. Они не так уж плохи. Даже включая примеры. (И всегда помните: «это не сработало» не является полезным сообщением об ошибке!) – sascha

Смежные вопросы