lyfsky 发表于 2017-3-16 22:34

求大神帮我看看这个程序问题出在哪

model:
sets:
house/1,2,3/:m,v;
cargo/1,2,3,4/:p,q,c;
link(house,cargo):x;
endsets
data:
!每个货舱所能容纳的最大质量;
m=10,16,8;
!每个货舱所能容纳的最大体积;
v=6800,8700,5300;
!每种货物的质量;
p=18,15,23,12;
!每种货物的体积(m^3*t^-1);
q=480,650,580,390;
!每种货物的利润;
c=3100,3800,3500,2850;
enddata
!目标;
max=@sum(link(i,j):x(i,j)*c(j));
!约束条件;
@for(house(i):@sum(cargo(j):x(i,j)/m(i))=@sum(cargo(j):x(i+1,j)/m(i+1)));
@for(house(i):@sum(cargo(j): x(i,j)<=m(i));
@for(house(i):@sum(cargo(j):x(i,j)*q(j)<=v(i)));
@for(cargo(j):@sum(house(i):x(i,j)<=p(j)));


liwenhui 发表于 2017-3-17 09:28

这样就可以了:model:
sets:
house/1,2,3/:m,v;
cargo/1,2,3,4/:p,q,c;
link(house,cargo):x;
endsets
data:
!每个货舱所能容纳的最大质量;
m=10,16,8;
!每个货舱所能容纳的最大体积;
v=6800,8700,5300;
!每种货物的质量;
p=18,15,23,12;
!每种货物的体积(m^3*t^-1);
q=480,650,580,390;
!每种货物的利润;
c=3100,3800,3500,2850;
enddata
!目标;
max=@sum(link(i,j):x(i,j)*c(j));
!约束条件;
@for(house(i):@sum(cargo(j):x(i,j)/m(i))=@sum(cargo(j)|i#le#2:x(i+1,j)/m(i+1)));
@for(house(i):@sum(cargo(j): x(i,j))<=m(i));
@for(house(i):@sum(cargo(j):x(i,j)*q(j))<=v(i));
@for(cargo(j):@sum(house(i):x(i,j))<=p(j));
end运行结果:  Global optimal solution found.
  Objective value:                              0.000000
  Infeasibilities:                              0.000000
  Total solver iterations:                             0

  Model Class:                                        LP

  Total variables:                     12
  Nonlinear variables:                  0
  Integer variables:                    0

  Total constraints:                   14
  Nonlinear constraints:                0

  Total nonzeros:                      68
  Nonlinear nonzeros:                   0

                                Variable           Value        Reduced Cost
                                   M( 1)        10.00000            0.000000
                                   M( 2)        16.00000            0.000000
                                   M( 3)        8.000000            0.000000
                                   V( 1)        6800.000            0.000000
                                   V( 2)        8700.000            0.000000
                                   V( 3)        5300.000            0.000000
                                   P( 1)        18.00000            0.000000
                                   P( 2)        15.00000            0.000000
                                   P( 3)        23.00000            0.000000
                                   P( 4)        12.00000            0.000000
                                   Q( 1)        480.0000            0.000000
                                   Q( 2)        650.0000            0.000000
                                   Q( 3)        580.0000            0.000000
                                   Q( 4)        390.0000            0.000000
                                   C( 1)        3100.000            0.000000
                                   C( 2)        3800.000            0.000000
                                   C( 3)        3500.000            0.000000
                                   C( 4)        2850.000            0.000000
                                X( 1, 1)        0.000000            700.0000
                                X( 1, 2)        0.000000            0.000000
                                X( 1, 3)        0.000000            300.0000
                                X( 1, 4)        0.000000            950.0000
                                X( 2, 1)        0.000000            700.0000
                                X( 2, 2)        0.000000            0.000000
                                X( 2, 3)        0.000000            300.0000
                                X( 2, 4)        0.000000            950.0000
                                X( 3, 1)        0.000000            700.0000
                                X( 3, 2)        0.000000            0.000000
                                X( 3, 3)        0.000000            300.0000
                                X( 3, 4)        0.000000            950.0000

                                     Row    Slack or Surplus      Dual Price
                                       1        0.000000            1.000000
                                       2        0.000000            38000.00
                                       3        0.000000            98800.00
                                       4        0.000000            129200.0
                                       5        10.00000            0.000000
                                       6        16.00000            0.000000
                                       7        8.000000            0.000000
                                       8        6800.000            0.000000
                                       9        8700.000            0.000000
                                      10        5300.000            0.000000
                                      11        18.00000            0.000000
                                      12        15.00000            0.000000
                                      13        23.00000            0.000000
                                      14        12.00000            0.000000

liwenhui 发表于 2017-3-17 09:31

好像解都是0。你再考虑一下你的模型吧。
页: [1]
查看完整版本: 求大神帮我看看这个程序问题出在哪