约束最优化——线性规划(LP)问题

1 线性规划

1.1 图解法(计算机不适用,便于理解)

1.2 单纯形法

1.3 计算几何的方法(待更新)

1 线性规划

约束优化问题:给定约束条件和目标函数,计算约束条件下目标函数的最大(最小)值。

目标函数和约束条件都是线性函数的情况,称为线性优化问题(LP问题)。此外,还有非线性优化问题。

线性规划问题有4个可能的情况:
1.唯一解:目标函数对应的直线与可行解空间相交于一点;
2.有无穷多个最小值解:目标函数所对应的直线与某个约束线精确垂直(图15-2(a)所示);
3.没有可行解:构建的线性规划问题的可行解域为空集,没有可行解(图15-2(b)所示);
4.无边界问题:可行解域是无界的(图15-2(c )所示)。

本文主要讨论有界线性规划问题求解(就是第1和第2种情况),对于无界线性规划问题,会在本文1.2.3 无界线性规划问题中简单提到。

1.1 图解法(计算机不适用,便于理解)

以下面的例子来讲。
约束条件如下:

目标函数为:

解:画图如下,图中对每个约束进行了编号,以便在以下的图解方法中识别它们。

让Z值不停地增大,直到再次增大Z值,使目标超出了可行区域为止。图15-1(b)显示了该变化过程,得到Z的最大值为1400。

优缺点:计算机不适用,且只能处理二维三维问题。但是便于理解,解释概念。

启示:由上述过程可以看到,最优解通常在两个约束线交汇的一个角点出现。这个点称为极点。
因此,对于有界规划问题,最优解可以使用穷举法来比较每个可行极点的目标函数值来得到。

1.2 单纯形法

由图解法得到的启示,有界线性规划的极点都是出现在两个约束线交汇的角点。由此我们可以想办法计算每个可行的极点,然后取这些极点中最大的目标函数值,就得到线性规划问题的最优解。

为了更容易理解单纯形法,下面我结合一个例子,来讲解单纯形法的思路和实现过程。

对于有界线性规划问题,我们可以想办法计算每个约束线交汇的交点,然后取这些交点中最大的目标函数值,就得到线性规划问题的最优解。

首先我们引入松弛变量。引入松弛变量使所有约束方程从不等式变成等式。
举例来说,对于约束

可以定义一个松弛变量S1,将其加到约束条件的左边,得到如下关系:

分析一下松弛变量:

如果它是正数,表示我们在这个约束条件下还有些放松的余地,还有一些资源没有完全使用。

如果它是负数,表示我们己经超过了这个约束条件。如果它是零,表示我们刚好达到这个约束条件。

以这样一组不等式为例来说明:

目标函数为:


其可行解域如下图所示:

两个约束线的交点,称为极点。有些极点在可行解域外(如F),予以忽略;

有些在可行解域边界上,这样的就是可行极点(如ABDCE)。

只要我们计算出所有可行极点处的目标函数值,取其中最大的,就能得到线性规划问题的最优解。

如何得到各个极点的坐标?

对每个约束方程引入一个不同的松弛变量,最终约束优化问题变为下面的形式:

在上述方程组中,加上松弛变量,共有6个变量,但是只有4个方程。该方程组是欠定的。

未知数个数和方程个数之差(本例中为2)直接关系到如何识别可行极点。

由于本例中未知数个数和方程个数之差为2,因此必须固定其中2个变量,令其为0,然后通过解方程组计算其余变量的值。这样就能得到其中一个极点。
例如,上述方程组中,我们令x1和s4为0,于是得到方程组:

可以解出:得到x2=6,S1=11,S2=32和S3=9。对应了极点E点。
同样,令x1和x2为0,对应A点;x1和S2为0,对应B点;

S1和S2为0,对应C点;S1和S4为0,对应D点。
6个参数,两两参数为0,组合起来共有15种情况,对应15个点。

但其中只有ABCDE的5个点是可行极点,其余的都是无效的极点。
如果计算所有的极点,必然导致效率较低。那么,能否只计算那些可行的极点?
答案是,当然可以。

如何计算那些可行的极点?
总结一下上面的过程,先设置n-m个变量为0,然后求解剩下的m个变量m个等式的方程组。

这里,我们将取零值的变量一般称为非基本变量,其他m个变量称为基本变量。

如果所有的基本变量是非负的,那么这个结果称为基本可行解。最优解就是这些基本可行解中的一个。

单纯形法 就是,先找到求出一个基本可行解然后逐渐增加目标函数值求出其他基本可行解最终达到最优解同时算法终止

第一步,先找到一个基本可行解,令x1=x2=0,得到方程组:

用高斯-约当法解方程组,得到解为:S1​=77,S2​=80,S3​=9和S4​=6。
目标函数可以表示为:

目标函数值为:Z = 0。

第二步,移动到一个能使目标函数值增大的新可行解。很明显,增加当前非基本变量〔在这里是x1和x2)的值,Z值就会增大。

这里定义:把一个非基本变量变成基本(非零)变量,这个变量称为“进基变量〔entering rrariable)”。在处理过程中,如果一个基本变量变成非基本(零值)变量,该变量则称为“退基变poleaxing variable) "。

一般把最大负数值系数的变量选择为进基变量,因为这常常能使Z值的增加量最大。在本例中,由于x1的系数-175比x2的系数-150更小,所以x2成为进基变量。

这里,选择x2成为进基变量。选择哪个为退基变量呢?
我们需要计算上一步中,等号右边的值与x2的系数的比值,其实就是当前方程组在x2轴上的截距:

上述方程组的截距分别为:77/11=7;80/8=10;9/0=∞;6/1=6;
其中,最小截距为S4为基本变量的这个方程,因此将S4作为退基变量。其实就是相当于在可行解域图中找到了x 2 x_2x2​轴上的截距最小的那个点,就是E点。

第三步,x2成为进基变量,S4作为退基变量后,用S4的方程作为主元行,消去方程组其他方程中的x2​的系数,得到新的方程组:

同时也消去目标函数中的x 2 x_2x2​的系数,得到目标函数为:

目标函数值为:Z = 1050。

第四步,重复上面第二步和第三步的方法,直到目标函数行不存在为负数的系数,结束。此时就是最优解。
目标函数方程

中,系数为负值的只有x1了,因此选取x1作为进基变量。
计算截距,77/11=7,32/10=3.2,9/1=0,6/0=∞ \infty∞;因此选第二个方程,S4已经是退基后的变量了,因此选S2作为退基变量。(此时,对应于可行解域图中D点。)
于是,用第二个方程作为主元行,消去x 1 x_1x1​的系数,得到新的方程组,以及新的目标函数。

然后,再重复一次进基和退基之后,就能找到可行解域图中C点。然后消去得到新的方程组,以及新的目标函数后,目标函数中所有的系数都没有负数了,结束。此时,就得到最优解,就是在C点的位置。

参考文献:线性规划(LP)问题求解——单纯形法_lp松弛-CSDN博客

单纯形法:适用于约束条件和变量数目都很多的情况;对于变量数量较少的情况,以下介绍的计算几何的方法效率会更高。

1.3 计算几何的方法(待更新)

对于两个变量的线性规划问题,下面介绍的方法会更适用。不过这里面的会用到一些计算几何方面的知识。

1.3.1 分治式算法

对于线性规划问题,我们可以直接计算所有约束的可行解域(feasible region)。然后根据可行解域的边界交点,计算得到线性规划问题的最优解。

计算可行解域的最直接的方法,就是分治式算法,可计算任意 n 个约束的公共交集。算法伪代码如下:
INTERSECTHALFPLANES(H)
1.如果约束集H中约束的个数为1,返回;否则将约束集H分成两个子集H1和H2 ,大小分别为n/2;
2.如果子集H1中约束的个数大于1,调用INTERSECTHALFPLANES(H),继续将子集一分为二;
3.如果子集H1中约束的个数大于1,调用INTERSECTHALFPLANES(H),继续将子集一分为二;
4.否则,调用IntersectConvexRegions(H1 , H2)。

其中的子函数IntersectConvexRegions(H1 , H2)为计算两个凸多边形交集的算法。方法思路如下:

结论:函数IntersectConvexRegions(H1 , H2),可以 O(n)时间内计算出任意两个凸多边形的交集。

结论:给定平面上的一组共 n 个约束,可以使用线性的空间,在 O(nlogn)时间内计算出其公共的交集。

1.3.1 递增式算法

1.3.2 随机递增式算法

改进的平面扫描算法: 随机平面扫描算法。

1.3.3 无界线性规划问题*

无界线性规划问题。

参考文献:

最优化方法笔记3:约束最优化——线性规划(LP)问题_线性优化约束问题例题-CSDN博客

线性规划(LP)问题求解——单纯形法_lp松弛-CSDN博客

线性规划(LP)问题的更多相关文章

  1. 【Python代码】混合整数规划MIP/线性规划LP+python(ortool库)实现

    目录 相关知识点 LP线性规划问题 MIP混合整数规划 MIP的Python实现(Ortool库) assert MIP的Python实现(docplex库) 相关知识点 LP线性规划问题 Linea ...

  2. 机器学习-线性规划(LP)

    线性规划问题 首先引入如下的问题: 假设食物的各种营养成分.价格如下表: Food Energy(能量) Protein(蛋白质) Calcium(钙) Price Oatmeal(燕麦) 110 4 ...

  3. yalmip + lpsolve + matlab 求解混合整数线性规划问题(MIP/MILP)

    最近建立了一个网络流模型,是一个混合整数线性规划问题(模型中既有连续变量,又有整型变量).当要求解此模型的时候,发现matlab优化工具箱竟没有自带的可以求解这类问题的算法(只有bintprog求解器 ...

  4. matlab 求解线性规划问题

    线性规划 LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为: minf(x):待最小化的目标函数(如果问题本 ...

  5. Matlab随笔之线性规划

    原文:Matlab随笔之线性规划   LP(Linear programming,线性规划)是一种优化方法,在优化问题中目标函数和约束函数均为向量变量的线性函数,LP问题可描述为:min xs.t. ...

  6. Computer Science Theory for the Information Age-4: 一些机器学习算法的简介

    一些机器学习算法的简介 本节开始,介绍<Computer Science Theory for the Information Age>一书中第六章(这里先暂时跳过第三章),主要涉及学习以 ...

  7. 凸优化(Convex Optimization)浅析

    本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~ 在机器学习中, 很多情况下我们都需要求得一个 问题的全局最优值(global optimum) ...

  8. 多目标跟踪笔记三:Global Data Association for Multi-Object Tracking Using Network Flows

    Abstract 针对用于多目标跟踪的数据关联(data association),本文提出了一种基于网络流(network flow)的优化方法.将最大后验概率(maximum-a-posterio ...

  9. 04-拉格朗日对偶问题和KKT条件

    04-拉格朗日对偶问题和KKT条件 目录 一.拉格朗日对偶函数 二.拉格朗日对偶问题 三.强弱对偶的几何解释 四.鞍点解释 4.1 鞍点的基础定义 4.2 极大极小不等式和鞍点性质 五.最优性条件与 ...

  10. 对偶理论、拉格朗日对偶问题、LP线性规划对偶性质

    Lagrange 对偶问题 定义其的对偶问题: Lagrange函数 考虑线性规划问题 若取集合约束D={x|x≥0},则该线性规划问题的Lagrange函数为 线性规划的对偶问题为: 对偶定理原问题 ...

随机推荐

  1. 中美在AI领域差距12个月

    看到一个新闻: <马斯克再谈AI:中美差距12个月> 其实想想这个评价也还中肯,尽管这些年国内AI大有弯道超车之势,但是不可否认的是由于欧美的历史领先优势和强大的科研及商业上的独立创新能力 ...

  2. vue项目之登录功能

    1.背景 在上一节的学习中我们基本上完成了登录的表单输入框界面如下: 代码: <!-- 输入框--> <el-form label-width="0px" cla ...

  3. 生态兼容性进一步提升!白鲸开源 WhaleStudio 与火山引擎ByteHouse完成产品互认

    数据作为新型生产要素,已快速融入生产.分配.流通.消费和社会服务管理等各环节,深刻改变着生产方式.生活方式和治理方式.越来越多企业也在尝试充分利用数据要素,开辟全新发展路径,进一步实现业务价值提升. ...

  4. docker部署宝塔面板

    环境准备: 系统 rocky:9.2 部署流程: 1.安装docker dnf -y install yum-utils yum-config-manager --add-repo http://mi ...

  5. C# 菜单项添加复选标记

    在网上查找都是说直接用菜单项的Checked属性, toolMenuItem.Checked=!toolMenuItem.Checked; 但是我用了也切换不过来. 有点晕菜了,我用的是vs2017. ...

  6. freertos学习(九)软件定时器

    软件定时器 软件定时器是freeRTOS通过一个硬件定时器,实现的定时器.可以实现不同时长的多个定时任务 不从中断上下文中执行定时器回调函数(不消耗任何处理时间) 实现流程 设置软件定时器,推入定时器 ...

  7. Windows 将透明的图片旋转,裁剪

    使用 Microsoft Office Picture Manager 本来是想找个Java代码,跑一下 忽然在 Windows 图片打开方式中有一个  Microsoft Office Pictur ...

  8. 使用 nuxi preview 命令预览 Nuxt 应用

    title: 使用 nuxi preview 命令预览 Nuxt 应用 date: 2024/9/8 updated: 2024/9/8 author: cmdragon excerpt: 摘要:本文 ...

  9. Unity中利用遗传算法训练MLP

    Unity中利用遗传算法训练MLP 梯度下降法训练神经网络通常需要我们给定训练的输入-输出数据,而用遗传算法会便捷很多,它不需要我们给定好数据,只需要随机化多个权重进行N次"繁衍进化&quo ...

  10. 待补 重要思考:求给无向图定向使得其变为DAG的方案数

    今天比赛考到了,不会,丢了 100 分. rk2,380 -> rk15,280 别问为什么 T4 没过,因为不会 T2. 方法一 \(O(3^n)\) 令 \(f_S\) 为子集 \(S\) ...