全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
7054 2
2016-05-11
悬赏 200 个论坛币 未解决

Sets:

SI/1..5/:s;

SJ/1..4/:c;

SK/1..4/:q,u;

link1(SI,SJ):x,a,tij;

link2(SJ,SK):y,b,tjk;

endsets

data:

s=180,140,120,140,120;

q=200,160,220,80;

u=0.75,0.75,0.75,0.75;

capij=200;

capjk=100;

tij=0.56 12.22 7.97 3.33 13.33

    0.89 3.33 7.28 4.11 12.44

    1.28 15.11 6.78 3.6 12.22

    1.11 14.33 10.44 4.56 14.44;

tjk=1.6 2.34 3.4 2.7

    2 1.2 1.4 4

    3.5 3 1.3 5.2

    2 2.8 3.4 4.4;

enddata

min=@smax((tij(i,j)+tjk(j,k))*c(j));


@sum(SI(i): @sum(SJ(j): x(i,j)*a(i,j)))=@sum(SJ(j):@sum(SK(k):y(j,k)*b(j,k)));

#Index variables may not share names with other variables#


@for(SJ(j):

          @sum(SI(i): x(i,j)*a(i,j))=@sum(SK(k):y(j,k)*b(j,k)));


@for(SI(i):

         @sum( SJ(j):x(i,j)*a(i,j))<=s(i));


@for(SJ(j):

         @sum(SK(k):b(j,k))=c(j));

@for(SJ(j):

         @sum(SI(i):a(i,j))=c(j));


@for(SI(i):@for(SJ(j):x(i,j)*a(i,j)<=capij));

@for(SJ(j):@for(SK(k):y(j,k)*b(j,k)<=capjk));


@for(link1(i,j):@bin(a));

@for(link2(j,k):@bin(b));

@for(SJ(j):c(j)=a(i,j)*b(j,k));


@for(SK(k):@sum(SJ(j):y(j,k)*b(j,k))/q(k)>=u(k));


@for(SI(i):@for(SJ(j):x(i,j)>=0));

@for(SJ(j):@for(SK(k):y(j,k)>=0));

end




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2016-5-12 19:47:25
   其实我觉得程序中存在不少需要修改的地方,我简单看了一下,还有两处需要作者检查修改,已在程序中指出:
MODEL:
SETS:
SI/1..5/: S;
SJ/1..4/: C;
SK/1..4/: Q, U;
SIJ(SI, SJ): X, A, TIJ;
SJK(SJ, SK): Y, B, TJK;
ENDSETS
DATA:
S = 180, 140, 120, 140, 120;
Q = 200, 160, 220, 80;
U = 0.75, 0.75, 0.75, 0.75;
CAPIJ = 200;
CAPJK = 100;
TIJ = 0.56 12.22 7.97  3.33  13.33
      0.89 3.33  7.28  4.11  12.44
      1.28 15.11 6.78  3.6   12.22
      1.11 14.33 10.44 4.56  14.44;
TJK = 1.6 2.34 3.4 2.7
      2   1.2  1.4 4
      3.5 3    1.3 5.2
      2   2.8  3.4 4.4;
ENDDATA

min=@smax((tij(i,j)+tjk(j,k))*c(j));  ! maybe @max() function should be used, refer to manual for further help;

@SUM(SIJ(I, J): X(I, J)*A(I, J)) = @SUM(SJK(J, K): Y(J, K)*B(J, K));
@FOR(SJ(J): @SUM(SI(I): X(I, J)*A(I, J)) = @SUM(SK(K): Y(J, K)*B(J, K)));
@FOR(SI(I): @SUM(SJ(J): X(I, J)*A(I, J)) <= S(I));
@FOR(SJ(J): @SUM(SK(K): B(J, K)) = C(J));
@FOR(SJ(J): @SUM(SI(I): A(I, J)) = C(J));
@FOR(SIJ(I, J): X(I, J)*A(I, J) <= CAPIJ));
@FOR(SJK(J, K): Y(J, K)*B(J, K) <= CAPJK));

@for(SJ(j): c(j) = a(i, j)*b(j, k));  ! check please;

@FOR(SK(K): @SUM(SJ(J): Y(J, K)*B(J, K)) >= Q(K)*U(K));
@FOR(SIJ(I, J): @BIN(A(I, J)));
@FOR(SJK(J, K): @BIN(B(J, K)));
END

我想说明的是,目标函数你可能是需要使用@MAX()函数而不是@SMAX()函数,有一个约束明显不对,但是我不知道你本来需要表达什么,软件默认的取值范围下界是0,可以不必再在程序中指出。
总的来说,都是easy的语法问题,我不会再对此做回答了,论坛币我也不要。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2016-8-11 17:27:57
其实本程序最大的问题在于,目标函数。lingo好像默认目标函数值最小才行。
min=Tmax;
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群