lingo-运输问题的数学模型

建模

变量

ai表示第i个工厂的加工量
bj表示第j个门市部的销量
cij表示运价,从第i个加工厂到第j个门市部运送一吨糖果的价格
决策变量:xij 从第i个加工厂到第j个门市部的糖果数量

一般形式

m i n z = ∑ ∑ c i j ∗ x i j s . t . { ∑ j x i j = a i ∑ i x i j = b j x i j ≥ 0 min z = \sum \sum cij * xij\\ s.t. \left\{ \begin{matrix} \sum_j xij = ai\\ \sum_i xij = bj\\ xij \geq 0 \end{matrix} \right. minz=∑∑cijxijs.t. jxij=aiixij=bjxij0

矩阵形式

A = [ 7 4 9 ] B = [ 3 6 5 6 ] C = [ 3 11 3 10 1 8 2 8 7 4 10 5 ] X = [ x 11 x 12 x 13 x 14 x 21 x 22 x 23 x 24 x 31 x 32 x 33 x 34 ] A = [\begin{matrix}7&4&9\end{matrix}] \\ B= [\begin{matrix}3&6&5&6\end{matrix}] \\ C=\left [ \begin{matrix} 3&11&3&10\\ 1&8&2&8\\ 7&4&10&5 \end{matrix} \right]\\ X = \left [ \begin{matrix} x_{11}&x_{12}&x_{13}&x_{14}\\ x_{21}&x_{22}&x_{23}&x_{24}\\ x_{31}&x_{32}&x_{33}&x_{34}\\ \end{matrix} \right] A=[749]B=[3656]C= 317118432101085 X= x11x21x31x12x22x32x13x23x33x14x24x34

Lingo 建立模型

方法

定义集合
给常量赋值
目标函数的表达
约束条件的表达
模型求解

定义集合

! 建立加工厂集合及产量;
factory/1..3/:A;
! 建立门市部集合及产量;
shop/1..4/:B;
!建立联系集合及运价和运量,派生集合,双下标变量;
LINK(factory,shop):C,X;

给常量赋值

DATA:
	A = 7 4 9;
	B = 3 6 5 6;
	C = 
	3 11 3 10
	1 9 2 8
	7 4 10 5;
ENDDATA

目标函数的表达

m i n z = ∑ ∑ c i j ∗ x i j min z = \sum \sum cij * xij minz=∑∑cijxij

MIN = @SUM (LINK(i,j): C(i,j) * X(i,j));

约束条件的表达

1.产量约束
∑ j x i j = a i \sum_j xij = ai jxij=ai

@for(factory(i): @sum(shop(j): x(i,j)) = A(i));

2.销量约束
∑ i x i j = b j \sum_i xij = bj ixij=bj

@for(shop(j): @sum(factory(i): x(i,j)) = b(j));

3.自身约束
x i j ≥ 0 xij \geq 0 xij0
lingo 默认非负

完整代码

MODEL:
	SETS:
	factory/1..3/:A;
	shop/1..4/:B;
	LINK(factory,shop):C,X;
	ENDSETS
	
	DATA:
	A = 7 4 9;
	B = 3 6 5 6;
	C = 
	3 11 3 10
	1 9 2 8
	7 4 10 5;
	ENDDATA
	
	MIN = @SUM (LINK(i,j): C(i,j) * X(i,j));
	@for(factory(i): @sum(shop(j): x(i,j)) = A(i));
	@for(shop(j): @sum(factory(i): x(i,j)) = b(j));
END
### 使用Lingo求解经典运输问题 #### 定义集合与参数 为了构建有效的运输问题模型,在LINGO中首先要定义涉及的集合及其属性。对于供应点和需求点,可以分别创建两个集合并赋予相应的容量和需求量。 ```plaintext sets: supply /1..19/: CA; ! Supply points and their capacities; market /1..14/: De; ! Market points and demands; link(supply, market): Co, X; ! Links between supply and markets with costs and flows; endsets ``` 此部分设定了供应节点、市场节点以及两者之间的连接关系,并指明了各条链路上的成本`Co`及流量`X`[^1]。 #### 给定数据初始化 接着是对上述提到的各种变量进行具体数值上的初始化操作,这通常通过读取外部文件或直接在程序内部指定来完成。这里简化表示如下: ```plaintext data: CA = ... ; ! Capacities of supplies; De = ... ; ! Demands at markets; Co = ... ; ! Costs on links; enddata ``` 这些语句用于输入具体的供应能力和市场需求值,还有各个路径上单位产品的运费信息[^2]。 #### 构造目标函数 接下来就是建立最小化总运输费用的目标方程。该过程涉及到遍历所有的`(i,j)`组合计算总的花费并将其作为优化方向。 ```plaintext min=@sum(link(i,j): Co(i,j)*X(i,j)); ``` 这条命令指示LINGO尝试找到一种分配方式使得所有选定路线上传输的产品所付出的价格之和达到最低水平。 #### 添加约束条件 最后一步是加入必要的限制条款以确保解决方案合理可行。主要包括两方面的要求——一是保证每个供应商发出的商品总量不超过自身的生产能力;二是确认每一个接收端得到的数量正好等于事先声明的需求量。 ```plaintext @for(supply(i): @sum(market(j): X(i,j))<=CA(i);); @for(market(j): @sum(supply(i): X(i,j))=De(j);); ``` 以上两条规则分别控制着发货上限不超出库存限额和平稳满足各地消费者期望获取的数量。 综上所述,完整的LINGO代码片段应包含前述四个主要组成部分:定义结构体、设置初始值、设立目的式子、附加限定说明。这样便能有效地利用这一工具软件去探索最优物流调配策略[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值