在运筹学领域,运输问题是一个经典且实用的优化模型,旨在寻找最低成本的货物分配方案,以满足多个供应点向多个需求点的配送需求。运输问题可分为两类:产销平衡与产销不平衡。本文将以Lingo编程语言为例,介绍一个灵活的模型框架,既能处理标准的产销平衡情况,也能适应产销不平衡的。
模型概述
基础设定
- 供应点集合(Supply):假设有19个供应点,每个点有其特定的供应能力
CA
。 - 需求点集合(Market):涵盖14个需求点,每个点有特定的需求量
De
。 - 运输路径(ij):定义了每一对供应点到需求点的可能运输路径,包括每单位运输的成本
Co
及实际运输量X
。
3、总运输量约束(重要关键):不管是供不应求还是供过于求,总运输量为两者取小,从而有效处理了供不应求或供过于求的情况。
假设TS 代表总供应量,即所有供应点的供应能力之和;TD 代表总需求量,即所有需求点的需求量之和。那么,总运输量 TT 应当不超过这两个值中的较小者。
ligno代码如下:
Model
!By William ,2024/6/16;
SETS:
Supply /1..19/: CA; ! 定义供应点集合,有19个供应点,每个供应点有供应量CA;
Market /1..14/: De; ! 定义需求点集合,有14个需求点,每个需求点有需求量De;
ij(Supply, Market): Co, X; ! 定义运输路径集合,表示从任意供应点到任意需求点的路径,Co为单位运输成本,X为运输量;
ENDSETS
DATA:
Ca ,De , Co =@ole("gen_trans_data.xlsx") ; ! 从Excel文件gen_trans_data.xlsx中读取供应量CA、需求量De和单位运输成本Co的数据;
@ole("gen_trans_data.xlsx")=x ; ! 将解(即各路径的运输量X)写回同一个Excel文件;
ENDDATA
MIN = @SUM(ij: Co*X); ! 目标是最小化总运输成本,即所有路径运输量X乘以对应路径的单位成本Co之和;
TS=@sum(supply:Ca); ! 计算总供应量TS;
TD=@sum(market:De); ! 计算总需求量TD;
TT=@smin(TS,TD); ! 总运输量TT取TS和TD中的较小值;
TT=@sum(ij:X); ! 用总运输量对各运输量进行约束;
@FOR(Supply(I): @SUM(Market(J): X(I,J))<= CA(I)); ! 供应约束,确保每个供应点的总输出不超过其供应能力CA;
@FOR(Market(J): @SUM(Supply(I): X(I,J))<= De(J)); ! 需求约束,确保每个需求点的总输入不超过其需求量De;
end