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

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

单纯形法

  注意:线性规划问题如果有最优解,必有一个顶点最优解。于是在可行域的顶点中寻找最优解就很自然了。可行域一般有无限多个点,但却只有有限多个顶点(从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. Ubuntu创建新用户并设置权限

    打开终端开启root账户 sudo passwd -u root 设置root密码,输入两次 sudo passwd root 切换root账号 su - 或 su root 退出root账户使用ex ...

  2. day 014 python 内置函数

    1. lamda匿名函数2. sorted()3. filter()4. map()5. 递归函数 一 匿名函数(lambda)   函数名=  lambda 参数: 返回值 简单算法 a+b 常规算 ...

  3. 牛客国庆集训派对Day1-C:Utawarerumono(数学)

    链接:https://www.nowcoder.com/acm/contest/201/C 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 1048576K,其他语言20 ...

  4. FZU软工第三次作业-原型设计

    目录 00.前言: 01.PSP表格: 02.需求分析--NABCD模型 N-- Need 需求 A-- Approach 做法 B-- Bnefit 好处 C-- Competitors 竞争 D- ...

  5. javascript 日常

    $('#code').bind('keypress', function (e) { //绑定回车处理 ) { console.log($("#code")); } }); $.a ...

  6. 如何将备份的oracle数据库还原到指定用户下。

    上一文章 oracle11g数据库--创建表空间,创建用户,用户授权并指定表空间.我们已经建好了指定的新用户pdmis. 接下来我们需要将备份好的数据库,还原至新用户pdmis下. 想要还原,我们需要 ...

  7. 初始While循环和for循环

    While循环 While循环,是一个循环加判断的组合,满足判断条件返回 真(True)开始循环代码块,不满足判断条件返回 假(False)不循环 格式: While 条件: 代码块 注意:在Whil ...

  8. draw graph

    http://www.icl.pku.edu.cn/member/yujs/bsdfiles/html/mpost.htmlUNIX下绘图面面观 http://www.tug.org/metapost ...

  9. 我的TDD实践---CI持续集成

    “我的TDD实践”系列之CI持续集成 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  10. C++问题汇总

    1.C++中类相互调用注意事项 (1)若A类中的方法需要调用B类中的函数,那么A类的源文件(或头文件)中需要包含B类的classs声明头文件.若使用了命名空间,还需要在B类的源文件(或头文件)中使用 ...