大规模线性规划问题的求解极具挑战性,在效率、存储和数值稳定性等方面对算法都有很高的要求。但是这类问题常常非常稀疏且有特殊结构,能够分解为若干个较小规模问题求解。

  线性规划问题的目标函数和非负约束都可分离变量,即分成相互独立的若干组。如果等式约束也可分离变量,则大规模问题就可分解为较小问题求解。

单纯形法

  注意:线性规划问题如果有最优解,必有一个顶点最优解。于是在可行域的顶点中寻找最优解就很自然了。可行域一般有无限多个点,但却只有有限多个顶点(从n个不同元素中取出m个元素的组合数(用符号 C(n,m) 表示))。在顶点中寻找最优解就把寻找的范围从可行域缩小到一个有限子集。

  单纯形法的基本思想:从一个顶点沿一条边转移到一个相邻顶点,如此重复,直到抵达最优顶点。

单纯形表

表1-表2

  其中不仅提供约束系统一般解的显式表示及相应的基本解,还给出了目标函数的一个简化形式。具体地说,其右端列给出基本解:

x1=7/11,x2=14/11,x3=9/11,x4=x5=0

  由于它满足非负性条件,故为基本可行解,表格右下角数值的相反数35/11为其对应目标值。

表3

显然,单纯形表完全由基确定。

  如果目标函数在该解处达到可行域上的最小值,则称之为基本最优解,相应的表为最优(单纯形)表。基本可行解和基本最优解分别为可行域的顶点和最优顶点。假若目标值在可行域上无下界,则称线性规划问题无(下)界;此时也无最优解。

表格单纯形法

高斯-若尔当消去法

  该方法每步由两个部分构成:在系数矩阵部分确定非0主元和对整个曾广矩阵进行相应的消去运算。主元所在的列和行分别称为主元列主元行,其余的为非主元列非主元行(不包含右端列)。每步确定主元后用初等变换将主元列化为主元位置为1的单位向量。

  由全主元高斯-若尔当消去法得到的最终表称为典式。显然约束系统总存在典式。

定理:

  系统有解的充分必要条件是r=m或r<m而右端列的非主元行分量全为0。若有解,则有无穷多解。→当r<m而右端列的非主元元素全为0时,可以踢除非主元行所代表的恒等式。在约束系统无解的情形,显然原线性规划问题也无可行解,自然也无最优解。

系统等价

  一个系统的解的全体称为它的解集。如果几个系统有相同的解集,则视其等价

命题

  • 用任一非0常数乘以任一方程所得到的系统与原系统等价
  • 用任一常数乘以任一方程加到另一方程上去所得到的系统与原系统等价

  上面的运算称为系统的初等(行)变换,是系统最基本的等价变换。高斯-若尔当消去法通过一系列初等变换消去系统的某些项,将其化为易于求解的形式。

Dantzig-Wolfe分解算法

  D-W分解法把约束条件分为两个部分,将可行域表示定理用于其中一部分所对应问题的可行域,分别构造主问题子问题。各次迭代的子问题仅目标函数不同,依其求解的结果判定已达成最优或者生成一个进基列,进而完成主问题的一次单纯形迭代。原问题于是化成两个较小问题的求解。如果原问题部分约束具可分离结构,相应的子问题还可进一步分解为更小的问题。

参考文献:

潘平奇. 线性规划计算[M]. 科学出版社, 2012.

大规模问题的分解法-D-W分解法的更多相关文章

  1. 计蒜客 39280.Travel-二分+最短路dijkstra-二分过程中保存结果,因为二分完最后的不一定是结果 (The 2019 ACM-ICPC China Shannxi Provincial Programming Contest M.) 2019ICPC西安邀请赛现场赛重现赛

    Travel There are nn planets in the MOT galaxy, and each planet has a unique number from 1 \sim n1∼n. ...

  2. 【转】mysql分库分表,数据库分库分表思路

    原文:https://www.cnblogs.com/butterfly100/p/9034281.html 同类参考:[转]数据库的分库分表基本思想 数据库分库分表思路   一. 数据切分 关系型数 ...

  3. [心得] SQL Server Partition(表分區) 資料分佈探討

    最近在群裡有個朋友問了個問題是這樣的 用户表有一千多万行,主键是用户ID,我做了分区.但经常查询时,其它的表根据用户ID来关联,这样跨区查询,reads非常高.有什么好的处理办法?不分区的话,索引维护 ...

  4. 获取数值型数组中大于60的元素个数,给数值型数组中不足60分的加20分。(数组,for循环,if条件判断语句)

    package com.Summer_0420.cn; /** * @author Summer * 获取数值型数组中大于60的元素个数 * 给数值型数组中不足60分的加20分 */ public c ...

  5. 9.9递归和动态规划(八)——给定数量不限的硬币,币值为25分,10分,5分,1分,计算n分有几种表示法

    /**  * 功能:给定数量不限的硬币.币值为25分,10分.5分.1分,计算n分有几种表示法. */ public static int makeChange(int n){ return make ...

  6. thinkphp5ajax分頁&&搜索後分頁

    //控制器層 //分頁 public function list_january_table(){ //設置當前頁 $page = input("post.page") ? inp ...

  7. 大数据学习----day27----hive02------1. 分桶表以及分桶抽样查询 2. 导出数据 3.Hive数据类型 4 逐行运算查询基本语法(group by用法,原理补充) 5.case when(练习题,多表关联)6 排序

    1. 分桶表以及分桶抽样查询 1.1 分桶表 对Hive(Inceptor)表分桶可以将表中记录按分桶键(某个字段对应的的值)的哈希值分散进多个文件中,这些小文件称为桶. 如要按照name属性分为3个 ...

  8. 分酒问题(DFS解法)

    题目大概是这样: 已知有三个容量分别为3千克.5千克和8千克的并且是没有刻度的酒瓶,3千克和5千克的瓶子均装满了酒,而8千克的瓶子为空.现要求仅用这三个酒瓶将这些酒均分为两个4千克并分别装入5千克和8 ...

  9. 数据分箱:等频分箱,等距分箱,卡方分箱,计算WOE、IV

    转载:https://zhuanlan.zhihu.com/p/38440477 转载:https://blog.csdn.net/starzhou/article/details/78930490 ...

  10. 程序设计入门——C语言 第7周编程练习 2 鞍点(5分)(5分)

    2 鞍点(5分) 题目内容: 给定一个n*n矩阵A.矩阵A的鞍点是一个位置(i,j),在该位置上的元素是第i行上的最大数,第j列上的最小数.一个矩阵A也可能没有鞍点. 你的任务是找出A的鞍点. 输入格 ...

随机推荐

  1. builtroot 添加git 下载方式

    1.buildroot/Config.in 配置default git server eg:config xxxx_GIT_SITE string "git site" defau ...

  2. lftp的安装

    lftp的安装 安装依赖的包 yum -y install make  readline-devel  gnutls* 解压上传的包 tar -jxf lftp-4.0.1.tar.bz2 cd到解压 ...

  3. 【PPT】 Least squares temporal difference learning

    最小二次方时序差分学习 原文地址: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd= ...

  4. (转载)Peter Norvig:十年学会编程

    作者 Peter Norvig 是计算机科学家,Google 的研究总监.在本文中,Peter Norvig会告诉你:为什么急功近利地学习软件开发技术是没效果滴? ================华丽 ...

  5. 【linux基础】CMake如何生成动态链接库文件

    CMakeLists.txt SET(LIBRARY_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/lib) ADD_LIBRARY(filename SHARED ${CURREN ...

  6. JAVA基础部分复习(三、泛型)

    JAVA泛型的基本使用: /** * JAVA泛型的使用 * 定义:泛型的本质是参数化类型,就是说所操作的数据类型被指定为一个参数. * * 定义泛型方法的规则 * 1.所有泛型方法声明都有一个类型参 ...

  7. Android Studio安卓导出aar包与Unity 3D交互

    Unity与安卓aar 包交互 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...

  8. Redis实战之Redis命令

    阅读目录 1. 字符串命令 2. 列表命令 3. 集合命令 4. 散列命令 5. 有序集合命令 6. 发布与订阅命令 7. 小试牛刀 Redis可以存储键与5种不同数据结构类型之间的映射,这5种数据结 ...

  9. MyBatis #{} 取值注意事项

    正确写法#{key} 错误写法#{key } #{}中不能加空格,不然会报错

  10. LeetCode – Group Shifted Strings

    Given a string, we can "shift" each of its letter to its successive letter, for example: & ...