Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法让Gekko处理中等大小的MINLP问题_Python_Nonlinear Optimization_Gekko - Fatal编程技术网

Python 无法让Gekko处理中等大小的MINLP问题

Python 无法让Gekko处理中等大小的MINLP问题,python,nonlinear-optimization,gekko,Python,Nonlinear Optimization,Gekko,我有一个问题,它是想最大化一个目标函数,这是一个比率 对象:sum(Ax)/Bx 对于具有相同维数的矩阵A和B(随机零和一)。这个问题是不受约束的。所以基本上我想找到一个由0和1组成的,使给定比率最大化的x 以下是我的问题(以下第2项)的最小可再现示例: 将numpy导入为np 作为pd进口熊猫 从gekko进口gekko #给定矩阵的列数和行数 C=43 R=20 #命名列,因为我需要使用数据帧 name=['n'+str(i)表示范围(C)内的i] names2=['d'+str(i)表示范

我有一个问题,它是想最大化一个目标函数,这是一个比率

对象:
sum(Ax)/Bx

对于具有相同维数的矩阵
A
B
(随机零和一)。这个问题是不受约束的。所以基本上我想找到一个由0和1组成的,使给定比率最大化的
x

以下是我的问题(以下第2项)的最小可再现示例:

将numpy导入为np
作为pd进口熊猫
从gekko进口gekko
#给定矩阵的列数和行数
C=43
R=20
#命名列,因为我需要使用数据帧
name=['n'+str(i)表示范围(C)内的i]
names2=['d'+str(i)表示范围(C)内的i]
#零和一随机分布的玩具示例
num=np.random.randint(2,size=(R,C))
den=np.random.randint(2,size=(R,C))
df_num=pd.DataFrame(列=名称,数据=num)
df_den=pd.DataFrame(列=names2,数据=den)
#启动Gekko模型
m=GEKKO(远程=False)
x=m.Array(m.Var,(df_num.shape[1]),lb=0,ub=1,integer=True)
对于x中的i:
i、 value=np.random.randint(2,size=1)[0]
m、 解算器_选项=['minlp_as_nlp 1']
ival1=m.mediate(df_num.mul(x).sum(1.sum())
ival2=m.mediate(df_den.mul(x).sum(1.sum())
m、 对象(-np.除法(ival1,ival2))
m、 options.SOLVER=1#APOPT SOLVER
m、 求解(disp=True)
我试着按照给出的说明和其他一些地方,所以我使用
minlp_as_nlp 1
选项来放松整数限制,并使用中间变量来查看它是否有帮助,但是,我无法让模型工作

基本上,会出现以下两个问题:

1。找不到解决方案(x为全零)

这时我遇到了一个非常小的问题(与上面的问题类似,但只有42列或更少,但是,我的实际问题范围从10k x 5e2到7e6 x 5e2)。我希望
x
能够找到最终的值,但它都是零。这是APM打印的内容:

----------------------------------------------------------------
APMonitor,版本0.9.2
APMonitor优化套件
----------------------------------------------------------------
---------APM模型尺寸------------
每个时间步骤包含
对象:0
常数:0
变量:42
中间体:2
连接:0
方程式:3
残差:1
状态变量数:42
方程式总数:-0
松弛变量的数量:-0
---------------------------------------
自由度:42
----------------------------------------------
APOPT求解器的稳态优化
----------------------------------------------
Iter:1I:0TM:0.04NLPI:18DPTH:0LVS:0OBJ:-2.17E+00间隙:0.00E+00
成功解决
---------------------------------------------------
解算器:APOPT(v1.0)
解决时间:4.78000000027940E-002秒
目标:-2.166667
成功解决
---------------------------------------------------
2。运行时错误

当我将列数增加到43(如上所述或更多)时,会出现以下错误(编辑以适应空间):

----------------------------------------------------------------
APMonitor,版本0.9.2
APMonitor优化套件
----------------------------------------------------------------
@错误:最大方程式长度
行号错误:48
i28=(((((((((((((((((((((((((((((((())(((((((((((())0)*(int
+((0)*(int_v2)))+((0)*(int_v3)))+((1)*(int_v4))+((1)*(int_v5)))+((1)*(int_v6))
)+((0)*(int_v7)))+((1)*(int_v8)))+((0)*(int_v9))+((1)*(int_v10)))+((0)*(int_v1)
.
.
.
_)+((0)*(int_v32)))+((0)*(int_v33)))+((1)*(int_v34))+((1)*(int_v35))+((1)
)*(国际货币单位v36))+((1)*(国际货币单位v37))+((0)*(国际货币单位v38))+((0)*(国际货币单位v39)))+((0)*(国际货币单位v40)
))+((0)*(int_v41))+((0)*(int_v42))+((1)*(int_v43)))
APM模型错误:字符串>15000个字符
把线分解成多个方程
也可能是因为仅使用换行符CR
而不是CR LF(适用于Windows)或LF(适用于MacOS/Linux)
要解决此问题,请使用适当的换行符保存APM文件
停止。。。
---------------------------------------------------------------------------
异常回溯(最后一次最近调用)
在里面
6M.Obj(-np.divide(ival1,ival2))
7 m.options.SOLVER=1
---->8 m.solve(disp=True)
/anaconda_env/personal/rafaeldasilv/py3/lib/python3.7/site-packages/gekko/gekko.py in solve(self、disp、debug、GUI、**kwargs)
2128打印(“错误:”,错误)
2129如果(调试>=1)并记录错误:
->2130 raise异常(apm_错误)
2131
2132其他:#在APM服务器上解决
异常:@错误:最大方程式长度
行号错误:48
i28=(((((((((((((((((((((((((((((((())(((((((((((())0)*(int
+((0)*(int_v2)))+((0)*(int_v3)))+((1)*(int_v4))+((1)*(int_v5)))+((1)*(int_v6))
)+((0)*(int_v7)))+((1)*(int_v8)))+((0)*(int_v9))+((1)*(int_v10)))+((0)*(int_v1)
1) )+((1)*(int_v12)))+((1)*(int_v13)))+((0)*(int_v14))+((1)*(int_v15))+((1)*(
.
.
.
)+((1)*(int_v27))+((0)*(int_v28)))+((1)*(int_v29))+((0)*(int_v30))+((0)*(int
_)+((0)*(int_v32)))+((0)*(int_v33)))+((1)*(int_v34))+((1)*(int_v35))+((1)
)*(国际货币单位v36))+((1)*(国际货币单位v37))+((0)*(国际货币单位v38))+((0)*(国际货币单位v39)))+((0)*(国际货币单位v40)
))+((0)*(int_v41))+((0)*(int_v42))+((1)*(int_v43)))
APM模型错误:字符串>`15000`个字符
把线分解成多个方程
也可能是因为仅使用换行符CR
而不是CR LF(适用于Windows)或LF(适用于MacOS/Linux)
若要解决此问题,请保存一个
 Iter    Objective  Convergence
   30 -2.19956E+00  1.30104E-18
   31 -2.19956E+00  6.93889E-18
   32 -2.19956E+00  6.93889E-18
 Successful solution
 
 ---------------------------------------------------
 Solver         :  APOPT (v1.0)
 Solution time  :  0.13 sec
 Objective      :  -2.1995600879824035
 Successful solution
 ---------------------------------------------------