§4 条件极值问题解法
本节讨论目标函数
![]()
在一组不等式
(或
)
或等式
![]()
约束条件下的极值问题解法.这种问题称为条件极值问题,当目标函数和约束条件关于自变量都是线性时,称为线性规划问题,否则称为非线性规划问题.
条件极值问题就是要求在
维欧氏空间
的一个由不等式约束条件所限定的区域:
![]()
上求一点
,使得目标函数
达到极小值(或极大值)
,即
![]()
其中
,![]()
是定义在
的某一开集
上的具有一阶连续偏导数的实值函数.
因为在同样的约束条件下,极小和极大只是目标函数相差一符号,以后限于讨论极小的情况.
若某一
,有
![]()
则称
为
的内点,若
,存在一个
使
![]()
则称
为
的边界点.
[线性规划问题的可行解与极小可行解] 线性规划问题就是求目标函数
(1)
在约束条件
(
) (
)
(
) (
)
(
) (
)
(
)
下的极小值,其中有
个等式约束条件,其余是不等式约束条件.假定![]()
.
对形如(
)的约束条件,则引进松驰变量
,把它变为等式
![]()
对形如(
)的约束条件,则引进松驰变量
,把它变为等式
(
)
松驰变量并不出现在目标函数(1)中,它的引进并不影响问题的最优解,它把所有约束条件(除了
外)化成统一的等式形式
(3)
式中
是
维矢量,它包含所有原来的变量和松驰变量,
是
维常数矢量,而
是
矩阵,因此(3)表示
个未知量的
个方程的线性方程组.
所以线性规划问题可以表述为如下三种等价形式:
求目标函数
(
)
在约束条件
(
)
(
) (
)
下的极小值,假定
(
).
求目标函数
(4b)
在约束条件
(5b)
![]()
(6b)
下的极小值,其中
是一行矢量,
是一列矢量,
为
矩阵(
),
是一列矢量,假定
.
求目标函数
(4c)
在约束条件
(5c)
![]()
(6c)
下的极小值,其中
是矩阵A的第
列矢量
,假定
![]()
称为目标函数(4)的价格系数.
定义1 满足条件(5)和(6)的矢量
称为线性规划问题的可行解.
定义2 若可行解
的分量中至多有
个
,则称
为基本可行解.
定义3 若一个基本可行解
恰有
个分量
,则称
为非退化的基本可行解.
定义4 使目标函数(4)达到极小值的可行解称为极小可行解(简称极小解).
集合 ![]()
是一凸集,它有有限个顶点,若线性规划中目标函数(4)有极小值,则必可在其凸集
上某一顶点达到.
假设线性规划问题是可行的,每一基本可行解都是非退化的,并且给定一基本可行解
和与它关联的一组线性无关矢量
则有
![]()
![]()
式是所有
,
为目标函数的价格系数,
为目标函数相应于给定解
的数值.由于
是线性无关的,存在
满足
(
)
并且定义
(
)
式中
为相应于
的价格系数.
定 理 1 如果对任一固定的
,条件
成立,那末可以构造一组可行解使得对组中的任一可行解都有
,其中
的下限或者是有限的或者是无限的(
是目标函数相应于可行解组中某一可行解的数值.)
定理2 如果对任一基本可行解
,条件
对所有
成立,那末
是一极小可行解.
[单纯形法] 根据以上两个定理解线性规划问题的单纯形法就是从已知的某一基本可行解(它是满足约束条件的一切点即可行解所组成的凸集
的一个顶点)出发,确定这点是否使目标函数达到极小值.如果不是,依次构造新的基本可行解(它们是凸集
的相邻顶点),其相应的目标函数值小于或等于前面的数值.经过有限步(通常在
和
之间)就可得到极小解.所以单纯形法实际是凸集顶点的一个迭代方法.下面分两种情形叙述.
假设矩阵
的
个列矢量
包含
个单位矢量并集中在一起组成一个
阶单位矩阵,不妨设这些列矢量
,命
(
为
阶单位矩阵)
称为容许基底.由于
,而且
的所有元素都是非负的,因此有初始基本可行解
![]()
式中
![]()
![]()
列表如下:
表 1
|
i |
基底 |
|
|
|
… |
|
… |
|
|
… |
|
… |
|
… |
|
|
|
|
|
|
… |
|
… |
|
|
… |
|
… |
|
… |
|
|||
|
1 |
|
|
|
1 |
0 |
… |
0 |
… |
0 |
|
… |
|
… |
|
… |
|
|
2 |
|
|
|
0 |
1 |
… |
0 |
… |
0 |
|
… |
|
… |
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
… |
1 |
… |
0 |
|
… |
|
… |
|
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
… |
0 |
… |
1 |
|
… |
|
… |
|
… |
|
|
|
|
0 |
0 |
… |
0 |
… |
0 |
|
… |
|
… |
|
… |
|
由于
,因此表中
.表中
![]()
![]()
元素
和
在它们所在列的第
行出现.对基底矢量
总是等于零.有了表1后就可对它进行如下的单纯形法迭代:
(1) 检验是否所有的
.如果所有
,那末
是极小解,相应的目标函数值为
.
(2) 如果某个
,则选择对应于
![]()
的矢量
进入基底.
(3) 把对应于
![]()
的矢量
从基底中消去.如果所有的
,那末目标函数值无界.
(4) 为了得到新解
,新矢量
和相应的
,对表1中行
和列
的每一元素用下面的主元素(
)消去法公式进行变换
![]()
![]()
其中
![]()
每迭代一次就得到一新的基本可行解,重复步骤(1)~(4)直到求得极小解或者确定一无界解.
对表1进行上述迭代一次后就得到下表:
表 2
|
|
基底 |
|
|
|
… |
|
… |
|
|
… |
|
… |
|
… |
|
|
|
|
|
|
… |
|
… |
|
|
… |
|
… |
|
… |
|
|||
|
1 |
|
|
|
1 |
0 |
… |
… |
… |
0 |
|
… |
|
… |
0 |
… |
|
|
2 |
|
|
|
0 |
1 |
… |
|
… |
0 |
|
… |
|
… |
0 |
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
… |
|
… |
0 |
|
… |
|
… |
1 |
… |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
0 |
… |
|
… |
1 |
|
… |
|
… |
0 |
… |
|
|
|
|
0 |
0 |
… |
|
… |
0 |
|
… |
|
… |
0 |
… |
|
假设矩阵A不包含一个
阶单位矩阵.这时可采用下面的人工基底法:
引进人工变量
(
)将线性规划问题的系统扩大为:
极小化
![]()
满足条件

和
,其中
为一未定的大的正数(不必指定
的数值).矢量
形成扩大系统的一个基底(人工基底).
对扩大了的问题,第一个可行解为
![]()
相应的目标函数值为
.由于基底组成一个单位矩阵,所以
![]()
![]()
(
)
列表如下:
表 3
|
|
基底 |
|
|
|
… |
|
… |
|
|
… |
|
… |
|
|
|
|
|
|
… |
|
… |
|
|
… |
|
… |
|
|||
|
1 |
|
|
|
|
|
… |
|
… |
|
1 |
… |
0 |
… |
0 |
|
2 |
|
|
|
|
|
… |
|
… |
|
0 |
… |
0 |
… |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
|
… |
|
0 |
… |
1 |
… |
0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
… |
|
… |
|
0 |
… |
0 |
… |
1 |
|
|
0
|
|
|
… … |
|
|
0 0 |
… … |
0 0 |
… … |
0 0 |
除了将和第
行的最大正数相对应的矢量引进基底以外,表3和表1一样处理.第
行的元素也用通常的主元素消去法公式加以变换.一旦将一人工矢量从基底消去,就不再进入基底,所以没有必要去变换表中最后的
列.继续进行上述迭代直到所有人工矢量都从基底消去,或者第
行没有正的元素存在.
如果原来的问题包含一些单位矢量,那末这些矢量可以和必要的人工矢量一起作为初始基底,这样可以减少迭代次数.
例1 极大化 ![]()
满足条件

和
![]()
解 把上述问题改为极小化
.
由于给定系统包含一单位矢量
,因此只需要两个人工矢量
和
,与
一起作为初始基底.第一个解(表4)为![]()
,相应的目标函数值等于
.
的计算可由
和矢量
的内积得到.例如
![]()
因为(
)的极大元素为5,所以将矢量
引进基底.相应的
,故人工矢量
从基底消去,用主元素消去公式变换表4中第1步的所有元素,相应的目标函数值为
,新解为![]()
,.
引进基底,
从基底消去.在第3步,由于所有的
而且
,得到原来问题的一个可行解
![]()
表 4
第1步
|
|
基底 |
|
|
-1 |
-2 |
-3 |
1 |
|
|
|
|
|
|
|
|
|
||||
|
1 2 3 |
|
1 |
15 20 10 |
1 2 1 |
2 1 2 |
3
1 |
0 0 1 |
1 0 0 |
0 1 1 |
|
4 5 |
10 35 |
2 3 |
4 3 |
4 8 |
0 0 |
0 0 |
0 0 |
第2步
|
|
|
3 |
|
|
0 |
0 |
1 |
|
|
-3 |
4 |
|
|
1 |
0 |
0 |
|
|
1 |
6 |
|
|
0 |
1 |
0 |
|
-6 |
|
|
0 |
0 |
0 |
||
|
3 |
|
|
0 |
0 |
0 |
第3步
|
|
-2 |
|
|
1 |
0 |
0 |
|
|
-3 |
|
|
0 |
1 |
0 |
|
|
1 |
|
|
0 |
0 |
1 |
|
|
|
0 |
0 |
0 |
||
|
0 |
0 |
0 |
0 |
0 |
第4步
|
|
-2 |
|
0 |
1 |
0 |
|
|
|
-3 |
|
0 |
0 |
1 |
|
|
|
-1 |
|
1 |
0 |
0 |
|
|
-15 |
0 |
0 |
0 |
-1 |
相应的目标函数值等于
.第4步得到一极小可行解
![]()
而
,且目标函数
的值等于-15.所以所要求的目标函数
的值为+15.
[改进的单纯形法] 单纯形法和改进的单纯形法的主要区别在于单纯形法用消去公式变换单纯形表中的所有元素,而改进的单纯形法只要用同样的公式变换基底
的逆矩阵
的元素,一般来说改进的单纯形法计算量比原单纯形法的计算量小.
为了便于使用改进的单纯形法,引进两个新变量(称为“多余”变量)
和
如下:
将一般的线性规划问题(4)~(6)改为等价问题:极大化
满足条件
(7)
(8)
(9)
并且假设所有的
.
再定义“多余方程”:
![]()
其中
(10)
引进人工变量
,命
,那末可将改进的问题(7)~(9)改写为极大化
(11)
满足条件
(12)
(13)
由(10)和(12)有
![]()
由于
,显然
不能是正的.
改进的单纯形法就是通过解改进的线性规划问题(11)~(13)来得到一般的线性规划问题(4)~(6)的解.
从(12)中分离出所需要的系数并排成
矩阵如下:

将
的诸列矢量记为
.
命
为
矩阵

的前
行和
列表示初始基底B的逆矩阵.命
表示U的第i个行矢量,
表示U的变换后的第i个行矢量.
将矩阵U和初始解
排成如表5中初始表的形式.计算步骤如下:
第一阶段 在解中有正值的人工变量时:
(1) 如果
,则计算
![]()
并进行(2).
如果
,则进行第二阶段(1).
表 5
|
|
解中变量 的标号 |
变量的值 |
矩阵U |
|
||
|
初 始 表 |
1 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
变 换 |
1 2
|
|
|
|
|
|
|
表 |
|
|
|
|
|
|
(2)如果所有的
,那末
达到它的极大值,因此问题(7)~(9)不存在可行解.
若至少有一
,则将对应于
![]()
的变量
引入解中.若有几个
等于极小值,则选择标号
最小的
.
(3)计算
![]()
把对应于
(
)
的变量
从解中消去.若有几个
对应于极小值,则选择标号
最小的
.
(4)基本可行解中变量的新值由公式
![]()
![]()
得到.矩阵
的新元素由变换
![]()
![]()
得到.在这个变换下
的第
和
列不变.
重复以上步骤,直到确定没有可行解存在或者
.如果
,则进行第二阶段.
第二阶段 在解中无正值的人工变量时:
(1) 此时
.计算
(
)
(2) 如果所有的
,那末
达到它的极大值,相应的基本可行解是最优解.
是要极小化的目标函数的真值.
如果至少有一个
,则将对应于
![]()
的变量
引入解中.若有几个
对应于极小值,则选择标号
最小的
.
(3) 计算
![]()
把对应于
(
)
的变量
从解中消去.若有几个
对应于极小值,则选择标号
最小的
.如果所有的
,那末得到一解其对应的目标函数值可以任意大.
(4) 变量的新值由公式

得到.矩阵U的新元素由变换

得到.
重复以上步骤直到确定一个最优解其对应的目标函数值是有限的或者是无限的.
(11)~(13)的初始解和以上步骤可以按表5所安排的计算步骤实现.
注意,若矩阵A的某一列是单位矢量且其对应的价格系数为零(例如某些松驰矢量),则该矢量可作为基底矢量,这样可以避免使用全人工基底减少迭代次数.
例2 极大化
![]()
满足条件

和
![]()
解 这里
.相应的极小化问题的目标函数为
![]()
上述问题的全人工基底的改进单纯形法为:极大化满足条件

第4行的前面四个变量的系数等于原来要极小化的目标函数
的表达式中的相应的
,第5个方程的变量
的系数和方程的右端常数项由公式(10)得到.
矩阵
和
分别为


初始表和相继的迭代过程如表6所示.
表 6
|
|
解中变量 的标号 |
变量的值 |
矩阵 |
|
第一阶段 |
||
|
初 始 表 |
1 2 3 |
5 6 7 |
15 20 10 |
|
|
3
1 |
|
|
4 5 |
8 9 |
0 -45 |
|
|
|
||
|
第 1 次 迭 代 |
1 2 3 |
5 3 7 |
3 4 6 |
|
0 0 0 0 0 0 |
|
|
|
4 5 |
8 9 |
|
|
|
|
||
|
第 2 次 迭 代 |
1 2 3 |
2 3 7 |
|
|
0 0 0 0 0 0 |
0 0
|
|
|
4 5 |
8 9 |
+15
|
|
|
|
||
|
第 3 次 迭 代 |
1 2 3 |
2 3 7 |
|
|
0 0 0 0 0 0 |
|
|
|
4 5 |
8 9 |
|
|
|
|
|
|
|
第 4 次 迭 代 |
1 2 3 |
2 3 1 |
|
|
0 0 0 0 0 0 |
所有的 最优解 |
|
|
|
|
|
|
|
目标函数的值: |
||
[拉格朗日乘数法] (见第五章§3,十)将条件极值问题化为无条件极值问题后可以利用§2和§3无条件极值问题的解法求解.
[惩罚函数法(SUMT方法)]
外点法(SUMT方法之一) 考虑一般形式的条件极值问题
(14)
其中
![]()
而
为定义在
上的连续函数.其迭代程序如下:
(1) 选取
(例如取
),预先给定的允许误差为
,令
.
(2) 求无条件极值问题的最优解
:
![]()
其中
![]()
(3) 若存在某
,满足
![]()
则取
(例如
或5),令
,进行(2);否则就得到条件极值问题(14)的最优解的近似解
.
内点法(SUMT方法之二) 考虑一般形式的条件极值问题
![]()
(15)
其中
![]()
且
![]()
(
表示空集),而
为定义在
上的具有一阶连续偏导数的函数,其迭代程序如下:
(1) 选取
(例如取
),预先给定的允许误差为
.
(2) 求
的内点
,令
.
(3) 以
作为初始点,对
在保持可行性的情况下,使用求解无条件极值问题的方法求解:
![]()
其中
![]()
或
![]()
(4) 当取
时,检验是否满足判别准则:
![]()
而当取
时,检验是否满足判别准则:
![]()
若满足判别准则,则得到条件极值问题(15)的最优解的近似解
;否则,取
(例如
或5),令
,进行(3).
附:内点求法
设
![]()
![]()
其中
是定义在集合
上的连续函数.
所谓求内点就是求出一点
,其迭代程序如下:
(1) 任取一点
,及数
(例如
),令
.
(2) 求出集合
及
:
![]()
![]()
(3) 若
,则得到内点
,否则,进行(4).
(4) 在保持对集合
的可行性的情况下极小化
,即
![]()
其中
![]()
![]()
(
)
设
为上述问题的最优解的近似解.
(5) 取
(例如
,
或5),令
,进行(2).