Минимизируйте нелинейную и дифференцируемую функцию черного ящика с линейными ограничениями. - питон
Я начинаю с python и пытаюсь решить проблему, которую Fmincon решает в Matlab.
В принципе, моя проблема состоит из 12 переменных, и создается список из 2000 значений (линейно), и моя цель - максимизировать наибольшее значение этого списка.
Кроме того, проблема имеет линейное ограничение.
Я безуспешно пытался использовать scipy, но во всех решателях свободного градиента или приблизительного градиента, которые я пробовал, невозможно вставить линейные ограничения.
Я также пытался использовать cvxopt, но я не нашел никакого решателя свободного градиента или приблизительного градиента.
Кроме того, я не хотел бы использовать такие инструменты, как генетический алгоритм, PSO, поиск гармонии и т. Д.
Я хотел бы использовать решатель свободного градиента или приблизительный градиент, который можно вставить линейные ограничения, как Fmincon в Matlab.
Это моя целевая функция:
import numpy as np
def max_receita(X, f, CONSTANTE_CVAR):
# f is a matrix with 2000 rows and 12 columns
# CONSTANTE_CVAR is a matrix with 2000 rows and 12 columns
NSERIES = len(f)
REC = np.zeros(NSERIES)
X = np.transpose(X)
CONST_ANUAL = np.sum(CONSTANTE_CVAR,1)
for i in range(NSERIES):
REC[i] = np.dot(f[i],X) + CONST_ANUAL[i]
return -max(REC)
Есть 12 переменных, представленных вектором X с 12 элементами, и этот вектор должен иметь сумму, равную 1. Это мое ограничение.
Кроме того, каждая переменная имеет свою границу. Так что решатель должен позволять вставлять границы.
Вектор X (все 12 переменных) со входами f и CONST_CVAR создает вектор REC (1x2000), и моя цель - максимизировать наибольшее значение вектора REC.
Таким образом, мне нужен решатель, который позволяет:
- Свободный градиент или приблизительный градиент
- Линейные ограничения
- Нелинейная функция
- Bounds
- питон
Кто-нибудь может предложить какой-нибудь решатель?