用分支定界算法求解整数规划

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用分支定界算法求解整数规划相关的知识,希望对你有一定的参考价值。

智慧树运筹与统计的题...

参考技术A 第1步:放宽或取消原问题的某些约束条件,如求整数解的条件。如果这时求出的最优解是原问题的可行解,那么这个解就是原问题的最优解,计算结束。否则这个解的目标函数值是原问题的最优解的上界。
第2步:将放宽了某些约束条件的替代问题分成若干子问题,要求各子问题的解集合的并集要包含原问题的所有可行解,然后对每个子问题求最优解。这些子问题的最优解中的最优者若是原问题的可行解,则它就是原问题的最优解,计算结束。否则它的目标函数值就是原问题的一个新的上界。另外,各子问题的最优解中,若有原问题的可行解的,选这些可行解的最大目标函数值,它就是原问题的最优解的一个下界。
第3步:对最优解的目标函数值已小于这个下界的子问题,其可行解中必无原问题的最优解,可以放弃。对最优解(不是原问题的可行解)的目标函数值大于这个下界的子问题,都先保留下来,进入第4步。
第4步:在保留下的所有子问题中,选出最优解的目标函数值最大的一个,重复第1步和第2步。如果已经找到该子问题的最优可行解,那么其目标函数值与前面保留的其他问题在内的所有子问题的可行解中目标函数值最大者,将它作为新的下界,重复第3步,直到求出最优解。

运筹学整数规划 ( 整数规划求解方法 | 指派问题 )

文章目录





一、整数规划求解方法



分支定界法 ( 普通整数规划 ) : 主要处理整数规划问题 , 规划中的变量要求是整数 ;

匈牙利法 ( 指派问题 ) : 变量只能取 0 , 1 0 , 1 0,1 值的整数规划 , 如果有 n n n 个变量 , 则一共可能有 2 n 2^n 2n 种可能的取值 , 使用穷举法可能比较简单 ; 在进一步 , 将一些条件考虑进其中 , 可以排除掉一些取值 , 使得搜索范围变小 ;





二、指派问题



指派问题 : 4 4 4 个人指派 4 4 4 个岗位 , 每个人在不同的岗位产生的利润不同 , 如何安排使得利润最高 ;

A A A B B B C C C D D D
85 85 85 92 92 92 73 73 73 90 90 90
95 95 95 87 87 87 78 78 78 95 95 95
82 82 82 83 83 83 79 79 79 90 90 90
86 86 86 90 90 90 80 80 80 88 88 88


首先进行 变量选取 , 这里人与工作的关系只是 做 / 不做 工作 , 这里将 甲 是否做 A , B , C , D A , B, C, D A,B,C,D 工作设置为变量分别设置为 x 11 , x 12 , x 13 , x 14 x_11, x_12, x_13, x_14 x11,x12,x13,x14 ,

甲 如果做 A A A 工作 , x 11 = 1 x_11 = 1 x11=1 , 如果不做 A A A 工作 , x 11 = 0 x_11 = 0 x11=0 ;


16 16 16 个变量如下 :

A A A B B B C C C D D D
x 11 x_11 x11 x 12 x_12 x12 x 13 x_13 x13 x 14 x_14 x14
x 21 x_21 x21 x 22 x_22 x22 x 23 x_23 x23 x 24 x_24 x24
x 31 x_31 x31 x 32 x_32 x32 x 33 x_33 x33 x 34 x_34 x34
x 41 x_41 x41 x 42 x_42 x42 x 43 x_43 x43 x 44 x_44 x44

目标函数就是总的利润值 , 将两个表格中的元素按位相乘再相加即可 ;

约束条件 ① 每个人只能做一项工作 , 甲的对应 4 4 4 个变量相加之和等于 1 1 1 ; 同理 乙丙丁 对应的 4 4 4 个变量相加之和也等于 1 1 1 ;

约束条件 ② 每个工作只能指派一个人 , A A A 的对应 4 4 4 个变量相加之和等于 1 1 1 ; 同理 B C D BCD BCD 对应的 4 4 4 个变量相加之和也等于 1 1 1 ;


上述指派问题数学模型 :

m a x Z = 85 x 11 + 92 x 12 + 73 x 13 + 90 x 14 +                 95 x 21 + 87 x 22 + 78 x 23 + 95 x 24 +                 82 x 31 + 83 x 32 + 79 x 33 + 90 x 34 +                 86 x 41 + 90 x 42 + 80 x 43 + 88 x 44 s . t x 11 + x 12 + x 13 + x 14 = 1 x 21 + x 22 + x 23 + x 24 = 1 x 31 + x 32 + x 33 + x 34 = 1 x 41 + x 42 + x 43 + x 44 = 1 x 11 + x 21 + x 31 + x 41 = 1 x 12 + x 22 + x 32 + x 42 = 1 x 13 + x 23 + x 33 + x 43 = 1 x 14 + x 24 + x 34 + x 44 = 1 x i j = 0 , 1      ( i , j = 1 , 2 , 3 , 4 ) \\beginarraylcl \\rm maxZ = 85x_11 + 92x_12 + 73x_13 + 90x_14 + \\\\ \\rm \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ 95x_21 + 87x_22 + 78x_23 + 95x_24 + \\\\ \\rm \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ 82x_31 + 83x_32 + 79x_33 + 90x_34 + \\\\ \\rm \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ \\ 86x_41 + 90x_42 + 80x_43 + 88x_44 \\\\\\\\ \\rm s.t\\begincases \\rm x_11 + x_12 + x_13 + x_14 = 1 \\\\ \\rm x_21 + x_22 + x_23 + x_24 = 1 \\\\ \\rm x_31 + x_32 + x_33 + x_34 = 1 \\\\ \\rm x_41 + x_42 + x_43 + x_44 = 1 \\\\\\\\ \\rm x_11 + x_21 + x_31 + x_41 = 1 \\\\ \\rm x_12 + x_22 + x_32 + x_42 = 1 \\\\ \\rm x_13 + x_23 + x_33 + x_43 = 1 \\\\ \\rm x_14 + x_24 + x_34 + x_44 = 1 \\\\\\\\ \\rm x_ij = 0 , 1 \\ \\ \\ \\ (i , j= 1,2,3,4 ) \\endcases\\endarray maxZ=85x11+92x12+73x13+90x14+               95x21+87x<

以上是关于用分支定界算法求解整数规划的主要内容,如果未能解决你的问题,请参考以下文章

4. 整数规划:割平面法python代码

数模常用算法系列--整数线性规划(分枝定界法)整数非线性规划(蒙特卡洛法)

备战数学建模19-数学规划问题

运筹学(最优化理论)学习笔记 | 分支定界法

分支界定( BRANCH-AND-BOUND)

Python之建模规划篇--整数规划