我是从python开始的,我试图解决Fmincon在Matlab中解决的问题。
基本上,我的问题有12个变量,并且创建了2000个值的列表(线性),我的目标是最大化此列表的最大值。
此外,问题还存在线性约束。
我尝试使用scipy但没有成功,但在我尝试过的所有自由渐变求解器或近似渐变中,都无法插入线性约束。
我也尝试过使用cvxopt,但我没有找到任何自由渐变求解器或近似渐变。
此外,我不想使用遗传算法,PSO,和声搜索等工具。
我想使用自由渐变求解器或近似渐变来插入线性约束,如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)
有12个变量由向量X表示,有12个元素,这个向量必须等于1。这就是我的约束。
除此之外,每个变量都有不同的界限。因此解算器必须允许插入边界。
矢量X(所有12个变量),输入f和CONST_CVAR,创建矢量REC(1x2000),我的目标是最大化矢量REC的最大值。
通过这种方式,我需要一个允许的解算器:
有人可以建议任何解决方案吗?