ILOG的一个基本应用——解决运输问题、转运问题

一、Ilog软件

该软件用来解决优化问题,大部分是线性问题,深一点的其他内容还不清楚。只知道一些基础的应用,网上相关内容很少。接下来就解决一个简单的运输问题

二、运输问题

 


数学模型


ILOG OPL程序

 

{string} CitiesA=...;
{string} CitiesB=...;
float capacity = ...;
float supply[CitiesA] =...;
float demand[CitiesB] =...;
assert    
    sum(o in CitiesA) supply[o] == sum(d in CitiesB) demand[d];
float cost[CitiesA][CitiesB] = ...;
dvar float+ trans[CitiesA][CitiesB];
constraint ct1;
constraint ct2;
constraint ct3;
minimize sum( o in CitiesA , d in CitiesB) cost[o][d] * trans[o,d];

subject to {
ct1=forall(o in CitiesA) 
	sum(d in CitiesB) trans[o][d] == supply[o]; 
ct2=forall(d in CitiesB) 
	sum(o in CitiesA) trans[o][d] == demand[d];
ct3=forall(o in CitiesA , d in CitiesB)
	trans[o,d] <= capacity;
} 

数据文件

 

 

CitiesA = { A1 A2 A3 A4 A5};
CitiesB={ B1  B2  B3  B4  B5  B6  B7 B8 };  
capacity  = 825;
supply =[ 400 700 800 450 550];
demand =[300 400 100 275 650 325 300 550];               
cost =[[ 30  10  8  10 11 71 6 50]
      [ 22   7 10   7 21 82 13 30]
      [ 19  11 12  10 25 83 15 26]
      [ 15  20 30  40 50 25 16 12]
      [ 10  49 23  50 28 43 56 20]
      ]; 
 

三、转运问题

 




Ilog opl实现

{string} CitiesA=...;
{string} CitiesB=...;
{string} CitiesC=...;
float capacity = ...;
float supply[CitiesA] =...;
float demand[CitiesB] =...;
float cost1[CitiesA][CitiesC] = ...;
float cost2[CitiesC][CitiesB]=...;
dvar float+ trans1[CitiesA][CitiesC];
dvar float+ trans2[CitiesC][CitiesB];
constraint ct1;
constraint ct2;
constraint ct3;
constraint ct4;
minimize sum( o in CitiesA , t in CitiesC) cost1[o][t] * trans1[o][t]+
		 sum( t in CitiesC , d in CitiesB) cost2[t][d] * trans2[t][d];

subject to {
ct1=forall(o in CitiesA) 
	sum(t in CitiesC) trans1[o][t] <= supply[o]; 
ct2=forall(d in CitiesB) 
	sum(t in CitiesC) trans2[t][d] == demand[d];
ct3=forall(t in CitiesC)
	sum(o in CitiesA)trans1[o][t] == sum(d in CitiesB)trans2[t][d];
ct4=forall(o in CitiesA,d in CitiesB,t in CitiesC)
{
    trans1[o,t]<=capacity;
    trans2[t,d]<=capacity;
}	
} 


数据

 

 

CitiesA = { A1 A2 A3};
CitiesB={ B1  B2  B3  B4  };  
CitiesC={C1 C2 C3 C4};
capacity  = 20;
supply =[7 4 9];
demand =[3 6 5 6];               
cost1 =[[2 1 4 3 ]
        [3 5 100 2 ]
        [1 100 2 3 ]
       ]; 
cost2=[[2 8 4 6]
       [4 5 2 7]
       [1 8 2 4]
       [1 100 2 6]
      ]; 


对于产地、转运站、销地之间都可以互相运输的复杂情况,建模不够理想,没有实现。

 








 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值