[英]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()
定义来定义它通常更有效。m.sum()
而不是sum
或np.sum()
以获得更高效的计算。 使用m.sum()
确实会增加 model 编译时间,但通常会减少优化求解时间,因此这是一种权衡。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.