繁体   English   中英

Gekko 变量定义 - 初级 vrs。 效用决策变量

[英]Gekko Variable Definition - Primary vrs. Utility Decision Variable

我正在尝试根据一篇文章制定和解决优化问题。 作者引入了 2 个决策变量。 站点 i 在时间 t 的功率 P_i,t 和二进制变量 X_i,n 如果车辆 n 分配给站点 i,则该变量为 1。 他们引入了一些其他变量,称为效用变量。 例如,从站点 i 到时间 t 为车辆 n 输送的能量,E_i,t,n 是根据主要决策变量和一些固定参数计算的。

我的问题是我应该将实用程序变量定义为 Gekko 变量吗? 如果是,哪种类型更合适?

I = 4 # number of stations
T = 24 # hours of simulation 
N = 5 # number of vehicles

p = m.Array(m.Var,(I,T),lb=0,ub= params.ev.max_power)
x = m.Array(m.Var,(I,N),lb=0,ub=1, integer = True)

我是否应该如下定义 E 来求解这些方程作为示例? 这引入了不是主要决策变量的额外变量,并且是根据依赖于主要决策变量的其他项计算的。

E = m.Array(m.Var,(I,T,N),lb=0)

for i in range(I):
    for n in range(N):
        for t in range(T):
                    m.Equation(E[i][t][n] >= np.sum(0.25 * availability[n, :t] * p[i,:t]) - (M * (1 - x[i][n])))
                    m.Equation(E[i][t][n] <= np.sum(0.25 * availability[n, :t] * p[i,:t]) + (M * (1 - x[i][n])))
                    m.Equation(E[i][t][n] <= M * x[i][n])
                    m.Equation(E[i][t][n] >= -M * x[i][n])

所有这些变量定义和方程看起来都是正确的。 这里有一些建议:

  • 还没有定义availability[]变量。 如果availability是其他决策变量的 function,那么使用m.Intermediate()定义来定义它通常更有效。
  • 随着总决策变量总数的增加,计算时间通常会大幅增加。 我建议最初从一个小问题开始,然后扩大到更大的问题。
  • 尝试使用 gekko m.sum()而不是sumnp.sum()以获得更高效的计算。 使用m.sum()确实会增加 model 编译时间,但通常会减少优化求解时间,因此这是一种权衡。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM