在运筹学领域,运输问题是一个经典且实用的优化模型,旨在寻找最低成本的货物分配方案,以满足多个供应点向多个需求点的配送需求。运输问题可分为两类:产销平衡与产销不平衡。本文将以Lingo编程语言为例,介绍一个灵活的模型框架,既能处理标准的产销平衡情况,也能适应产销不平衡的。
数学模型
变量定义:
Xij:从供应点 𝑖i 到需求点 𝑗j 的运输量。
CAi:供应点 𝑖i 的供应量。
DEj:需求点 𝑗j 的需求量。
Coij:从供应点 𝑖i 到需求点 𝑗j 的单位运输成本。
目标函数:
最小化总运输成本:
Minimize Z =∑Coij⋅Xij
约束条件:
1、供应点供应量限制:
2、需求点需求量限制:
3、运输量限制(处理产销平衡和不平衡):
总供应量 𝑇𝑆,总需求量 𝑇𝐷,总运输量 𝑇𝑇

ligno代码如下:
```swift
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