当前位置: 首页 > article >正文

最优化方法复习——线性规划之单纯性法

1、线性规划矩阵形式

线性规划标准形式的矩阵形式:

\begin{aligned}&\text{maximize }\mathbf{c}^T\mathbf{x}\\&\text{subject to }\mathbf{A}\mathbf{x}\leq\mathbf{b},\mathbf{x}\geq0\end{aligned}

2、单纯形法原理

考虑(LP)多面体为S=\{x\in\mathbb{R}^{n}\mid Ax=b,x\geq0\}

解的存在性:

考虑(LP)及上述多面体S,设 A 满秩,x(1),x(2) , …,x(k)为所有极点,d(1),d(2) , …,d(l) 为所有极方向。那么,

(1) (LP)存在有界最优解的充要条件:c^Td^{(j)}\leq0,\forall j

(2)若(LP)存在有界最优解, 则最优解可以在某个极点达到 。

最优性定理:

考虑(LP) , 条件同上,设 x* 为极点, 存在分解 A = (B , N ),其中B为m阶非奇异矩阵,使 x^{*T}=(x_{B}^{*},x_{N}^{*})), 这里 x^{*}_{B}=B^{-1}b\geq0,\quad x^{*}{}_{N}=0, 相应c^T=(c_B^T,c_N^T) 。那么

(1)若 c_N^T-c_B^TB^{-1}N\leq0, 则 x*为opt.。

(2)若c_{j}-c_{B}^{T}B^{-1}a_{j}>0,B^{-1}a_{j}\leq0, 则 (LP) 无有界解。

在标准形中,有 $m$个约束条件 (不包括非负约束), $n$个决策变量,且 ${n\geq m}$。首先选取$m$个基变量 $x_j^{\prime}(j=1,2,\ldots,m)$,基变量对应约束系数矩阵的列向量线性无关。通过矩阵的线性变换,基变量可由非基变量表示:

$ x_i^{^{\prime}}=C_i+\sum_{j=m+1}^nm_{ij}x_j^{^{\prime}}(i=1,2,\ldots,m) $

如果令非基变量等于 0, 可求得基变量的值:$ x_i^{^{\prime}}=C_i $,如果为可行解的话,C_i大于 0。

满足线性规划问题约束条件的所有点组成的集合就是线性规划的可行域。若可行域有界(以下主要考虑有界可行域),线性规划问题的目标函数最优解必然在可行域的顶点上达到最优。单纯形法就是通过设置不同的基向量,经过矩阵的线性变换,求得基可行解(可行域顶点),并判断该解是否最优,否则继续设置另一组基向量,重复执行以上步骤,直到找到最优解。所以,单纯形法的求解过程是一个循环迭代的过程。

3、单纯形法步骤

单纯形法的一般解题步骤可归纳如下:

  1. 把线性规划问题的约束方程组表达成典范型方程组,找出基本可行解作为初始基本可行解。
  2. 若基本可行解不存在,即约束条件有矛盾,则问题无解。
  3. 若基本可行解存在,从初始基可行解作为起点,根据最优性条件和可行性条件,引入非基变量取代某一基变量,找出目标函数值更优的另一基本可行解。
  4. 按步骤3进行迭代,直到对应检验数满足最优性条件(这时目标函数值不能再改善),即得到问题的最优解。
  5. 若迭代过程中发现问题的目标函数值无界,则终止迭代。

4、单纯性表格计算

5、代码实现

来自matlab 线性规划 单纯形法_线性规划单纯形法matlab_白水baishui的博客-CSDN博客

%% SimplexMax.m
function [x, c, z, pt, ind_B, ind_N] = SimplexMax(c, A, b, ind_B, iter_tag)
% 单纯形法求解标准形线性规划问题: max cx s.t. Ax=b x>=0
% 输入参数: c为目标函数系数, A为等式约束方程组系数矩阵, b为等式约束方程组常数项, ind_B为松弛变量索引
% 输出参数: 
% x: 最优解, x中前len(ind_b)个是x_b, 后面的是x_N; 
% c: 最优系数, c中从前往后分别是x1的系数、x2的系数、x3的系数......; 
% z: 最优目标函数值 z_0;
% ST存储单纯形表数据;
% res_case=0表示有最优解,res_case=1表示有无界解[m,n] = size(A);              %m约束条件个数, n决策变量数ind_N = setdiff(1:n, ind_B);  %非松弛变量的索引ST = [];format ratstep_iter = 0;% 循环求解while truex0 = zeros(n,1);x0(ind_B) = b;               %初始基可行解cB = c(ind_B);               %计算cBSigma = zeros(1,n);Sigma(ind_N) = c(ind_N) - cB*A(:,ind_N);   % 计算检验数[~, k] = max(Sigma);         % 选出最大检验数, 确定松弛变量索引kTheta = b ./ A(:,k);         % 计算θTheta(Theta<=0) = 10000;[~, q] = min(Theta);         % 选出最小θel = ind_B(q);               % 确定出松弛变量索引el, 主元为A(q,k)vals = [cB', ind_B', b, A, Theta];vals = [vals; NaN, NaN, NaN, Sigma, NaN];ST = [ST; vals];if ~any(Sigma > 0)           %此基可行解为最优解, any存在某个>0      disp('当前基可行解为最优解');x = x0;z = c * x;pt = Sigma(ind_N);res_case = 0;returnelsedisp('当前基可行解不为最优解');x = x0;z = c * x;pt = Sigma(ind_N);res_case = 0;end %  if ~any(Sigma > 0) if all(A(:,k) <= 0)          %有无界解disp('有无界解');x = [];res_case = 1;breakend % if all(A(:,k) <= 0) step_iter = step_iter + 1;if step_iter == iter_tagbreakend % if step_iter% 换基ind_B(ind_B == el) = k;      % 新的松弛变量索引ind_N = setdiff(1:n, ind_B); % 自变量索引% 更新A和bA(:,ind_N) = A(:,ind_B) \ A(:,ind_N);b = A(:,ind_B) \ b;A(:,ind_B) = eye(m,m);end
end % function [x, c, z,ST,res_case] = SimplexMax(c,A,b,ind_B)

参考链接:

https://zh.wikipedia.org/wiki/%E5%8D%95%E7%BA%AF%E5%BD%A2%E6%B3%95#%E6%96%B9%E6%B3%95%E6%AD%A5%E9%AA%A4

【学界】单纯形算法的原理和示例实现 - 磊磊的文章 - 知乎
https://zhuanlan.zhihu.com/p/35097686

matlab 线性规划 单纯形法_线性规划单纯形法matlab_白水baishui的博客-CSDN博客

http://www.lryc.cn/news/2419988.html

相关文章:

  • PyTorch 1.7 Video 初体验(Video Datasets,Video IO,Video Classification Models,Video Transform)
  • Transformer + SD解析与实战——Datawhale AI视频生成学习2
  • linux ftp 配额 quota,linux – vsftpd中的配额?
  • Microsoft Visual C++ Runtime Library Runtime Error的解决的方法
  • HTML基础知识,全是干货
  • CentOS7 Nginx配置ssl证书实现https安全访问
  • 门诊软件(集药房管理、划价收费、电子病历、电子处方、诊疗卡、财务为一体)
  • 9、include 文件包含
  • pci-e串口卡linux 驱动下载,PCI/PCIe串口卡并口卡驱动
  • HMM(隐马尔可夫)中文分词
  • 白嫖云开发?这羊毛不薅?
  • 下载并安装WIN7 SP2的官方补丁包
  • 洛谷入门——P1179 [NOIP2010 普及组] 数字统计
  • Android BroadcastReceiver
  • 工业大数据:制造业中的优化策略
  • asp毕业设计——基于asp+access的公司门户网站设计与实现(毕业论文+程序源码)——公司门户网站
  • 做网站的流程与步骤
  • 信管家博易大师、智星、易盛等都是证券交易软件,它们的区别主要在以下几个方面
  • 计算机考试重点题目与答案
  • 什么是CGI文件
  • Python Selenium搭建UI自动化测试框架_python ui自动化框架(1)
  • 小RNA的测序技术路线以及分析流程
  • Gabor滤波器
  • 数据结构 - 向量简单介绍
  • 从零开始搭建个人博客(保姆级教程)
  • 网络:DHCP 协议简介
  • 阿里巴巴国际站商品信息搜索采集API接口说明文档(含请求示例)
  • 基于java+ssm+jsp的人事档案管理系统
  • C++课程设计学生宿舍管理信息系统
  • 基于ssm大学生创新创业平台项目管理子系统设计与实现