线性规划
图解法
通过作图可以清晰明了地看出,符合所限定条件的公共区域(黄色部分)即问题的可行域R。
图解法中可以得出以下结论:
1.可行域R可能为空集,也可能为非空集合,当R非空时,其必然是若干半平面的交集。
2.当R非空时,线性规划既可能存在有限最优解,也可能存在无限最优解。
3.若存在无限最优解,则必定可以在可行域R的“顶点”中找到最优目标函数值。
图解法主要用于简单的规划问题,有助于理解线性规划问题的基本原理。
单纯形法
单纯形法的本质与图解法是一致的,即线性规划问题的可行域是 n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。
因此单纯形法的一般解题步骤可归纳如下:①把线性规划问题的约束方程组表达成典范型方程组,找出基可行解作为初始基可行解。②若基可行解不存在,即约束条件有矛盾,则问题无解。③若基可行解存在,从初始基可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。④按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。⑤若迭代过程中发现问题的目标函数值无界,则终止迭代。匈牙利法
匈牙利法用于求解指派问题。指派问题是在保证指派条件的要求下,使指派方案达到最佳的一类问题,例如,分派若干项工作给若干个人做。
匈牙利法是美国数学家库恩(Kuhn)于1955年提出的。库恩引用了匈牙利数学家康尼格(Konig)一个关于矩阵中0元素的定理:系数矩阵中独立0元素的最多个数等于能覆盖所有0元素的最小直线数,因此这种解法称为匈牙利法,这是匈牙利解法的基本原理。同时指派问题的最优解有这样一个性质,若从系数矩阵的一行(列)各元素中分别减去该行(列)的最小元素,得到新矩阵,那么以新矩阵为系数矩阵求得的最优解和用原矩阵求得的最优解相同。利用这个性质,可使原系数矩阵变换为含有很多0元素的新矩阵,而最优解保持不变,这个性质奠定了匈牙利法有关的基本解法。
基于指派问题的标准型,标准型要满足下述三个条件:
(1).目标要求为最小值
(2).效率矩阵为n阶方阵
(3).阵中所有元素均为大于0的常数
下面举一个例子,若有5项不同的工作,需要5个人去做,以下矩阵即为5个人分别对应5项工作的效率,通过具体解法来体现匈牙利法的具体流程。
Stp1:行规约
每行元素减去该行最小元素
Stp2:列规约
每列元素减去该列最小元素
Stp3:试指派
(1).从第一行开始,如果该行只有一个零元素,就在该零元素上画上括号,并划去该零元素同列的其余零元素,如果该行没有零元素,或有两个及以上的零元素(已经划去的不计入),则转入下行。
(2).按照(1)的方法逐列进行检查,结果如下。
(3).如果每行、每列都有两个或更多的零元素,这时从剩余零元素最少的行开始,选择其中零元素所在列的零元素最少的列,给此时这个“交叉”的零元素打括号,划掉同行、同列的其他零元素,重复以上步骤,直至所有零元素都已被标记。
(4).所有的零都进行了标记,此时就可以找到覆盖矩阵中所有零元素的最少直线。步骤如下:
a.对没有()的行打√
b.对打√的行中所有零元素的列打√
c.对打√的列上有()的行打√
d.重复前三个步骤,直至结束
对没有打√的行划横线,对打√的列划横线,此时得到覆盖所有零元素的最少直线。当覆盖的最少直线数小于n时,没有得到最优解,此时就需要对矩阵进行再变换。
Stp4.移动零元素
如下矩阵:
再变换过程如下:
(1).在未被直线覆盖的所有元素中找到最小元素。
(2).所有未被直线覆盖的元素减去此最小元素。
(3).所有直线十字交叉的元素加上此最小元素。
然后再次进入Stp3,直到得到最优解。
对于指派问题,并不一定都满足标准型的要求,此时就需要对问题进行改变,如引入对偶问题、虚拟任务和虚拟工人等。
分支定界法
分支定界法的主要思路是,将约束条件的最优化问题的所有可行解空间分割为越来越小的子集,称为分支;对每个分支的解集计算下界,称为定界,即是对可行解空间的一种有效全局搜索方法。这种算法主要用于整数规划。
若设有最大化的整数规划问题A,与其对应的线性规划问题B。若B的最优解不符合A的整数条件,则B的最优解Z为A的最优解Z*的上界,A的任意可行解必是Z*的下界。分支定界法就是将B的可行域不断分成更小的子域,通过不断减小上界和增大下界,最终找到整数规划问题A的最优解。
例如下列整数规划问题:
不考虑整数约束,其相应的松弛问题L0如下:
由图解法可求得线性规划L0的最优解Y0 = (3/2,5/2),最优值Z0 = -4。因为Y0并非整数解,所以Z0是整数规划最优值的下界。分支定界法首先任意选择一个非整数决策变量进行分支。这里选择x1,在L0的最优解中,x1 = 3/2,于是整数最优解中x1必须满足。因此在L0的基础上,分别增加约束条件,形成两个线性规划子问题L1和L2,即
然后分别求解L1和L2的最优解,再继续分别进行分支,直至得到最优整数解。这里要注意一个问题就是比较和剪枝。即各分支的最优目标函数中有大于Z的上界者,则剪掉这支,不再考虑该分支。若小于上界,且不符合整数条件,则继续对该支进行分支。