• 分数规划整理


    分数规划问题,是指这样一类问题:

    要求f(x)/g(x)的最值,其中f(x),g(x)都是线性函数,而其中被研究的最多的是0-1分数规划,即求这样的一个式子的极值

    r=(∑(ci*xi))/(∑(di*xi)),其中xi∈{0,1}

    我们可以把这个式子变换一下

    z=(∑(ci*xi))-r'*(∑(di*xi)),其中z是左边这个式子的最大(小)值

    由于di为正数,xi为非负数,所以

    r'>r 时 z(r')<0

    r'=r 时 z(r')=0

    r'<r 时 z(r')>0
     

    易证z函数严格单调递减,那么我们可以二分r',直到z(r')=0,此时r'=r,问题得解

    PS:z函数也是凸函数


     

     

    除了二分,还有一种算法叫Dinkelbach算法

    每次将r'代入z函数中计算以后,我们将得到一组x

    让r''=(∑(ci*xi))/(∑(di*xi))

    当r''=r'时,r''就是我们需要的解

    否则将r'=r'',继续迭代

    这种方法比二分法要快一点


     

    POJ 2728

    大意:给定每条边的距离和代价,求一棵生成树使得代价和/距离和最小

    这是一道最优比率生成树的题目,是个很明显的0-1分数规划,设每条边代价为ci,距离为di

    则题目要求(∑(ci*xi))/(∑(di*xi))的最小值

    那么二分这个最小值,将这个式子化成xi(ci-r'*di)的形式,每条边的权值变成ci-r'*di

    对于这些边,求一棵最小生成树,MST的值即为z(r')


     

    HNOI2009 最小圈

    题目大意是给定一个无向图,定义环的平均值为环上的边权和/边数,求出最小的环平均值

    这道题虽然看上去不像分数规划,但是巧妙地应用了分数规划的思想

    二分这个平均值,然后对每条边,重新把它的权值赋为(原权值-二分值)

    如果存在某一个环,他的平均值刚好是二分的值,那么新的边权和是0

    如果环的平均值小于二分值,那么图中将出现负环,上界可缩小

    否则需将下界变大

  • 相关阅读:
    axios跨域问题(包括开发环境和生产环境)
    vue高亮一级、二级导航
    vue配置路由时报错 Error in render: "RangeError: Maximum call stack size exceeded"
    win10使用L2TP连接失败,报远程服务器未响应错误解决办法,亲测可用!
    pywinauto教程
    Python结合Pywinauto 进行 Windows UI 自动化
    Pywinauto自动化操作PC微信提取好友微信号
    Debian9 配置kali(xfce4、Metasploit、wireshark)
    Kali开启ssh
    从域环境搭建到域渗透
  • 原文地址:https://www.cnblogs.com/shenben/p/6379356.html
Copyright © 2020-2023  润新知