数学建模理论自制笔记4:最优化问题之离散优化

1、整数规划的分支定界法

  • 分支定界法的基本步骤:比如给出整数规划方程\left\{\begin{matrix} \min z=x_1+4x_2\\ s.t. 2x_1+x_2\leqslant 8\\ x_1+2x_2\geqslant 6\\ x_i\geqslant 0,x_i\in \mathbb{R},i=1,2 \end{matrix}\right.,先利用单纯形法求出解看看是不是恰好为整数解,如果是那就是整数规划的最优解;如果不是则进入下面的过程:
    • 解得x_1=\frac{10}{3},x_2=\frac{4}{3},z=\frac{26}{3};明显这个最优值z是所需要值的下界(整数最优解肯定是要比这个值大一点),故将其令为\underline{z};由于两个变量的取值都不是整数,故任取一个进行“分支”;首先,我们将x_1=\frac{10}{3}分成两个最靠近的3,4进行考虑;
      • 先考虑x_1\leqslant 3的情况:即求解\left\{\begin{matrix} \min z=x_1+4x_2\\ s.t. 2x_1+x_2\leqslant 8\\ x_1+2x_2\geqslant 6\\x_1\leqslant 3\\ x_i\geqslant 0,x_i\in \mathbb{R},i=1,2 \end{matrix}\right.这个线性规划方程,得到x_1=3,x_2=\frac{3}{2},z=9,考虑到解里仍然有非整数,这里需要将x_2=\frac{3}{2}进行分支,分为1,2
        • 先考虑x_1\leqslant 1的情况:即求解\left\{\begin{matrix} \min z=x_1+4x_2\\ s.t. 2x_1+x_2\leqslant 8\\ x_1+2x_2\geqslant 6\\x_1\leqslant 3,x_2\leqslant 1\\ x_i\geqslant 0,x_i\in \mathbb{R},i=1,2 \end{matrix}\right.这个线性规划方程,得到无解;
        • 再考虑x_1\geqslant 2的情况:即求解\left\{\begin{matrix} \min z=x_1+4x_2\\ s.t. 2x_1+x_2\leqslant 8\\ x_1+2x_2\geqslant 6\\x_1\leqslant 3,x_2\geqslant 2\\ x_i\geqslant 0,x_i\in \mathbb{R},i=1,2 \end{matrix}\right.这个线性规划方程,得到x_1=2,x_2=2,z=10;发现恰好是整数解,故无需分支,直接将其确定为最优解的上界,记作\bar{z}
      • 然后再考虑x_1\geqslant 4的情况:即求解\left\{\begin{matrix} \min z=x_1+4x_2\\ s.t. 2x_1+x_2\leqslant 8\\ x_1+2x_2\geqslant 6\\x_1\geqslant 4\\ x_i\geqslant 0,x_i\in \mathbb{R},i=1,2 \end{matrix}\right.这个线性规划方程,得到无解;
    • 综上所述,所有可能分支均已讨论完毕,因此原问题的最优解和最优值分别为x_1^*=2,x_2^*=2,z^*=10
  • 分支定界法的注意事项:
    • 一个分支被查清的标志是下面各条之一:
      • 忽略整数约束后的线性规划无解;
      • 忽略整数约束后的线性规划的最优解是整数解;
      • 忽略整数约束后的线性规划的最优值超过原问题最优值的上界,这说明原问题的最优解肯定不在这一分支;
    • 整个问题解完的标志是下面各条之一:
      • 各分支均已查清,则所得整数解中最好者为最优解;
      • 某分支中,得到整数解且相应目标函数值等于原问题最优值之下界,则该整数解即为原问题的最优解;
    • 分支定界法也适用于混合整数规划,对于没有整数约束的变量不必进行分支,这会大大减少分支的数量;

2、0-1规划的隐枚举法

  • 0-1规划的基本思路:设0-1规划的变量个数为n,  由于每个变量仅取0或1,因此,所有可能组合解为2^n个;检查每一组合解,通过比较目标函数值大小而求得最优解的方法称为全枚举法(显枚举法);当n较大时,全枚举法的计算量骤增;
  • 隐枚举法的基本思路:只检查一部分变量组合, 在此过程中根据已有信息自动放弃一系列不可能成为最优解的组合而求得最优解;具体操作是:将所有变量的可能组合解按一定次序(如字典序)排列起来,依次检查是否为可行解;
    • 若为可行解,则计算其目标函数值(若下面要检查的点的目标函数值不优于它,则排除此点),比较所有可行点的函数值,给出最优解和最优值;
    • 若有一个约束条件不满足,则不是可行解,可排除此点
  • 隐枚举法的基本步骤:
    • 已知0-1规划方程发现有三个变量共8个可能的组合解,列表如下:
    • 由此表得最优解为x^*=(1,0,1)最优值为8; 

  • 更优化的隐枚举法:
    • 对于目标函数求最大值的0-1规划:
      • 作变量替换,将目标函数中变量的系数全部变为非负数;
      • 将变量重新排序,使目标函数中变量的系数从大到小排列;
      • 将所有新变量的一切可能组合解按照从大到小的顺序(字典序)排列,依次检查各点的可行性,第一个可行点即为最优解;
    • 对于目标函数求最小值的0-1规划:
      • 作变量替换,将目标函数中变量的系数全部变为非负数;
      • 将变量重新排序,使目标函数中变量的系数从大到小排列;
      • 将所有新变量的一切可能组合解按照从小到大的顺序(字典序)排列,依次检查各点的可行性,第一个可行点即为最优解;
  • 更优化的隐枚举法的基本步骤:
    • 已知0-1规划方程,先令\overline{x_2}=1-x_2,这样就可以把方程变为:
    • 然后我们按照变量系数从大到小进行排列,得到:;这样所有新变量的组合解为\left ( x_3,x_1,\overline{x_2} \right );检查8种可能性后发现只有\left ( 1,1,1 \right )满足,那么最后原问题的最优解为x_1=1,x_2=0,x_3=1;最优值为z=6

3、整数规划模型建立举例:

  • 一项说明书要由汉语分别译成英、日、德、俄四种文字,交由甲、乙、丙、丁4个译员去完成。因各人专业不同,因此译成不同文字所需要的时间不同。假设各人完成各项工作的时间如下表,问应如何分配才能完成4项给定任务的总时间最少?
工作序号1234
译员工作名称汉译英汉译日汉译德汉译俄
31097
154148
13141611
415139
  • 考虑到译员面对这些工作可以选择做或者是不做,设0-1变量x_{ij}为第i名译员是否承担第j项任务:,其中i=1,2,3,4;j=1,2,3,4c_{ij}为第i名译员承担第j项任务的工时;
  • 以下则是约束条件:
    • j项任务有且仅有一名译员完成:\sum_{i=1}^{4}x_{ij}=1,j=1,2,3,4
    • i名译员完成且仅完成一项任务:\sum_{j=1}^{4}x_{ij}=1,i=1,2,3,4
    • 目标函数,任务总工时:z=\sum_{j=1}^{4}\sum_{i=1}^{4}c_{ij}x_{ij}
  • 那么该指派问题的整数规划模型为:\left\{\begin{matrix} \max z=\sum_{j=1}^{4}\sum_{i=1}^{4}c_{ij}x_{ij}\\ \textup{s.t. }\sum_{i=1}^{4}x_{ij}=1,j=1,2,3,4\\ \sum_{j=1}^{4}x_{ij}=1,i=1,2,3,4\\ x_{ij}\geqslant 0 \end{matrix}\right.

4、网络优化:

  • 图与网络的基本概念:
    • 由一组点,与点之间的连线/边所组成的总体;
    • 网络各条边上赋有权数的图;
    • 路径网络中一个前后相继并且方向相同的边序列p=\left \{ (i_0,i_1),(i_1,i_2),\cdots ,(i_{p-1},i_p) \right \},像下图里如:p=\left \{ (v_1,v_2),(v_2,v_3),(v_3,v_4) \right \}
    • 链:网络中一个前后相继但方向不一定相同的边序列C=\left \{ (i_0,i_1),(i_1,i_2),\cdots ,(i_{p-1},i_p) \right \},像上图里如:C=\left \{ (v_1,v_2),(v_3,v_2),(v_3,v_4) \right \}
    • 回路闭合的路径,像上图里如:R=\left \{ (v_1,v_2),(v_2,v_3),(v_3,v_4),(v_4,v_1) \right \}
    • 圈:闭合的链;
    • 连通图任何两个节点之间都有一条链的网络;
    • 无圈的连通图;
    • 从集合的角度看,图G是由一个节点集V和一个边界E组成, 可以表示为G(V,E)在上图中,V=\left \{ v_1,v_2,v_3,v_4 \right \},E=\left \{ e_1,e_2,e_3,e_4,e_5,e_6,e_7 \right \}

    • 无向图的矩阵表示:

      • 关联矩阵:表示图G中顶点与边的联接关系的矩阵,记为A(G),其中;图中的关联矩阵A(G)为:

      • 邻接矩阵表示图G的顶点之间的邻接关系的矩阵,记为B(G),其中 图中的邻接矩阵B(G)为:

    • 有向图的矩阵表示:

      • 关联矩阵:表示图G中顶点与边的联接关系的矩阵,记为A'(G),其中; 图中的关联矩阵A'(G)为:

      • 邻接矩阵表示图G的顶点之间的邻接关系的矩阵,记为B'(G),其中b_{ij}为以v_i为起点和以v_j为终点的边数; 图中的邻接矩阵B'(G)为:

  • 最短路径问题举例:
    • 最短路径的性质:若v_0,v_{i1},\cdots ,v_{in}v_0v_{in}的最短路径, 则v_0,v_{i1},\cdots ,v_{i(n-1)}v_0v_{i(n-1)}的最短路径;
    • 下图是各城市之间的交通网,求v_0至其它各点的最短路径:这里采用迪克斯特拉(Dijkstra)算法:
      • v_0邻接的点有v_1,v_5显然与v_1的距离近,取l=1;连接v_0v_1令顶点集S=\left \{v_0,v_1 \right \}
      • 然后发现与顶点集S=\left \{v_0,v_1 \right \}邻接的点有v_2,v_5,v_6,且l_2=l_1+d_{12}=1+2=3,l_5=2,l_6=l_1+d_{16}=1+2=3;其中\min\left \{ l_2,l_5,l_6 \right \}=l_5=2,故连接v_0v_5,进一步令S=\left \{v_0,v_1,v_5 \right \};这两步下来得到的图形如下:
      • 接着发现与顶点集S=\left \{v_0,v_1,v_5 \right \}邻接的点有v_2,v_6,v_{10},且l_2=l_1+d_{12}=1+2=3,l_6=\min\left \{ l_1+d_{16},l_5+d_{56} \right \}=3,l_{10}=l_5+d_{5,10}=5;其中\min\left \{ l_2,l_6,l_{106} \right \}=l_2=l_6=3,连接v_1v_2,v_1v_6,进一步令S=\left \{v_0,v_1,v_2,v_5,v_6 \right \};这三步下来得到的图形如下:
      • 按照这样的步骤进行下去,我们最终可以得到:
  • 网络流问题/最大流问题从一个地点输送尽可能多的物资至另一地点,具体例子如下:
    • 图1表示运输网络图,权数为该路的最大通过量/容量,求由v_0v_3的最大流;
      • 这里采用逐步扩大法,先任作一可行的运输方案,并将运输量/流量标于图上,如图2:
      • 通过画“增广图”检查现有方案基础上能否增加运量:若否,则此方案为最大流方案;若能,修改方案,继续讨论,直到得到最大流方案为止;增广图的画法如下:

        • 已分配有流量的边,均画一反向边,反向边的容量为现有方案中分配的流量数;

        • 分配的流量小于容量的边照常(方向)画,但新容量改为旧容量与流量的差;

      • 依照画增广图我们得到图3在该图上我们还可以找到v_0v_3的通路,如图4所示;即流量还可扩充,于是考虑继续修改方案,得到图5:

      • 将图4中通路的流量“叠加”在图2上,得到图6:

      • 再作增广图(图7):;发现已没有v_0v_3的通路,则图6所示的方案为最大流方案。 

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值