百度经验
页面数据加载中...
一. 运输模型
设有m个产地A1,…,Am其产量(供应量)分别为Si;n个销地B1,…,Bn,其销量(需求量)分别为Dj;从产地A;运往销地B;的运费为Cij.假设产销平衡,问如何安排运输方案能使总运费最小?
这就是经典的运输问题,设从A;运往B,的运量为xj(决策变量),则建立产销平衡的运输模型,其中,约束条件 (1) 表示从i地运出量等于i地的供应量;约束条件 (2) 表示运往j地的运量等于j地的需求量。
若约束 (1) 若改为 <= , 约束 (2) 仍为 = ,则为产大于销的运输模型;
若约束 (2) 若改为 <= , 约束 (1) 仍为=,则为销大于产的运输模型。
用Lingo求解,只需要将上述模型按照Lingo语法表示出来,而不用操心任何求解细节。
例1某公司从三个产地A1,A2,A3,A4将产品运往四个销地B1,B2,B3,B4各产地的产量,各销地的销量,及各产地往各销地的运费单价如表所示。应如何调运可使运费最小?
建立运输模型(产销平衡),如下图所示:
Lingo版本为:Lingo 17 X64 商业版,代码如下图所示
Lingo代码如下:
sets:
supplys/1..3/: S;
demands/1..4/: D;
links(supplys, demands): c, x;
endsets
data:
S = 7,4,9;
D = 3,6,5,6;
c = 3 11 3 10
1 9 2 8
7 4 10 5;
enddata
min = @sum(links(i,j): c(i,j) * x(i,j));
@for(supplys(i): @sum(demands(j): x(i,j)) = S(i));
@for(demands(j): @sum(supplys(i): x(i,j)) = D(j));
运行结果(部分)如下图所示,结果解释:最优运费是85,运输方案是:S1往D3、D4分别运送5和2;S2往D1、D4分别运送3和1;S3往D2、D4分别运送6和3.
4. 目标与约束段部分
为什么不叫模型段呢,是因为Lingo一般是把全部代码放在 model: ....... end 中间(就解决一个问题,省略也行),整个叫做模型段。该部分就是把模型公式“原样”表述出来,咱们对照着来看: