线性规划
1.线性规划的问题形式
设有自变量
x1,x2,x3,...,xn
对于上述自变量,有
m+1个对其进行约束的约束表达式
a11a21...am1x1+a12x2+...+a1nxn<=x1+a22x2+...+a2nxn<=x1+am2x2+...+amnxn<=x1>=0,x2>=0,...,xn>=0b1b2bm
有一个目标函数:
z=c1∗x1+c2∗x2+...+cn∗xn
线性规划要解决的问题是
如何选取一个可行解,以取得最优的效果。【结果最大为最优】
2.解决线性规划经典方法—单纯形法
单纯形法是一种解决线性规划的方法。
它的总体思想是,
我们求解一个具有很多解的问题的最优解时,
我们先得到问题的任意一个可行解
然后对于此可行解进行迭代
我们要保证每次迭代后得到的新的解是一个比迭代前的解更优的解
我们要保证迭代过程是必定会终止的,不能无限迭代
我们要保证迭代终止时,我们得到的解是最优的。
或者迭代终止时,对于没有最优解的情形,我们可以得到原问题没有最优解的信息。
以上皆可保证时,则我们就得出了对于求解多解问题最优解的一种解题思路:
得到初始可行解
对可行解不断迭代
需保证的是:
1.迭代中若判定问题不可解或得到最优解,则立即返回。
2.迭代次数是有限的。
3.每次迭代得到一个更优的解
4.迭代结束,我们得到的解是最优解,或原问题无解的信息。
具体执行中又引入两个辅助概念:
等价问题
对偶问题
3.单纯形法的具体内容
对于线性规划
a11a21...am1x1+a12x2+...+a1nxn<=x1+a22x2+...+a2nxn<=x1+am2x2+...+amnxn<=x1>=0,x2>=0,...,xn>=0b1b2bm
zmax=c1∗x1+c2∗x2+...+cn∗xn
我们构造一个新的问题
b1−a11x1−a12x2−...−a1nxn=xn+1b2−a21x1−a22x2−...−a2nxn=xn+2...bm−am1x1−am2x2−...−amnxn=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0
zmax=c1∗x1+c2∗x2+...+cn∗xn
我们的新问题由n+m个自变量构成
对我们的新问题任意的可行解
(x1,x2,...,xn,...,xn+m)易知,基于此解构造的x_1, x_2,…, x_n$是原问题一个可行解
易知,新问题可行解的目标值和原问题中对应可行解目标值相同。
对我们对原问题的任意可行解
(x1,x2,...,xn)
易知,基于此解构造的
(x1,x2,...,xn,0,...,0)是新问题的一个可行解
易知,原问题可行解的目标值和新问题中对应可行解目标值相同。
对于问题A,问题B
由A的任意可行解,可找到对应的B的可行解,且两解目标值相同
由B的任意可行解,可找到对应的A的可行解,且两解目标值相同
称问题A,B是等价问题。
处理新问题
b1−a11x1−a12x2−...−a1nxn=xn+1b2−a21x1−a22x2−...−a2nxn=xn+2...bm−am1x1−am2x2−...−amnxn=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0
zmax=c1∗x1+c2∗x2+...+cn∗xn
问题分析:
1
对于
b1>=0,b2>=0,...,bm>=0,称为情形1:
易知
x1=0,x2=0,...,xn=0,xn+1=b1,...,xn+m=bm是该问题的一个可行解。
对于
c1,c2,...,cn
1.1:
c1<=0,c2<=0,...,cn<=0
易证
x1=0,x2=0,...,xn=0,xn+1=b1,...,xn+m=bm是一个满足约束的最优解。
这样,我们求解了此问题,最优解为
x1=0,x2=0,...,xn=0,xn+1=b1,...,xn+m=bm
基于此解,得到原问题一个对应解为
x1=0,x2=0,...,xn=0因为此问题和原问题等价。故对应解为原问题的最优解。
1.2:存在
ck>0,1<=k<=n
对于任意约束条件,展开后有
bi−ai1∗x1−ai2∗x2−...−ain∗xn=xn+i
若除了
xk外,其余
x1,...,xn均取0,
xn+i也取0,得:
bi−aik∗xk=0
aik=0时,表示
xk取任何值均可以满足此行的约束。
aik<0 时,表示
xk取任何大于0的值,均可以满足此行的约束。
aik>0时,表示
aik可以取得最大值为
bi/aik。超出此值,在,其余
x1,...,xn均取0前提下,会导致
xn+i<0,破坏约束。
我们对所有约束条件进行一次上述判断,
若其中某条约束条件满足,
aik > 0,我们记录此约束条件在其余
x1,...,xn均取0前提下
aik可取得最大值。
对所有约束进行一次统计,
统计出满足
aik>0,且
bi/aik最小的约束行
i。
约束行
i不存在时,
表示此问题在 其余
x1,...,xn均取0,
xn+1,...,xn+m也均取0下,对
xk没有约束。
此时任意
xk>0, 其余
xi=0构成此问题一个可行解。
此时
z=ck∗xk,ck>0,故此问题是无解的。
相应的,原问题也是无解的。故原问题的最优解不存在。
约束行
i存在时,
bi−ai1∗x1−ai2∗x2−...−ain∗xn=xn+i,aik>0
xk=bi/aik−ai1/aik∗x1−...−ai,(k−1)/ai,k∗xk−1−xn+i/ai,k−ai,(k+1)/ai,k∗xk+1−...−ai,n/ai,k∗xn
将此式代入目标函数
z=c1∗x1+c2∗x2+...+cn∗xn=c1∗x1+...+ck−1∗xk−1+ck∗(bi/aik−ai1/aik∗x1−...−ai,(k−1)/ai,k∗xk−1−xn+i/ai,k−ai,(k+1)/ai,k∗xk+1−...−ai,n/ai,k∗xn)+ck+1∗xk+1+...+cn∗xn=(c1−ck∗ai1/aik)∗x1+...+(ck−1−ck∗ai,(k−1)/ai,k)∗xk−1+ck∗bi/ai,k−ck/ai,k∗xn+i+(ck+1−ck∗ai,(k+1)/ai,k)∗xk+1+...+(cn−ck∗ai,n/ai,k)∗xn=+ck∗bi/ai,k+d1∗y1+d2∗y2+...+dn∗yn
对每个约束条件分别代入
xk=bi/ai,k−ai,1/ai,k∗x1−...−ai,(k−1)/ai,k∗xk−1−xn+i/ai,k−ai,(k+1)/ai,k∗xk+1−...−ai,n/ai,k∗xn
对第
j个约束条件
j!=i时,
bj−aj,1∗x1−aj,2∗x2−...−aj,n∗xn=xn+j
代入
xk得
bj−bi/ai,k∗aj,k−(aj,1−aj,k∗ai,1/ai,k)x1−...−(aj,(k−1)−aj,k∗ai,(k−1)/ai,k∗xk−1+aj,k/ai,k∗xn+i−(aj,(k+1)−aj,k∗ai,k+1/ai,k)xk+1−...−(aj,n−aj,k∗ai,n/ai,k)xn=xn+j
j==i时,
xk=bi/ai,k−ai,1/ai,k∗x1−...−ai,(k−1)/ai,k∗xk−1−xn+i/ai,k−ai,(k+1)/ai,k∗xk+1−...−ai,n/ai,k∗xn
对任意自变量x_t,仍然有x_t >= 0
这样处理后我们得到一个新的线性规划
新问题中,
约束条件左边的n个自变量为
x1,...,xk−1,xn+i,xk+1,...,xn
约束条件右边的m个自变量为
xn+1,...,xn+i−1,xk,xn+i+1,...,xn+m
目标函数中的自变量为
x1,...,xk−1,xn+i,xk+1,...,xn
把代入操作前的问题称为原问题
把代入操作后的问题称为新问题
对新问题的任意一个可行解,
(x1,x2,...,xn,xn+1,...,xn+m)
易知,此可行解也满足原问题的所有约束条件。
易知,此可行解在原问题,新问题中目标值相同。
对原问题的任意一个可行解
(x1,x2,...,xn,xn+1,...,xn+m)
易知,此可行解也满足新问题的所有约束条件。
易知,此可行解在原问题,新问题中目标值相同。
故原问题和新问题是等价的。
新问题中,令
目标函数中自变量全部取0
相应的约束条件右边的m个自变量取值为
对于第j个自变量
若j!=i
xn+j=bj−bi/ai,k∗aj,k
若j==i
xk=bi/ai,k
对于j!=i情况进行分析,
情形1:
aj,k<=0,因为
bi/ai,k>=0,bj>=0,故,此时
xn+j>=0
情形2:
aj,k>0,
xn+j/aj,k=bj/aj,k−bi/ai,k
因为前面统计所有约束,并选取
i时,选取的标准是选取的b_i/a_{i,k}是所有a_{i,k}>0时,b_i/a_{i,k}集合中最小的。
故,此时x_{n+j} >=0
对于j==i时,
xk=bi/ai,k>=0
所以新问题中,目标函数中所有自变量取0,约束条件右边m自变量取值
对于第j个自变量
若j!=i
xn+j=bj−bi/ai,k∗aj,k
若j==i
xk=bi/ai,k
得到一个新问题的可行解。
由于新问题和原问题是等价的,且两者的对应解一致,所以这个解也是原问题的一个解。
且这个解下的目标值,和代入变换前目标函数中所有自变量取0得到的目标值相比增加了c_k*b_i/a_{i,k}。
所以得到了原问题的一个更优的解。
新问题与原问题具有相同的形式,所以,我们可以重复执行
分析目标函数各个自变量因子,
进而决定是否已达到最优解而返回,
还是选取一个k,寻找一个i,构造新问题,并得出新的更好的解或是寻找不到i而无解退出的情形。
当最终,判定为已经达到最优解而返回时,因为我们代入处理中的原问题和新问题等价,且可行解也等价。
因为等价关系的传递性,最终的新问题和我们最初基于线性规划构造的新问题也是等价的。且最终得到的最优解,就是最初构造的问题的最优解。
现在还有一个问题需要考虑:
会不会存在一直迭代,一直都在得出一个不比原问题差的解,但一直迭代而无法退出的场景。
我们迭代过程,构造新问题时,其实是不断改变目标函数中的n个自变量集合。
假设n个自变量集合取某一组合时,我们的线性规范表述为如下形式:
b1−a11x1−a12x2−...−a1nxn=xn+1b2−a21x1−a22x2−...−a2nxn=xn+2...bm−am1x1−am2x2−...−amnxn=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0
zmax=v+c1∗x1+c2∗x2+...+cn∗xn
有没有可能,n个自变量为同一组合时,但代入操作会得到系数不一致的另一种等价形式呢?
假设存在,另一种等价形式
b1′−a11′x1−a12′x2−...−a1n′xn=xn+1b2′−a21′x1−a22′x2−...−a2n′xn=xn+2...bm′−am1′x1−am2′x2−...−amn′xn=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0
zmax=v′+c1′∗x1+c2′∗x2+...+cn′∗xn
因为两个问题等价。且代入过程始终保持
bi>=0
取
x1=0,...,xn=0,
xn+1=b1,...,xn+m=bm得到形式1的一个可行解,因为等价,所以这个解也是形式2的一个可行解。所以
b1=b1′,...,bm=bm′,v=v′.
取
x2=0,...xn=0
得
形式1
b1−a11x1=xn+1b2−a21x1=xn+2...bm−am1x1=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0
zmax=v+c1∗x1
形式2
b1−a11′x1=xn+1b2−a21′x1=xn+2...bm−am1′x1=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0
zmax=v′+c1′∗x1
因为两种形式等价,解相等。
所以
a11=a11′,...,am1=am1′,c1=c1′
类似可证其他系数相等性。
综合,上述代入处理中,如果确定了目标函数中n个自变量的一个组合,则,对应形式的线性规划是唯一的。
目标n个自变量的所有组合个数:
Cn+mn。
所以迭代执行次数不会超过
Cn+mn,如果超过此数目,说明迭代过程中存在对某些组合重复循环迭代的情况,这时,表明发生了循环,可以退出并提示产生循环,而无法使用单纯形求解。
2
存在
1<=k<=m,使
bk<0
要求解问题为
b1−a11x1−a12x2−...−a1nxn=xn+1b2−a21x1−a22x2−...−a2nxn=xn+2...bm−am1x1−am2x2−...−amnxn=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0
zmax=c1∗x1+c2∗x2+...+cn∗xn
我们构造一个辅助问题
b1−a11x1−a12x2−...−a1nxn+x0=xn+1b2−a21x1−a22x2−...−a2nxn+x0=xn+2...bm−am1x1−am2x2−...−amnxn+x0=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0,x0>=0
zmax=−x0
对于此问题
如果其最优解中
x0=0,则易知其最优解是原问题的一个可行解。
对于此辅助问题,取
x1=0,...,xn=0。
统计所有
bi<0中绝对值最大的
bj。
令
x0=abs(bj)得到辅助线性规划一个可行解。
思考:我们的原始线性规划不符合我们安全迭代的要求。
因为其基本解不可行。所以无法利用构造初始可行解并不断迭代的产生更好选择的思想来得到最优结果。
由于线性规划具有等价概念,如果我们可以找到与原始线性规划等价的一个线性规划,对此线性规划有基本解可行。则,我们可以以我们找到的等价线性规划为起点进行迭代,从而可以得到最后结果。
我们的迭代特点:
每次迭代产生的新的线性规划和迭代前等价。
每次迭代产生的新的线性规划的基本解下目标值比迭代前基本解下目标值优秀。
每次迭代产生的新的线性规划都是安全的。也即基本解是可行的。
对于我们上述的辅助线性规划,如果其最优解为中
x0=0,则易知此最优解是原始线性规划的一个可行解。
b1−a11x1−a12x2−...−a1nxn+x0=xn+1b2−a21x1−a22x2−...−a2nxn+x0=xn+2...bm−am1x1−am2x2−...−amnxn+x0=xn+mx1>=0,x2>=0,...,xn>=0,xn+1>=0,...,xn+m>=0,x0>=0
zmax=−x0
已知存在某个
bi<0,我们遍历并获得最小的
bi。
bi−ai,1x1−ai,2x2−...−ai,nxn+x0=xn+i
有
x0=xn+i−bi+ai,1x1+ai,2x2+...+ai,nxn
把上式代入所有约束条件有:
j!=i时
bj−aj1x1−aj2x2−...−ajnxn+x0=xn+j
代入后
bj−bi−(aj,1−ai,1)x1−...−(aj,n−ai,n)xn+xn+i=xn+j
j==i时
x0=xn+i−bi+ai,1x1+ai,2x2+...+ai,nxn
目标函数:
z=−x0=−xn+i+bi−ai,1x1−ai,2x2−...−ai,nxn
新的线性规划中,
约束左边由
n+1个自变量构成,他们是
x0,...,xn,xn+i
约束右边由
m个自变量构成,他们是
xn+1,...,xn+i−1,x0,xn+i+1,...,xn+m
新的线性规划中,易知
x0=0,...,xn=0,xn+i=0,
xn+1=b1−bi,...,xn+i−1=bi−1−bi,x0=−bi,xn+i+1=bi+1−bi,...,xn+m=bm−bi是一个可行解。
易知,新的线性规划和原始辅助线性规划等价。
新的线性规划,可以使用不断迭代的方式,并最终得出此线性规划的一个最优解。
如果此线性规划的最优解中
x0>0,则表示我们要求解的原始线性规划找不到一个可行解。所有,我们原始的线性规划是无解的。
如果此线性规划的最优解中
x0=0,则易知,此最优解中去掉
x0,其余
x构成了我们要求解的线性规划的一个可行解。
此时,
我们对于辅助线性规划,迭代到最后得到的线性规划形式中,将每个约束条件中的
x0取0,得到新的约束条件。
此约束条件由
x1,...,xn,xn+1,...,xn+m共
n+m个自变量构成,
易知此约束条件存在可行解。
易知此约束条件等价于我们要求解的线性规划的m个约束条件。
所以,我们将要求解的线性规划的约束条件替换为这里的约束条件并返回。
这样我们就得到了一个和要求解的原始线性规划等价的,具备基本可行解的新的线性规划。此线性规划属于情形1,是可以持续迭代并求取最优解的。