zoukankan      html  css  js  c++  java
  • 拓扑排序的 +Leapms 线性规划模型

    知识点

    拓扑排序

    拓扑排序的+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的边得到更加简化的图,且不改变次序逻辑:

     

  • 相关阅读:
    零拷贝报文捕获平台
    Table of Contents ---BCM
    bcm cmd
    Linux常用性能调优工具索引
    Vue params传值的坑
    安装了新的angular版本后无法运行老的angular版本项目
    后端返回的数据与前端console.log数据不一致问题
    门户页跳转页面 跳转指定的页面 接口会变成路由去显示 而不是显示组件
    配置git ssh 密钥
    grafana环境变量
  • 原文地址:https://www.cnblogs.com/leapms/p/10059771.html
Copyright © 2011-2022 走看看