阳光与你同在 发表于 2014-4-29 16:41

跪求大神解答啊

各位大侠  帮帮忙啊  鄙人在lingo求解物流网络时遇到点问题
代码中的0 1变量r和t不知为何始终显示为1
按照预期目标他们应该在工厂产量或者配送中心处理量不为0时候才能为1的,但是现在在配送中心WH2处理量为0时候r仍为1.
详情参见代码运行后结果:ln67,ln177~ln184.。。。。。。。。sets:
plants/p1..p5/: capacity1,fixfee1,t,prodfee,totalprod;!fixfee表示工厂p的固定费用,t为0 1变量表示工厂是否被选中,prodfee表示工厂生产单件产品费用,totalprod表示某工厂的总产量;
!以上是添加的工厂;
warehouses/wh1..wh5/: capacity2,fixfee2,r,holdfee,totalhold; !fixfee2表示配送中心的固定费用,r为0 1变量表示配送中心是否被选中,holdfee为处理费用,totalhold表示配送中心总的处理量即其流量;
customers/v1..v8/: demand;
links(plants,warehouses): cost1, volume1;!这个是工厂与配送中心的关系;
link(warehouses,customers): cost2, volume2;
endsets
@for(warehouses:@bin(r));
@for(plants:@bin(t));

!***********************************************************************
!工厂总生产量;
@for(plants(k):
@sum(warehouses(I): volume1(k,I))=totalprod);
!工厂产能约束;
@for(plants(k):
@sum(warehouses(I): volume1(k,I))<=capacity1(k));

!配送中心处理量;
@for(warehouses(I):
@sum(customers(J): volume2(I,J))=totalhold);
!配送中心容量约束;
@for(warehouses(I):
@sum(customers(J): volume2(I,J))<=capacity2(I));
!配送中心流量平衡;
@for(warehouses(I):
@sum(customers(J): volume2(I,J))=@sum(plants(k): volume1(k,I)));
!***********************************************************************
!需求约束;
@for(customers(J):
@sum(warehouses(I): volume2(I,J))=demand(J));


!########固定费用部分的0 1变量表示。#######;
@for(warehouses(I):
  ! r(I)>=(@sum(customers(J): volume2(I,J)) +1)/(@sum(customers(J): volume2(I,J)) +1));         
   r(I)=@if(totalhold #gt# 0, 1,0));
@for(plants(k):
  ! t(k)>=(@sum(warehouses(I): volume1(k,I)) +1)/(@sum(warehouses(I): volume1(k,I)) +1));         
   t(k)=@if(totalprod #gt# 0, 1,0));
                                     !#######每个plant / warehouse的固定费用,如果palnt / warehouse的产量 /流量不为零,表示其被选中,则其相应的费用要被计入总成本#####;
!########固定费用部分的0 1变量表示。#######;
!目标函数;
min=@sum(links: cost1*volume1)+@sum(link:cost2*volume2)+@sum(warehouses:fixfee2*r)+@sum(warehouses:holdfee*totalhold)
    +@sum(plants:fixfee1*t)+@sum(plants:prodfee*totalprod);

!数据部分;
data:
!工厂数据;
capacity1=160 90 110 80 100;
fixfee1=0 0 0 60 75;
prodfee=39 45 40 47 43;
!配送中心数据;
capacity2=95 100 80 130 95;
fixfee2=0 0 0 20 15;
holdfee=3 4 2 3 4;
!顾客数据;
demand=45 55 49 53 53 40 52 46;
!运输费用;
cost1=800 1000 700 500 750
      900 860 1200 900 700
      800 600 500 400 350
      500 680 700 700 900
      700 710 500 1000 550;     
cost2=6 2 6 7 4 2 9 5
      40 90 50 30 80 50 80 20
      5 2 1 9 7 4 3 3
      7 6 7 3 9 2 7 1
      2 3 9 5 7 2 6 5;
enddata

end
页: [1]
查看完整版本: 跪求大神解答啊