用“小范围搜索法”求“线性规划问题”的最优整数解
笔者对教科书中的全部7个线性规划的实际应用问题进行了研究和分类。
其中1个问题(教科书第61页例3)的最优解不是整数解,最优解有且只有一个,最优解显然在边界折线的顶点处,此为第一类问题;有3个问题(教科书第64页练习第2题、第65页习题第3题,第66页研究课题与实习作业)的最优解为整数解,最优整数解有且只有一个,最优解整点显然在边界折线的顶点处,此为第二类问题;另有3个问题(教科书第63页例4、第65页习题第4题、第87页复习参考题七A组第16题)的最优解为整数解,最优整数解可能不止一个,最优解整点不在边界折线的顶点处,或虽在边界折线的顶点处但并不显然,此为第三类问题。
第一、第二类问题的最优解可以通过解一个二元一次方程组直接得到,学生比较容易掌握。
第三类问题的最优解不能通过解一个二元一次方程组直接得到,必须通过观察图形或计算检验去寻找,学生不容易掌握,学习困难比较大。
为了解决这类寻找最优整数解的困难,笔者采用“小范围搜索法”进行教学。
该方法的优点在于,把在大范围同寻找最优整数解转化为在小范围内寻找最优整数解,而且在通过观察图形作出准确判断有困难的情况下,通过计算检验作出准确判断的工作量比较小。
其步骤为(1)在边界折线顶点附近的小范围内搜索一个可行域内的年整点;(2)过该点作一条斜率为-(其中A,B分别为目标函数中变量x,y的系数)的直线,与可行域边界折线相交得到一个小范围的区域;(3)在这个小范围区域内继续搜索全部最优整数解。
用“小范围搜索法”成功解题的关键是分析,要把分析贯彻于解题的全过程,观察图形要分析,计算检验也要分析,通过分析充分发掘线性约束条件和线性目标函数的特殊性,使搜索范围缩到最小,计算的工作量减到最小。
下面以教科书中的题目为例,说明“小范围搜索法”的运用。
例1教科书第65页习题题,题目略。
本题的线性约束条件
线性目标函数z=200x+150y,其中x,y分别为大房间与小房间的间数。
作出可行域如图1。
(1)搜索一个可行域内邻近边界折线顶点的整点。
解方程组
得到点A(,),由于点A的坐标不是整数,故不是最优解。
由于要使目标函数取最大值,因此要寻找可行域右上侧靠近边界或边界上的整点。
与点A邻近的整点共有4个(2,8),(2,9),(3,8)与(3,9),显然点(2,8)是可行域内的整点,点(3,9)不是可行域内的整点。
记点(a,b)处的目标函数的值为z(2,8),所以还应检验点(2,9)与(3,8)是否在可行域内。
注意到目标函数z=200x+150y=150(x+y)+50x,而2+9=3+8,所以必有z (3,8)>z(2,9),所以应先检验点(3,8)是否在可行域内。
观察与计算都表明该点在可行域内。
记点(3,8)为B,B即为搜索到的可行域内邻近边界折线顶点的整点。
(2)作出可行域内的小范围搜索区域。
算出z(3,8)=1800,过B作直线200x+150y=18004x+3y=36.
得到点C(0,12),C为整点。
解方程组
得到点D(4,),△ACD即是新的搜索区域,在S△ACD(包括边)内可以搜索到全部最优解整点,该搜索区域比可行域大大缩小,如图2。
(3)在△ACD(包括边)内整点只有B(3,8)与C(0,12),由于B,C在一直线上,所以z(0,12)= z(3,8)=1800,B,C均为最优解整点,1800为目标函数的最大值。
若要通过计算检验在△ACD(包括边)内搜索,由于x∈[0,4),y∈(,12],所以选择x的整数值检验可使计算量小些,令x=0,1,2,3,即可得到△ACD(包括边)内的全部整点只有B(3,8)与C(0,12)。
显然,“小范围搜索法”的计算量要比把可行域内的整点逐一代入计算检验大大减少。
至此用“小范围搜索法”解题已全部完成,但在此解题过程中还可以有新的发现。
注意到点C(0,12)即为直线6x+5y=50与y轴的交点,直线5x+3y=40与x轴的交点为(8,0),这两个点都在可行域内,且都是可行域边界折线的顶点,又z(8,0)=1600<z(0,12),所以在以实施“小范围搜索法”的第一步操作时,即可选定点C,再过点C 作直线200x+150y=18004x+3y=36,同样可以得到△ACD。
这就是第二种搜索方法。
显然第二种搜索方法比前面的第一种搜索方法更简便。
只是第二种搜索方法在观察图形时不易发现,因为观察图1总让人觉得应该在点A(,)附近找一个整点比较好。
这正是观察的局限性。
观察是认识事物的开端和基础,其重要性是不容忽视的。
但观察不容易深入事物的本质,总不如思维的深刻严密,也不如计算的准确可靠。
例2教科书第85页复习参考题七A组第16题,题目略。
本题的线性约束条件
线性目标函数z=160x+252y,其中x,y分别为A型车和B型车的辆数。
作出可行域如图3。
(1)搜索一个可行域内邻近边界折线顶点的整点。
解方程组
得到点A(7,).
得到点A(,4).
A,B两点都是可行域边界折线的顶点,但它们都不是整点,所以不是最优解。
由于要使目标函数取最小值,因此要寻找可行域左下侧靠近边界上的整点。
显然点(7,1)与(3,4)都是可行域内的整点,又z(7,1)=160×7+252×1=1372,z(3,4)=160×3+252×4=1488,z(7,1)<z(3,4),故点(7,1)优于点(3,4)。
记点(7,1)为C,点C即为搜索到的可行域内邻近边界折线顶点的整点。
(2)作出可行域内的小范围搜索区域。
过C点直线160x+252y=137240x+63y=343.
解方程组
得到
设点(,)为D,得到△ACD,在△ACD(包括边)内可以搜索到全部最优解整点,该搜索范围比可行域大大缩小,如图4。
(3)在△ACD(包括边)内,整点只有(7,1)与(5,2),由于点(5,2)在线段CD的下方,故必有z(5,2)<z(7,1),记点(5,2)为E,E即为最优解整点。
z(5,2)=160×5+252×2=1304即为目标函数的最小值。
若要通过计算检验在△ACD(包括边)内搜索,由于x∈,7],y∈[1,,所以选择y的整数值检验可以使计算量小些,令y=1,2,3,即可得到△ACD(包括边)内的全部整点只有C(7,1)与E(5,2)。
显然,“小范围搜索法”的计算量比将可行域内的整点逐一代入计算检验大大减少。
从上面的两个例子中可以看到,用“小范围搜索法”解线性规划应用问题,目标明确,思路清晰,步骤简明,操作性强,计算量小,准确可靠,既不会增解也不会失解,且不怕作图和观察的误差。
笔者在用此法进行“简单线性规则”教学时,收到了较好的效果,学生感到容易理解接受,操作运用也方便。
事实上,这种逐步缩小目标范围的搜索法是一种具有普遍意义的方法,对培养学生的探索精神,进行思维训练,提高分析问题、解决问题的能力很有好处。