知识点

拓扑排序

拓扑排序的+Leapms模型

无圈有向图

一个图G(V,E), 如果边有向且不存在回路,则为无圈有向图。在无圈有向图上可以定义拓扑排序。下图是一个无圈有向图的例子。

拓扑排序

给定一个无圈有向图G(V,E),对其顶点集合V中的元素进行排序,使得对任何两个顶点v1,v2,如果(v1,v2)是图上的一条边,则在排序中v1优先于v2.

拓扑排序的+Leapms模型

对图G(V,E)中的边的表示可以用其起始边和终止边表示,对第k条边,其起始定点使用函数alpha[k]表示,其终止顶点用beta[k]表示。

设m是图中的边数,n是图中的顶点数。设x[i]是顶点i的次序数(拓扑排序中允许并列次序,例如并列第2等等)。

于是对任意一条边,其终止顶点的次序数一定至少比其起始顶点的次序数大至少1。于是有约束:

x[bata[k]]>=x[alpha[k]]+1 | k=1,...,m

希望至少从1开始编号次序数,于是有另外的约束:

x[i]>=1|i=1,...,n

为了对次序数进行紧凑编号,模型的目标设为极小化所有次序数的和:

min sum{i=1,...,n}x[i]

完整的+Leapms模型为:

min sum{i=1,...,n}x[i]
subject to
x[bata[k]]>=x[alpha[k]]+1 | k=1,...,m
x[i]>=1|i=1,...,n where
m,n are integers
e is a set
alpha[k],bata[k] are integers| k=1,...,m
x[i] is a variable of nonnegative number| i=1,...,n data_relation
m=_$(e)/2
alpha[k]=e[2k-1] | k=1,...,m
bata[k]=e[2k] | k=1,...,m
n=0
n=max(n,alpha[k]) | k=1,...,m
n=max(n,bata[k]) | k=1,...,m data
e={
(1 2)
(1 3)
(1 4)
(2 3)
(2 5)
(3 5)
(3 6)
(4 6)
(4 7)
(5 6)
(5 8)
(6 8)
(6 9)
(7 6)
(7 10)
(8 9)
(8 11)
(9 11)
(10 9)
(10 11)
}

求解过程

+Leapms>load
Current directory is "ROOT".
.........
toposort.leap
.........
please input the filename:toposort
================================================================
1: // x[i] 是 i点的拓扑排序层次
2:
3: min sum{i=1,...,n}x[i]
4: subject to
5: x[bata[k]]>=x[alpha[k]]+1 | k=1,...,m
6: x[i]>=1|i=1,...,n
7:
8: where
9: m,n are integers
10: e is a set
11: alpha[k],bata[k] are integers| k=1,...,m
12: x[i] is a variable of nonnegative number| i=1,...,n
13:
14: data_relation
15: m=_$(e)/2
16: alpha[k]=e[2k-1] | k=1,...,m
17: bata[k]=e[2k] | k=1,...,m
18: n=0
19: n=max(n,alpha[k]) | k=1,...,m
20: n=max(n,bata[k]) | k=1,...,m
21:
22: data
23: e={
24: (1 2)
25: (1 3)
26: 1 4
27: 2 3
28: 2 5
29: 3 5
30: 3 6
31: 4 6
32: 4 7
33: 5 6
34: 5 8
35: 6 8
36: 6 9
37: 7 6
38: 7 10
39: 8 9
40: 8 11
41: 9 11
42: 10 9
43: 10 11
44: }
================================================================
>>end of the file.
Parsing model:
1D
2R
3V
4O
5C
6S
7End.
..................................
number of variables=11
number of constraints=31
..................................
+Leapms>mip
relexed_solution=45; number_of_nodes_branched=0; memindex=(2,2)
The Problem is solved to optimal as an MIP.
找到整数规划的最优解.非零变量值和最优目标值如下:
.........
x1* =1
x2* =2
x3* =3
x4* =2
x5* =4
x6* =5
x7* =3
x8* =6
x9* =7
x10* =4
x11* =8
.........
Objective*=45
.........
+Leapms>

标记在图上

拓扑排序的用途

拓扑排序在算法设计上有广泛的用途,例如在制造资源管理中的Gozinto图的计算等。

对上述图如果有向边表示次序关系,则可删除任何起始顶点和终止顶点次序数相差大于2的边得到更加简化的图,且不改变次序逻辑:

拓扑排序的 +Leapms 线性规划模型的更多相关文章

  1. 旅行商问题(Traveling Salesman Problem,TSP)的+Leapms线性规划模型及c++调用

    知识点 旅行商问题的线性规划模型旅行商问题的+Leapms模型及CPLEX求解C++调用+Leapms 旅行商问题 旅行商问题是一个重要的NP-难问题.一个旅行商人目前在城市1,他必须对其余n-1个城 ...

  2. UVA - 1572 Self-Assembly(图论模型+拓扑排序)

    题意:判断利用给出的正方形是否能拼接出无限延伸的结构. 分析:正方形上的字母看做点,正方形看做有向边. 例如: 若上下两个正方形能拼接,需要B+~C+是个有向边. 对输入的处理是:把A+,A-分别映射 ...

  3. 【BZOJ-1565】植物大战僵尸 拓扑排序 + 最小割

    1565: [NOI2009]植物大战僵尸 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1972  Solved: 917[Submit][Statu ...

  4. 生产线平衡问题的+Leapms线性规划方法

    知识点 第一类生产线平衡问题,第二类生产线平衡问题 整数线性规划模型,+Leapms模型,直接求解,CPLEX求解 装配生产线平衡问题 (The Assembly Line Balancing Pro ...

  5. HDU 1811 拓扑排序 并查集

    有n个成绩,给出m个分数间的相对大小关系,问是否合法,矛盾,不完全,其中即矛盾即不完全输出矛盾的. 相对大小的关系可以看成是一个指向的条件,如此一来很容易想到拓扑模型进行拓扑排序,每次检查当前入度为0 ...

  6. P2805 [NOI2009]植物大战僵尸(最小割+拓扑排序)

    题意: n*m的矩阵,每个位置都有一个植物.每个植物都有一个价值(可以为负),以及一些它可以攻击的位置.从每行的最右面开始放置僵尸,僵尸从右往左行动,当僵尸在植物攻击范围内时会立刻死亡.僵尸每到一个位 ...

  7. poj 3683(2-sat+拓扑排序)

    Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11127   Accep ...

  8. P2805 [NOI2009]植物大战僵尸 (拓扑排序 + 最小割)

    题意:N*M的矩阵 每个点上都有一颗植物 僵尸只能从每一行的最右边向左进攻 每个植物有攻击范围 可以保护在攻击范围内的植物 同时每一颗植物也保护他左边的植物 摧毁每个植物能获得价值 如果这个植物被保护 ...

  9. 洛谷2805 [NOI2009]植物大战僵尸 (拓扑排序+最小割)

    坚决抵制长题面的题目! 首先观察到这个题目中,我们会发现,我们对于原图中的保护关系(一个点右边的点对于这个点也算是保护) 相当于一种依赖. 那么不难看出这个题实际上是一个最大权闭合子图模型. 我们直接 ...

随机推荐

  1. SSIS 调试和故障排除

    SSIS内置的调试工具是非常完备的,主要是设置断点和查看变量值,这是在Package的设计阶段可以使用的工具,在Package部署到服务器之后,用户还可以使用事件处理程序以实现Package出错的自我 ...

  2. 《The java.util.concurrent Synchronizer Framework》 JUC同步器框架(AQS框架)原文翻译

    一.论文简介 闲来无事,看看源码,发现了一篇JDK作者的论文<The java.util.concurrent Synchronizer Framework>主要描述了作者对Abstrac ...

  3. 肝 hibernate 配置and增删改查 and 测试

    已经通宵三天撸代码了,现在的我已经养成晚上修仙写代码的节奏了.....最近 刚刚复习到了 hibernate 谈谈 这篇文章就谈谈我对这货的理解吧. 在看这篇文章之前希望你 知道sessionfact ...

  4. java可用与串口通信的一些库

    java原生对串口的支持只有javax.comm,javax.comm比较老了,而且不支持64位系统,我在看jlibmodbus(一个java实现的modbus协议栈)的时候发现了几个可供使用的jav ...

  5. 用Service+Broadcast解决倒计时过程中Activity被销毁的问题

    主要思想是这样的:将倒计时CountDownTimer放在Service里面进行,每过一秒就一条发广播,在主Activity里注册广播,收到广播后更新UI. 一.写一个类CodeTimerServic ...

  6. 为啥程序会有bug?

    如果这是第二次看到我的文章,欢迎右侧扫码订阅我哟~ 

  7. 说说new 和 malloc()

    熟悉c++的朋友应该都知道,c++提供给了程序员与硬件打交道的可能性,比如说内存管理.一个高水平的c++程序员可以将c++程序的性能优化到极致,榨干硬件资源.而现在我想说说与内存管理有关的new 和 ...

  8. Win10+RTX2080深度学习环境搭建:tensorflow、mxnet、pytorch、caffe

    目录 准备工作 设置conda国内镜像源 conda 深度学习环境 tensorflow.mxnet.pytorch安装 tensorflow mxnet pytorch Caffe安装 配置文件修改 ...

  9. App 更换应用图标

    一般情况下,我们App图标在Androidmanifest.xml中设置,通过Application android:icon属性指定,写法如下: <?xml version="1.0 ...

  10. Java学习路线图分析

     Java学习路线分析图 第一阶段 技术名称 技术内容 J2SE(java基础部分) java开发前奏 计算机基本原理,Java语言发展简史以及开发环境的搭建,体验Java程序的开发,环境变量的设置, ...