知识点

拓扑排序

拓扑排序的+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. Java 线程池(ThreadPoolExecutor)原理分析与使用

    在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ...

  2. 【BZOJ 2850】巧克力王国

    复习了下KDtree,贴一下新板子233. #include "bits/stdc++.h" using namespace std; inline int read(){ ,k= ...

  3. centos-7 yum装docker-ce后启动失败

    相关版本: centos-7:   CentOS Linux release 7.0.1406 (Core) docker-ce: Docker version 18.03.0-ce, build 0 ...

  4. Jenkins使用教程

    1 软件安装  1.1 运行环境   1.1.1 Maven的安装   1.1.2 Git的安装   1.1.3 Tomcat的安装  1.2 安装Jenkins  1.2.1 msi和war包安装2 ...

  5. java日志文件用法总结

    1.基本概念 日志门面(接口):commons logging ; slf4j ; 日志具体实现:log4j ; logback(Spring 系列在使用) ; log4j2(添加了异步logger的 ...

  6. 查看keras自动给文件夹标号

    from tensorflow.contrib.keras.api.keras.preprocessing.image import ImageDataGenerator,img_to_array f ...

  7. ASP.NET Core在Azure Kubernetes Service中的部署和管理

    目录 ASP.NET Core在Azure Kubernetes Service中的部署和管理 目标 准备工作 注册 Azure 账户 AKS文档 进入Azure门户(控制台) 安装 Azure Cl ...

  8. FreeSql.DbContext 第二个版本介绍

    FreeSql.DbContext 实现类似 EFCore 使用方法,跟踪对象状态,最终通过 SaveChanges 方法提交事务. 目前是第二个初版,已实现状态跟踪保存(导航属性的跟踪暂时不支持). ...

  9. Netty源码—六、tiny、small内存分配

    tiny内存分配 tiny内存分配流程: 如果申请的是tiny类型,会先从tiny缓存中尝试分配,如果缓存分配成功则返回 否则从tinySubpagePools中尝试分配 如果上面没有分配成功则使用a ...

  10. Data Lake Analytics的Geospatial分析函数

    0. 简介 为满足部分客户在云上做Geometry数据的分析需求,阿里云Data Lake Analytics(以下简称:DLA)支持多种格式的地理空间数据处理函数,符合Open Geospatial ...