Как решить проблему нелинейного программирования в Python - PullRequest
2 голосов
/ 01 ноября 2019

Я хочу решить проблему нелинейного программирования. Целевая функция нелинейна, а ограничения линейны. Учитывая вектор α(dim is n*1), я хочу найти другой вектор θ( dim also is n*1) , чтобы cos (α, θ) минимизировать . Между тем у θ есть некоторые ограничения. ограничение: A.dot(θ) < 0 (ноль - вектор-столбец) d Тусклость m*nm < n.

Проблема: is Given α(dim is n*1) , Тусклость m*nm < n

minimize   cos(α, θ) = α^T.dot(θ) /(|α||θ|)
subject to 
           A.dot(θ) < 0  (zero dim m*1)

Я пытался использовать scipy.optimize.minimize, чтобы решить проблему и ввести ограничения. как

scipy.optimize.minimize(method='SLSQP', constraints=cons)
scipy.optimize.minimize(method='COBYLA', constraints=cons)

Результат методов в зависимости от начального значения . Я не знаю, как получить разумное начальное значение, поэтому я устанавливаю начальное значение случайно. Как и ожидалось, метод дает неверный результат , результаты не соответствуют ограничениям.

1 Ответ

0 голосов
/ 01 ноября 2019

Вам необходимо определить ограничение неравенства

def constraint1(A,θ):
    return np.dot(A,θ)

Описаны шаги оптимизация с помощью scipy

Затем вы переходите к последовательному квадратичному программированию по методу наименьших квадратов. Вы увидите, что невыпуклая задача оптимизации не имеет математической гарантии для решения.

...