绝了,通用Lingo模型巧解运输问题:通用产销平衡与不平衡

133 阅读2分钟

在运筹学领域,运输问题是一个经典且实用的优化模型,旨在寻找最低成本的货物分配方案,以满足多个供应点向多个需求点的配送需求。运输问题可分为两类:产销平衡与产销不平衡。本文将以Lingo编程语言为例,介绍一个灵活的模型框架,既能处理标准的产销平衡情况,也能适应产销不平衡的。

数学模型

变量定义

    Xij:从供应点 𝑖i 到需求点 𝑗j 的运输量。

    CAi:供应点 𝑖i 的供应量。

    DEj:需求点 𝑗j 的需求量。

    Coij:从供应点 𝑖i 到需求点 𝑗j 的单位运输成本。

目标函数:

最小化总运输成本:

    Minimize Z =∑Coij⋅Xij

约束条件:

1、供应点供应量限制:

2、需求点需求量限制:

3、运输量限制(处理产销平衡和不平衡):

总供应量 𝑇𝑆,总需求量 𝑇𝐷,总运输量 𝑇𝑇

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