大M法(基本原理+例题分析)

基本思想:构造一个辅助线性规划问题(ALP),通过求解它得到线性规则(LP)的初始可行基。

目录

基本概念:

例题分析:


基本概念:

对于标准形式的线性规则问题:

\left\{\begin{matrix} minf(x)=c^{T}x\\s.t.Ax=b \\ x\geq 0 \end{matrix}\right.

其中 b\geq 0,A 是 m\times n 矩阵,m< n,但 A 不一定满秩。

首先,增加两个 m 维向量:e=(1,1,...,1)^{T},x_{M}=(x_{n+1},x_{n+2},...,x_{n+m})^{T}

其中 x_{n+1},x_{n+2},...,x_{n+m} 称为人工变量。

然后,构造辅助标准线性规划问题(ALP) :

ALP\left\{\begin{matrix} minf_{1}(x,x_{M})=c^{T}x+Me^{T}x_{M}\\s.t.Ax+x_{M}=b \\ x\geq 0,x_{M}\geq 0 \end{matrix}\right.

其中 M 是一个很大的正数,这样在极小化目标函数的过程中,由于大 M 的存在,即迫使人工变量离基。

用单纯形法求解(ALP),其结果为下列几种情形之一:

(1)求得(ALP)的最优解,并且人工变量全是零,此时得到的 x 就是(LP)的最优解;

(2)求得(ALP)的最优解,但是人工变量不全是零,则(LP)无最优解;

(3)发现(ALP)没有最优解,则(LP)没有最优解或者没有可行解。


例题分析:

例题:用大 M 法求解线性规划问题:

\left\{\begin{matrix} minf(x)=-3x_{1}+x_{2}+x_{3}\\s.t.x_{1}-2x_{2}+x_{3}\leq 11\\-4x_{1}+x_{2}+2x_{3}\geq 3\\-2x_{1}+x_{3}=1\\ x_{1},x_{2},x_{3}\geq 0 \end{matrix}\right.

解:构造辅助线性规划(ALP)

\left\{\begin{matrix} minf_{(x)}=-3x_{1}+x_{2}+x_{3}\\s.t.x_{1}-2x_{2}+x_{3}+x_{4}=11\\-4x_{1}+x_{2}+2x_{3}-x_{5}+x_{6}= 3\\-2x_{1}+x_{3}+x_{7}=1\\ x_{1},x_{2},x_{3},x_{4},x_{5},x_{6},x_{7}\geq 0 \end{matrix}\right.

可以得到下列矩阵:

A=\left [ \begin{smallmatrix} 1 &-2 &1&1 &0 &0 &0 \\-4 &1 &2 &0 &-1 &1 &0 \\-2 &0 & 1 &0 &0 &0 & 1 \end{smallmatrix} \right ]b=\bigl(\begin{smallmatrix} 11\\ 3 \\1 \end{smallmatrix}\bigr)c=(-3,1,1,0,0,M,M)^{T}

ALP 选取 x_{4},x_{6},x_{7} 作为基,B_{1}=[p_{4},p_{6},p_{7}]

c_{B_{1}}^{T}B^{-1}A-c^{T}=(0,M,M) B A-(-3,1,1,0,0,M,M)

=(-6M+3,M-1,3M-1,0,-M,0,0)

x_{1}x_{2}x_{3}x_{4}x_{5}x_{6}x_{7}
f4M-6M+3M-13M-10-M00
x_{4}111-211000
x_{6}3-4120-110
x_{7}1-2010001

Min\left \{ \frac{3}{1}\right \}=3

离基变量:x_{6},进基变量:x_{2}

x_{1}x_{2}x_{3}x_{4}x_{5}x_{6}x_{7}
f3+M-2M-101+M0-11-M0
x_{4}17-7051-220
x_{2}3-4120-110
x_{7}1-2010001

Min\left \{ \frac{17}{5},\frac{3}{2},\frac{1}{1} \right \}=1

离基变量:x_{7},进基变量:x_{3}

x_{1}x_{2}x_{3}x_{4}x_{5}x_{6}x_{7}
f21000-11-M-M-1
x_{4}123001-22-5
x_{2}10100-11-2
x_{3}1-2010001

Min\left \{ \frac{12}{3}\right \}=4

离基变量:x_{4},进基变量:x_{1}

x_{1}x_{2}x_{3}x_{4}x_{5}x_{6}x_{7}
f-2000-1/3-1/31/3-M2/3-M
x_{1}41001/3-2/32/3-5/3
x_{2}10100-11-2
x_{3}90012/3-4/34/3-7/3

此时,检验数全负,得到 ALP 的最优解 (x,x_{M})^{T}=(4,1,9,0,0,0,0)^{T}

原问题的最优解为:x^{T}=(4,1,9) ,最优值为 f =-2。

(行文中若有纰漏,希望大家指正)

### M单纯形法在MATLAB中的实现 M单纯形法是一种处理线性规划问题中含有等于约束条件的方。通过引入人工变量并赋予其极成本系数M,可以确保初始基本可行解的存在,并逐步优化直到找到真正的最优解。 #### MATLAB代码示例 下面是一个简单的M单纯形法的MATLAB实现: ```matlab function [optimal_solution, optimal_value] = big_m_simplex(c, A, b, M) % c为目标函数系数向量;A为不等式矩阵;b为右侧常数项; % M为人造变量的成本因子(通常取一个非常的正数) [m, n] = size(A); artificial_vars = speye(m); % 创建单位阵作为人造变量 c_extended = [c; zeros(m, 1)]; % 扩展目标函数系数向量以容纳新的人造变量 basis_indices = (n+1):(n+m); % 初始基底索引设置为人造变量的位置 while true B = A(:, basis_indices); % 当前基底对应的列组成子矩阵B cb = c_extended(basis_indices); % 基本变量的目标函数系数 inv_B = inv(B); xb = inv_B * b; if any(xb < 0) || all(cb >= 0) break; end y = inv_B' * c_extended'; entering_var_index = find(y(1:n) < 0, 1); % 寻找进入基础的新变量 d = inv_B * A(:,entering_var_index); ratio_test_results = []; for i=1:m if d(i)>0 ratio_test_results(end+1)=xb(i)/d(i); else ratio_test_results(end+1)=inf; end end leaving_var_index = min(ratio_test_results); [~, idx]=min(abs(leaving_var_index-ratio_test_results)); leaving_var_position=basis_indices(idx); basis_indices(idx) = entering_var_index; end if sum(isnan(xb))>0||sum(isinf(xb))>0 disp('无界解'); else non_basic_variables_values=zeros(n-m,1); basic_variables_values=inv_B*b; solution=[non_basic_variables_values;basis_indices]; objective_function_value=sum(solution.*cb); optimal_solution=solution; optimal_value=-objective_function_value; end ``` 此段程序实现了M方的核心逻辑,在每次迭代过程中寻找新的入基变量和离基变量直至达到最优状态[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

背对人潮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值