【发布时间】:2018-03-09 17:14:09
【问题描述】:
我的 GAMS 代码和 GAMS 代码在 Ruby 中的实现存在问题。我知道 GAMS 不是最受欢迎的程序,但也许有人可以帮助我。 我有一个模型,我尝试将孩子最佳地分配到幼儿园。这是代码的基本示例:
Sets
i Child
j Kindergarten
l Links
LI(l,i), LJ(l,j);
Parameters
a(j) accessibility
C(j) Capacity of Kindergartens
ch Capacity for handicapped children
d(i,j) distance
da(i) distance average
h(i) handicapped children
p(i,j) preferences
s(i,j) siblings;
Binary Variables
x(i,j) 1 if child i is allocated to kindergarten j;
Free Variables
ZFW Zielfunktionswert;
*----- Iclude -----
$include ...
da(i) = sum(j, d(i,j)) / card(j);
*----- Deklaration -----
Equations
ZF objective function
Zuordnung every child is assigned to one kindergarten
Kapa the capacity of the kindergarten must be maintained
Behin handicapped children are only assigned to suitable kindergartens;
ZF.. ZFW =E= sum((i,j), x(i,j) * (p(i,j)/s(i,j)) * (d(i,j)/da(i)));
Zuordnung(i).. sum(j, x(i,j)) =E= 1;
Kapa(j).. sum(i, x(i,j) * (1 - h(i))) + sum(i, x(i,j) * h(i) * ch) =L= C(j);
Behin(i,j).. x(i,j) * h(i) =L= a(j);
Model KiGaOpt /all/;
Solve KiGaOpt using MIP minimizing ZFW;
display x.l;
我还有一个包含文件,我在其中定义参数。我的问题是,我想在 Ruby 中实现它,并且我想使用链接(l)代替循环来处理 i 和 j 之间的关系。 我知道,我必须根据 l 替换所有 i 和 j。但是每次我尝试这个时,我都会收到一条错误消息。我已经把它写成这个表格,我每次都用 l 替换参数依赖于 i 和 j 的地方。但我对其余部分有疑问。
Sets
i Child
j Kindergarten
l Links
LI(l,i), LJ(l,j);
Parameters
a(j) accessibility
C(j) Capacity of Kindergartens
ch Capacity for handicapped children
d(l) distance
da(i) distance average
h(i) handicapped children
p(l) preferences
s(l) siblings;
Binary Variables
x(l) 1 if child i is allocated to kindergarten j;
Free Variables
ZFW Zielfunktionswert;
*----- Iclude -----
$include ...
da(i) = sum(l$LI(l,i), d(l)) / card(j);
*----- Deklaration -----
Equations
ZF objective function
Zuordnung every child is assigned to one kindergarten
Kapa the capacity of the kindergarten must be maintained
Behin handicapped children are only assigned to suitable kindergartens;
ZF.. ZFW =E= sum(l, x(l) * (p(l)/s(l)) * (d(l)/da(i)));
Zuordnung(i).. sum(l$LI(l,i), x(l)) =E= 1;
Kapa(j).. sum(l$LJ(l,j), x(l) * (1 - h(i))) + sum(l$LJ(l,j), x(l) * h(i) * ch) =L= C(j);
Behin(i,j).. x(l) * h(i) =L= a(j);
Model KiGaOpt /all/;
Solve KiGaOpt using MIP minimizing ZFW;
display x.l;
我的包含文件如下所示:
Sets
i /i1*i5/
j /j1*j2/
l /l1*l10/;
LI(l,i) = no;
LJ(l,j) = no;
LI( 'l1', 'i1') = yes;
LJ( 'l1', 'j1') = yes;
LI( 'l2', 'i1') = yes;
LJ( 'l2', 'j2') = yes;
LI( 'l3', 'i2') = yes;
LJ( 'l3', 'j1') = yes;
LI( 'l4', 'i2') = yes;
LJ( 'l4', 'j2') = yes;
LI( 'l5', 'i3') = yes;
LJ( 'l5', 'j1') = yes;
LI( 'l6', 'i3') = yes;
LJ( 'l6', 'j2') = yes;
LI( 'l7', 'i4') = yes;
LJ( 'l7', 'j1') = yes;
LI( 'l8', 'i4') = yes;
LJ( 'l8', 'j2') = yes;
LI( 'l9', 'i5') = yes;
LJ( 'l9', 'j1') = yes;
LI( 'l10', 'i5') = yes;
LJ( 'l10', 'j2') = yes;
Parameters
a(j)
/j1 1
j2 0/
h(i)
/i1 1
i2 0
i3 0
i4 0
i5 1/
C(j)
/j1 100
j2 100/
ch /2/;
Table p(i,j)
j1 j2
i1 10 1
i2 10 1
i3 10 1
i4 10 1
i5 10 1 ;
Table d(i,j)
j1 j2
i1 1 4
i2 2 1
i3 1 1
i4 1 2
i5 2 10.2 ;
Table s(i,j)
j1 j2
i1 5 1
i2 1 1
i3 1 1
i4 1 1
i5 1 1 ;
有人可以帮我重新排列我的模型和包含数据吗?
谢谢!
【问题讨论】: