【运筹学】线性规划数学模型 ( 线性规划求解 | 根据非基变量的解得到基变量解 | 基解 | 基可行解 | 可行基 )
文章目录
一、线性规划求解
在上一篇博客 【运筹学】线性规划数学模型 ( 求解基矩阵示例 | 矩阵的可逆性 | 线性规划表示为 基矩阵 基向量 非基矩阵 非基向量 形式 ) 中 , 将线性规划的等式表示为以下形式 :
写成上述形式之后 , 就可以表示出上述等式的解 , 如果上述等式解满足线性规划约束变量的要求 , 即所有的变量都大于等于 0 , 那么该解就是线性规划的解 ;
上述式子中 ,
非基变量 , 是可以随意取值的变量 ;
只要非基变量
取定一组解 , 基变量
就可以被唯一确定 ;
就是 方程组完整的解 ;
二、根据非基变量的解得到基变量解
如何根据非基变量
的解 , 确定基变量
的解 ?
基矩阵
是可逆的 , 那么
的逆矩阵
是存在的 , 上述方程
左右两端 , 都乘以
, 如下计算 :
其中
是单位阵 , 单位阵乘以矩阵
其结果还是
;
关于单位阵 , 参考 单位矩阵 - 百度百科
上述式子最终得到
, 此时 如果非基变量的值
已经解出来 , 那么 基变量
可以通过上述表达式表示出来 ;
三、基解
给定一个基矩阵
, 约束方程可以转化成
形式 , 只要给定一组
的解 , 就可以 得到一组
的解 ;
非基变量
解 : 找到
的一组最简单的解 , 这里随意找一组
的解都可以 , 最简单的一组解就是
的所有值都是
, 即让所有的非基变量等于
, 此时
为零矩阵 , 使用
表示 ;
对应基变量的解 : 将所有的非基变量等于
, 即
的条件代入
中 , 有 :
此时线性规划的解为 :
, 其中
是零矩阵 ; 该解就是线性规划的基解 ;
基矩阵
-> 非基变量解
-> 基变量解
: 基解最根本是先确定基矩阵
, 确定 基矩阵
之后 , 就可以将变量分为基变量 和 非基变量 , 此时将非基变量取值为零矩阵
, 得到基变量的解
;
基解
是由基矩阵
唯一确定的 ; 只要给定基矩阵 , 就可以唯一确定基解 ;
基解个数 : 一个线性规划中的基解个数 , 就是基矩阵可数 , 就是可逆矩阵个数 ;
通常情况下的基解个数 : 系数矩阵
, 是
维的矩阵 ,
行等式 ,
个变量 , 其任意
列向量 , 组成的
阶方阵 , 都是可逆矩阵 , 其有
个基矩阵 , 也有
组基解 ;
基解定义 : 确定一个
阶系数矩阵的基矩阵
, 令非基变量
等于
, 有约束条件
可以解出其基变量
, 这组
解 , 称为基解 ; 基解中的变量取非
值的个数 , 不超过等式个数
, 基解总数不超过
;
四、基可行解
完整的线性规划标准形式如下 :
上述的基解 , 只是根据
约束条件等式解出的 ;
还需要满足
条件 ;
基可行解定义 : 满足线性规划中的
约束条件的 基解 , 称为 基可行解 ;
给定线性规划系数矩阵
阶 :
- 其可行解个数是无限的 , 因为其非基变量
可以有无限种取值 , 对应的基变量
也有无限种取值 ;
- 其基解个数是有限的 , 因为非基变量只能取
零矩阵 , 对应的基变量也是有限的 , 不超过
个 ;
可行解有无穷多个 , 基解是有限个 , 如果一个解既是基解 , 又是可行解 , 那么称该解是基可行解 ;
基解个数是有限的 , 基可行解 是 基解 与 可行解 的交集 , 基可行解的个数必然也是有限的 ;
迭代思想 : 在解里面找到一个解 , 看该解是否是最优的 , 如果不是 , 就迭代到下一个解 , 继续重复查看该解是否是最优 ; 如果迭代的集合是有限的 , 其肯定要比无限的集合简单很多 ;
因此线性规划中 , 在有限个基可行解中 , 迭代查找最优解 , 将搜索范围从无限个可行解 , 变成了有限个基可行解 ;
五、可行基
可行基 : 基可行解 对应的 基矩阵
, 就是 可行基 ;
使用
, 代入
, 解出其基变量
, 这组
基解 ,
中的非基变量解肯定是大于等于
的 , 如果
中有负分量 , 那么该解不是基可行解 , 对应的基矩阵
不是可行基 ;
相关文章
- Python 根据AIC准则定义向前逐步回归进行变量筛选(二)
- 静态变量的使用
- Python基础教程之变量
- 【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 )
- 【Groovy】Groovy 方法调用 ( 字符串切割 | 使用 Java 语法切割字符串 | 使用 Groovy 语法切割字符串直接为变量赋值 | 数组赋值给变量 变量个数小于等于数组长度 )
- 带你搞懂 pgsql 变量赋值方法及注意事项
- PHP变量详解
- MySQL Variables open_files_limit 数据库 参数变量解释及正确配置使用
- MYSQL 使用:掌握用户变量的技巧(mysql用户变量)
- MySQL:配置变量指南(mysql配置变量)
- 解析Oracle中变量设置的步骤(oracle变量设置)
- Oracle数据库中变量输出的技巧(oracle中变量的输出)
- js类中的公有变量和私有变量
- php中根据变量的类型选择echo或dump
- C++用指针变量作为函数的参数接受数组的值的问题详细总结
- C#不同类型的成员变量(字段)的默认值介绍