GAMS中最有效的集合顺序是什么



文档建议集合应该以相同的顺序出现以提高性能。如果我们的大多数变量共享一个集合,那么首先使用公共集合还是最后使用公共集合更好?

即哪一个更有效?

y[i,t] =E= a[t] * x[j,t];

y[t,i] =E= a[t] * x[t,j];

这个"相同顺序"的要点是,集合应该按照它们被控制的顺序使用。所以

Equation1(t,i,j).. y[t,i] =E= a[t] * x[t,j];

应该比更好

Equation2(i,j,t).. y[t,i] =E= a[t] * x[t,j];

除此之外,给出许多一般规则并不容易。如果你也可以完全控制控制索引,如果最大的集合是最后一个,那么这通常是有益的,所以如果t >> i,那么x[i,t]应该比x[t,i]更好。通常,GAMS命令行参数profile(https://www.gams.com/latest/docs/UG_GamsCall.html#GAMSAOprofile)对于检查模式的不同配方的影响非常有用。

如果有人偶然发现了这一点,那么上下文就是一个大型动态经济模型。

我们试着将我们的时间指数从总是最后一盘切换到总是第一盘。该模型是一个由大约1米方程和7米雅可比元素组成的正方形系统,其中2米是非线性的。

改变后,使用CONOPT4的溶液时间明显变差。也就是说,尽管时间指数是模型中最大的集合之一,但我们在最后一个时间指数比第一个时间指数的性能更好。这一结果可能无法转移到其他模型中,但证实了没有微不足道的答案。

最新更新