数学建模社区-数学中国

标题: 跪求大神解答啊 [打印本页]

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

  11. !***********************************************************************
  12. !工厂总生产量;
  13. @for(plants(k):
  14. @sum(warehouses(I): volume1(k,I))=totalprod);
  15. !工厂产能约束;
  16. @for(plants(k):
  17. @sum(warehouses(I): volume1(k,I))<=capacity1(k));

  18. !配送中心处理量;
  19. @for(warehouses(I):
  20. @sum(customers(J): volume2(I,J))=totalhold);
  21. !配送中心容量约束;
  22. @for(warehouses(I):
  23. @sum(customers(J): volume2(I,J))<=capacity2(I));
  24. !配送中心流量平衡;
  25. @for(warehouses(I):
  26. @sum(customers(J): volume2(I,J))=@sum(plants(k): volume1(k,I)));
  27. !***********************************************************************
  28. !需求约束;
  29. @for(customers(J):
  30. @sum(warehouses(I): volume2(I,J))=demand(J));


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

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

  67. end
复制代码





欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5