10分钟也不一定学会的灵敏度分析

灵敏度分析可谓是线性规划中的重难点了,不仅将之前的知识汇总起来,更是考试必考的大题(出题人基本都是先让用单纯形法解出线性规划问题后,紧接着剩下的2,3小问均是灵敏度分析解题)。博主写这一篇博文也是走走停停耽误了很久,前前后后复习了多次QaQ。

接下来我们还是提出几个问题:

1. 灵敏度分析对应的是怎样的问题?
2. 灵敏度分析法解决问题有怎样的优点?不用该方法还有其他方法吗?
3. 灵敏度分析类的问题有哪几类?相应的要如何解决?


针对问题一: 灵敏度分析类问题用流程图来解释的话大致是这样的:

10分钟也不一定学会的灵敏度分析_第1张图片
判断最优解是否发生变化是这类问题最常用的提问方式 。比如说:(这里可以随便用个线性规划问题想象,就不再找例子了)1. 将目标函数中的X1对应的系数由a化为b,最优解是否发生变化? 2. 第一个约束条件中右端的b值(常量)由c化成d最优解是否会发生改变?等等这类的问题。那么这类问题一般要怎样进行解答呢?这就是问题二要考虑的了。


针对问题二: 问题一的最后我们提出了要怎样进行解答该类问题的疑问?其实,在我们现在已经掌握(纯粹)单纯形法,对偶单纯形法等一系列用来解决线性规划问题的方法后,即使不使用灵敏度分析法也能判断出参数改变后是否还是最优解? 你可能在纳闷我在说什么,但仔细想想判断最优解是否变化的话,我们只需要分别求出两个线性规划问题所对应的最优解是否相同不就可以了嘛?但是,你可能也意识到了,这样做的结果是步骤复杂且极其容易求错。所以我们在这种情况下就需要使用灵敏度分析进行作答。即该方法更加的快捷、高效且不容易出错(计算量远远少于原始方法)。那么到底怎样使用灵敏度分析呢?这就是第三问要详细进行说明的了。


针对问题三: 了解了前两个问题后,我们已经对灵敏度分析的背景、优点及使用情况有了清晰的轮廓,那么接下来就是重中之重了,我将会分类对该方法进行讲解。 下面的讲解均以下图为例,因为线性规划问题的求解不是关键,所以将会直接列出相应的过程:

①原线性规划问题:
10分钟也不一定学会的灵敏度分析_第2张图片
②化作标准型的矩阵
10分钟也不一定学会的灵敏度分析_第3张图片
③最终的结果以及相应的参数值
10分钟也不一定学会的灵敏度分析_第4张图片


在讲之前,我先解释一下第三幅图中每一个参数所对应的值具体在单纯性表中指代的是什么。

1.B:指的是基本可行解对应的矩阵在没有进行初等行变换之前对应的矩阵中的值
2.B-1:指的是最初的基变量对应的在进行初等行变换之后的矩阵中的值
3.CB:指的是基本可行解在化成标准型的目标函数中的系数矩阵
4.B-1A:指的是最终化成的矩阵中每一个x对应的矩阵中的值
5.C:指的是最初的单纯形表中目标矩阵的系数的相反数
6.A:指的是在化成标准型的线性规划中变量的系数,即图二中的右下部分
7.a:a的意义和A相同(为了区分所以分开来写),但是由于非基变量影响范围较小,所以使用的仅是改变的变量对应的系数

叙事能力有限,如果有地方不明白,可以点赞后询问,每天上线。


一、目标函数值发生变化
1).非基变量的目标函数系数发生变化
问题: 将上述目标函数中的x2的系数化成4 + c,如果要使的所得解仍为最优解,那么c的约束范围应该为多少?
为了得到这个范围,我们列出相应的约束条件:CBB-1A - C <= 0。(至于为何要用这个约束条件来进行求解,因为专业性不强,所以不太了解,但对于非数学专业只需要会用就可以了)。不过这里由于是非基变量,所影响的范围较小,为了区分接下来讲的基变量,暂将其公式记为CBB-1a - c,(对比可以发现,大写的A、C变成了小写的a和c,这不仅是为了区分,更是因为计算中,小写字母a、c所表示的仅仅是该发生变化的参数所对应的值,因为影响范围变小了)。求解该范围时相应的变量如下图所示:
10分钟也不一定学会的灵敏度分析_第5张图片
需要注意:△r2是可正可负的,这里因为由于题意该值是增加的,所以原式中的减c2要变成减-c2,最后得出结果△r2 <= 4/3,即比该值小的话最优值不变,但我觉得还要再用减c2算一下最小值,不然过小也一定会发生变化,这里只是因为题意一定增加所以没有考虑。


2).基变量的目标函数系数发生变化
问题: 设目标函数中x1系数变为c1 = 3 + △c1,问△c1在什么范围内时,上述解仍为最优解?
经过上述描述后,相信具体过程已经无需多言。下面我再写一下每个参数具体的数值供大家理解
10分钟也不一定学会的灵敏度分析_第6张图片
最终求出的1×5矩阵中有三个值都含有△c1,分别令他们<=0,可以求得 -1/3 <= △c1 <= 1/3。


二、右端常数发生变化
设右端常数b1变为20 + △b1,在何范围内,最优基不变?
这类问题较为简单,因为已经是基变量了,就不需要再去考虑多种情况了,对于这类问题只有一种解决方法。就是令CBB-1a - c,在该题中的解决过程如下图所示:
10分钟也不一定学会的灵敏度分析_第7张图片
如果经过计算发现改变后不在这个范围中,那么说明最优解发生了改变,但是也不需要将改变的值替代原有值然后重新计算。只需要将最后划出的单纯性表中基变量对应的系数值换成B-1b的矩阵的值就可以接着进行换基迭代了,从而计算出最优解。


三、约束条件发生变化
这类问题暂时只考虑非基变量x的系数发生变化(我们专业是这样),如何使最优解不变。例如非基变量x12的系数由2变为2 + △a12,求x12检验数的范围。这里我们用到的公式仍然是CBB-1a - c,过程如下图所示:10分钟也不一定学会的灵敏度分析_第8张图片
值得留意的是,这里公式中的 +4,对应说明CBB-1a - c中最终还是减的‘-c’, 暂时不太理解,为何实际和公式中有差别?有想法的同学可以在评论区谈谈。


四、增加约束条件
这类问题不想之前的问题有公式可以套用,但是这类问题确实最简单但不一定写对的问题。首先对于给出的要添加的约束条件,将我们已经算出的最优解代入进去,如果满足不等式则说明约束条件不起作用,所以最优解一定不变;但是如果不满足,那么就只能在原问题的基础上加入该约束条件进行从头的计算了。

到这里基本上所有类型的灵敏度分析问题就都讲完了,呼~~,不容易啊!(语言太过贫乏,不知道如何描述这种方法)
创作不易,你的鼓励是我最大的动力。(约耗时2小时30分钟,反反复复改了好久)

你可能感兴趣的:(运筹学,线性代数,算法,线性规划)