• 【网络流】线性规划的最小割建模方式


    前几天在师大附中听课,大概了解了一些关于网络流的建模方式,然后今天上午做了一些题目,在这里总结一下。

    最小割的线性规划建模方式:

      有一些0/1变量Xi怎么怎么样之后会消耗某些代价或者获得某些利益,而最后的总收益可以写成如下的形式:

              min{ Σmax{Xi-Xj,0}*Wi }

        其中Wi必须是正数。

         那么假设源为1,汇为0,就将Xi连一条流量为Wi的边到Xj。

        如果有形如1-Xi之类的形式就是从源向Xi连边,Xi-0这种形式就是Xi向汇点连边。

      那么如果Wi是负数怎么办?

           比如Xi*Wi(Wi<0)

              Xi*Wi=(-Xi)*(-Wi)=(1-Xi)*(-Wi)+Wi

      这样就化成正数了,然后后面的Wi是一个常数,可以全部提到外面去。

      比如我随便YY一个题目。。一堆棋子,其中把第I个变成白色有Wi的不和谐度,变成黑色有Bi的不和谐度,如果某个i和j颜色不一样就会有Ai,j的不和谐度,要求不和谐度最小。。

      恩。。假设1是黑色,0是白色,那么线性规划出来就是

       min{Σmax{Xi,0}*Bi+Σmax{1-Xi,0}*Wi+Σmax{Xi-Xj,0}*Ai,j+Σmax{Xj-Xi,0}*Ai,j}

      那么怎么连边就显而易见了啊。。按照上面的规则连就是了,1代表源,0代表汇。

    呀好丑TAT

      有时候会出现让你最大化收益的情况,其实是一样的,因为max{Ai}=-min{-Ai}

      你在里面加个负号就行了,然后化一化就好。

      如果有依赖怎么办?比如说要先选i才能选j

      那么就加上 max{Xj-Xi,0}*INF就行。如果j是1,i是0的话就会有INF的代价。好口怕QAQ。

      比如说最大闭权子图就可以这么做,按照公式推出来建边就行了,显然是正确的OwO。比如选第i件物品的代价是Wi(可正可负)

      Ans=max{min{ΣXi*Wi}+Σmax{Xj-Xi,0}*INF}=-min{-Σ{Xi*Wi}-Σmax{Xj-Xi,0}*INF}

      然后将Wi分正负进行处理,后面第二部分的那个减号就把Xj-Xi改成Xi-Xj就行了。

      线性规划建模很无脑的。。只要初中数学及格就能建了。

      总之网络流也就是建模要想一下(这不废话么摔(╯‵□′)╯︵┻━┻),跑最大流的话……随便吧,反正我是更喜欢ISAP。

  • 相关阅读:
    git命令参考
    Raft 简介
    关于 K8S 的几个问题
    Ubuntu中用普通方法无法添加自启动
    so编译 链接和加载
    GDB调试命令详解
    MinGW中的头文件路径
    GDB使用详解
    dlopen、dlsym和dlclose的使用
    Windows下配置VSCode使用mingww64的gcc、g++编译器和GDB调试器
  • 原文地址:https://www.cnblogs.com/Houjikan/p/4379345.html
Copyright © 2020-2023  润新知