для решения нелинейной ограниченной задачи в python с использованием минимизации l1

#python #linear-programming #nonlinear-optimization #scipy-optimize

#python #линейное программирование #нелинейная оптимизация #scipy-оптимизировать

Вопрос:

В настоящее время я работаю над некоторой задачей оптимизации, которая включает нелинейное ограничение. Проблема заключается в следующем :

введите описание изображения здесь

Мне нужно выполнить любую из двух минимизаций, показанных на изображении в python. Я нашел библиотеку scipy, в которой есть функция optimize.minimize(), но я не могу вписаться в нелинейное ограничение с помощью scipy.NonLinearConstraint. Кто-нибудь может помочь? Как это решить? Есть ли также способ решить эту проблему, используя некоторую гомотопическую функцию, заданную в любой из библиотек? Я попытался (добавив ограничение для альтернативного) как:

 con = lambda A,x,y : np.matmul(A,x) - y
nlc = NonlinearConstraint(con, 0, epsilon)
 

Комментарии:

1. Что вы подразумеваете под нелинейными ограничениями? Я интерпретирую верхний вариант как задачу линейной оптимизации, минимизирующую l1-норму. Это может быть легко преобразовано в простой LP, который позволяет принимать решения, оптимальные в глобальном масштабе по времени. Что-то, что, вероятно, трудно превзойти всеми другими (общими) подходами, особенно общим нелинейным выбором. Используя нелинейный opt, вы должны сначала подумать о дифференцируемости l1-норм, которые не будут совместимы с большинством предположений этих решателей.

2. @sascha: второе уравнение подчиняется нелинейному ограничению, которое упоминается как альтернативный способ решения.

Ответ №1:

Итак, я, наконец, смог решить вышеуказанную оптимизацию, используя решатель spgl1 в python. Его можно использовать, как показано ниже:

 from spgl1 import spgl1, spg_bp, spg_bpdn

#x01 = psueodinverse of A multiplied by y  
x,resid,grad,info = spgl1(A, y, tau = tau, sigma = epsilon, x0 = x01, iter_lim = 150)
 

можно обратиться к вышеупомянутому решателю по ссылке github или ссылке pypi