0

我从 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

任何人都可以建议任何求解器吗?

4

0 回答 0