lingo-派生集合之稀疏集合的应用-最短路-网络最大流

语法格式

派生集合的名字(父集合1,父集合2,。。。)【/元素列表/】【:属性列表】

直接罗列法

e.g.

factory/A1..A3/;
shop/B1..B4/;
link(factory,shop)
/A1 B1,A1 B2,
A2 B3, A2 B4,
A3 B1/;

元素过滤法

e.g.

factory/A1..A3/;
shop/B1..B4/;
link(factory,shop)| &1 #le# &2;

最短路径问题的整数规划

题目

在这里插入图片描述

数学建模

变量

决策变量
xij = 1 表示源点到终点的最短路经过弧(i,j)
xij = 0 表示不经过弧(i,j)
u = {A,B,C,D,E,F,G} 表示所有点
λ = { ( A , B ) , ( A , C ) . . } \lambda = \{(A,B),(A,C)..\} λ={(A,B),(A,C)..} 表示所有路

约束条件

如果经过i,那么有进有出;否则无进无出
必须有一条从A出去的路
必须有一条到G的路
m i n z = ∑ w i j ∗ x i j s . t . { ∑ x i j = ∑ x j i ∑ x A i = 1 ∑ x i G = 1 x ∈ { 0 , 1 } ( i , j ) ∈ λ min z = \sum wij * xij\\ s.t.\left\{ \begin{matrix} \sum x_{ij} = \sum x_{ji}\\ \sum x_{Ai} = 1\\ \sum x_{iG} = 1\\ x \in \{0,1\} (i,j) \in \lambda \end{matrix} \right. minz=wijxijs.t. xij=xjixAi=1xiG=1x{0,1}(i,j)λ

lingo建模

完整代码

model:
	sets:
		city/1 2 3 4 5 6 7/;
		link(city,city)/
			1 2,1 3,
			2 4,2 5,2 6,
			3 4,
			3 5,3 6,
			4 7,
			5 7,
			6 7/:w,x;
	endsets
	data:
		w = 
			2 4
			3 5 1
			2 3 6
			4
			3
			5;
	enddata
	min = @sum(link(i,j): w(i,j) * x(i,j));
	@for(city(i)| i #NE# 1 #AND# i #NE# 7:
		@sum(link(i,j):x(i,j)) 
		= 
		@sum(link(k,i):x(k,i))
		);

	@sum(link(i,j)|i #EQ# 1:x(i,j)) = 1;
	@sum(link(i,j)|j #EQ# 7:x(i,j)) = 1;
	@for(link(i,j):@bin(x(i,j)));
end

网络最大流

题目

在这里插入图片描述

数学模型

变量

决策变量 fij 是达到最大流时,弧(i,j)的实际流量,小于等于wij
决策变量 fmax 是最大流量,=起点流出的所有 = 终点流入的所有
m a x z = f m a x s . t . { ∑ f i j − ∑ f j i = { f m a x , i = 1 − f m a x , i = 7 0 , i ≠ 1 , 7 0 ≤ f i j ≤ w i j max z = fmax\\ s.t. \left\{ \begin{matrix} \sum fij - \sum fji =\left\{ \begin{matrix} fmax,i = 1\\ -fmax,i = 7\\ 0,i\neq 1,7\\ \end{matrix} \right.\\ 0 \leq fij \leq wij \end{matrix} \right. maxz=fmaxs.t. fijfji= fmax,i=1fmax,i=70,i=1,70fijwij

lingo 建模

完整代码

model:
	sets:
	city/1 2 3 4 5 6 7/;
	road(city,city)/
	1 2, 1 3, 1 4,
	2 3, 2 5, 
	3 4, 3 5, 3 6,
	4 6,
	5 6, 5 7 ,
	6 7/: w,f;
	endsets
	data:
	w = 
	8 10 12
	3 6
	4 7 4
	8
	9 8 
	10;
	enddata
	max = fmax;

	! @size is to calculate the sizi of city,in this example,it returns 7;
	N = @size(city);
	@sum(road(i,j)|i #eq# 1:f(i,j)) = fmax;
	@sum(road(i,j)|j #eq# N:f(i,j)) = fmax;
	@for(city(i)|
		i #gt# 1 #and# i #lt# N: 
		@sum(road(i,j):f(i,j))
 		=
		@sum(road(j,i):f(j,i))	
		);
	@for(road(i,j):f(i,j) <= w(i,j));		
end
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值