2017-04-07 58 views
0

所以我有以下设置:GAMS定义+ 1

i 1,2,3,...,I 
j 1,2,3,...,J 
k 1,2,3,...,K with k´2,3,4,...,K 

我定义我的设置和我的参数通过GDX-进口通过Excel工作表,所以我可以改变设置以及动态参数,以便用线性规划模型进行计算研究。

如何用k'定义这种类型的集合,以便像d_kk'(从k到k'的距离)和t_jkk'这样的参数工作?

请记住,解决方案必须在每个指令的大范围内工作至少1,...,100。

非常感谢。 干杯, SAM

+1

请编辑您的问题以显示[迄今为止的代码](http://whathaveyoutried.com)。你至少应该包括一个你遇到问题的代码大纲(但最好是[mcve]),然后我们可以尝试帮助解决具体问题。你还应该阅读[问]。 –

+0

这个问题有点难以阅读。我认为你从Excel中得到的是一个集合'k',现在你想要一个集合'k1',它有一个较少的元素(第一个元素被丢弃)。这可以通过set k1(k)来完成。 k1(k)$(ord(k)> 1)= yes';总是用'display k1;'来检查。由于'k1'是一个动态集合,所以记得声明'参数d(k,k)'而不是'参数d(k,k1)'。 (在引用'd'时可以使用'd(k,k1)')。 –

回答

0

听起来像你想要计算集合k中不同点之间的距离。使用别名集和多维集:

Set i /1*I/ 
    j /1*J/ 
    k /1*K/ 
    kk(k,k); 
alias(ka,k); 

kk(k,ka)$(ord(k)<ord(ka))=yes; 

parameter 
    x(k) 'x-koordinate' 
    y(k) 'y-koordinate' 
    d(k,k) 'Distance from k to ka'; 

x(k)=uniform(0,1); 
y(k)=uniform(0,1); 

d(k,ka)$kk(k,ka)=sqrt((x(k)-x(ka))^2+(y(k)-y(ka))^2);