使用线性约束最小化非线性和可微分黑盒函数。 - Python

时间:2018-03-13 12:53:19

标签: python constraints bounds nonlinear-optimization black-box

我是从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的最大值。

通过这种方式,我需要一个允许的解算器:

  • 自由渐变或近似渐变
  • 线性约束
  • 非线性功能
  • 的Python

有人可以建议任何解决方案吗?

0 个答案:

没有答案