我很难从.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相同。 我不确定所附加的代码是否足够,因此如果缺少某些内容,请提前抱歉。
答案 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]