我从 python 开始,我正在尝试解决 Fmincon 在 Matlab 中解决的问题。
基本上,我的问题有 12 个变量,并创建了一个包含 2000 个值的列表(线性),我的目标是最大化这个列表的最大值。
此外,该问题具有线性约束。
我尝试过使用 scipy,但没有成功,但在我尝试过的所有自由梯度求解器或近似梯度中,无法插入线性约束。
我也尝试过使用 cvxopt,但我没有找到任何自由梯度求解器或近似梯度。
此外,我不喜欢使用遗传算法、PSO、Harmony Search 等工具。
我想使用可以插入线性约束的自由梯度求解器或近似梯度,例如 Matlab 中的 Fmincon。
这是我的目标函数:
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)
向量 X 代表 12 个变量,包含 12 个元素,并且该向量的总和必须等于 1。这是我的约束。
除此之外,每个变量都有不同的界限。所以求解器必须允许插入边界。
向量 X(所有 12 个变量),输入 f 和 CONST_CVAR,创建向量 REC (1x2000),我的目标是最大化向量 REC 的最大值。
这样,我需要一个求解器,它允许:
- 自由梯度或近似梯度
- 线性约束
- 非线性函数
- 界限
- Python
任何人都可以建议任何求解器吗?