其他分享
首页 > 其他分享> > ILOG OPL的一个简单应用——解决运输问题、转运问题

ILOG OPL的一个简单应用——解决运输问题、转运问题

作者:互联网

原文链接:https://blog.csdn.net/lszdh/article/details/13766455

一、Ilog软件

该软件用来解决优化问题,还可以和其他语言如c++结合调用,深一点的其他内容还不清楚。只知道一些基础的应用,网上相关内容很少。ILOG CPLEX挺强大,接下来用OPL就解决一个简单的运输问题

二、运输问题
在这里插入图片描述

数学模型
在这里插入图片描述

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]
];

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

标签:constraint,sum,float,CitiesA,CitiesB,CitiesC,转运,OPL,ILOG
来源: https://blog.csdn.net/Allure392491308/article/details/98647138