GAMS错误121-索引gdx数据时出现问题

时间:2018-07-23 17:16:44

标签: gams-math

我很难从.gdx文件中读取所需的数据。我已成功从Excel加载文件,但是当我尝试访问所需的索引时出现错误:

Sets


 t time intervals       / t1*t12 /   [b] !! set definition[/b]
   i customers          / c1*c5 /
   r row labels         /r1*r97/
   c column labels     /c1,c2,c3,c4,c5/;

parameter p(r,c);  [b]!! reading the table from Excel[/b]
$CALL GDXXRW Curve.xlsx trace=3 par=p rng=Sheet1!a1:f97 rdim=1 cdim=1
$gdxin Curve.gdx
$load p
$gdxin

parameter h; [b] !! reading the scalar[/b]
$CALL GDXXRW load.xlsx trace=3 par=h rng=Sheet1!i2:i2 dim=0
$GDXIN load.gdx
$LOAD h
$GDXIN

cost .. z =e= sum(t, maxLoad -  sum(i, u(i,t)*cons(i)*clpu(t)*p(h,i)));
current_load(t) ..  sum(i, u(i,t)*cons(i)*clpu(t)*p(i,h)) =l= maxLoad;

代码有多个错误,但是我遇到的第一个错误是在读取p(h,i)(粗体行)时。我需要来自gdx的数据,该数据也在我从其他gdx读取的h列中,并且第i行与我用于其他变量的i相同。 我不确定所附加的代码是否足够,因此如果缺少某些内容,请提前抱歉。

2 个答案:

答案 0 :(得分:0)

您将p(r,c)定义为参数。和h作为另一个参数。 p(h,I)没有意义。 使用参数p时,必须具有索引(r,c)。不是(h,I)。

答案 1 :(得分:0)

这就是问题所在。但是,我现在知道如何设置想要读取的所需索引。 以下代码解决了索引问题:

class CustomClass(object):

    def __getitem__(self, item):
        if item > 20:  # lets force the break so that it doesn't go to sys.maxsize
            raise IndexError()
        print(item)  # print the item requested
        # implied: return None so it doesn't match 5

result = 5 in CustomClass()  # this will keep printing numbers until 20

键在此ord()运算符中,该运算符将h值分配给索引r:(i,r)$ [ord(r)= h]