精华内容
下载资源
问答
  • 针对目标函数含有参数的参数线性规划问题(简称PCP),通过分块矩阵运算和理论推导,研究了目标函数随参数的变化规律,采用变步长的搜索技术,建立了求解参数临界值以及确定特征区间的搜索算法。数值实例表明,本...
  • 实现运筹学中线性规划算法的Java程序,包含LP类和Main类,Main类支持控制台实时输入线性规划问题参数,LP类实现线性规划问题中的标准化,添加人工变量,两阶段法等步骤
  • 首先将L∞参数辨识问题转化成增加约束条件的线性规划问题最优解的求解问题;然后为了删除辨识中的冗余数据并用于在线辨识,给出了基于线性规划问题递推算法的L∞参数辨识算法。最后给出了仿真,结果验证了算法的有效性...
  • rt参数线性规划问题一直不会解决,求个大神指教,要能在电脑上运行成功的程序,小弟在此跪谢了。。。。。。。。。。。。。
  • 线性规划对偶问题

    千次阅读 多人点赞 2021-04-28 23:49:31
    利用Matlab解决线性规划问题八. 参考SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 线性规划及单纯形法...

    线性规划及单纯形法

    线性规划是最优化问题的一种特殊情形,实质是从多个变量中选取一组合适的变量作为解,使得这组变量满足一组确定的线性式(约束条件),而且使一个线性函数(目标函数)达到最优

    〇. 前言

    不少人对线性规划问题还只有初高中“图解法”的印象。能使用图像直观明了地解题自然是一种好方法,相信很多人都认为一种好方法够解决需要解决的问题不就足矣了吗。其实我也不例外。这也是我开始接触时的疑惑。但学了一阵子后,我思索了,确实,相比较几何和组合推理,代数学确实在非数学专业的学生看来不够讨喜,尽管代数学相当强大、相当普适……单纯形法就是代数的一个小小缩影,它似乎表面上让线性规划问题变得比“图解法”要复杂得多,但是其超强的普适性着实迷人,我们用计算机来解决线性规划问题可能只要一句编程,但其背后的数学原理却如此丰富。我们光线性规划问题就学了9周(还没上完),可见它背后的数学文化还是相当值得深挖研讨的……<其实为了应试【捂嘴】>
    因为单纯形法经过本人预习复习后已经有些开窍了,并成功用大M法解决了我的大作业,所以在此不过多赘述,有兴趣可以去了解【我更倾向于你没兴趣,看完你就知道了】不过鉴于这周要测验,而对偶问题还是迷迷糊糊的我决定开始摸鱼做笔记<说白了就是应试>,希望敲完这篇,我可以把线性规划的对偶理论啃下来吧……<说白了还是为了应试>

    果然,第一次还是给了数学……哎嘿~~

    一. 对偶问题的提出

    无论从理论或是实践角度,对偶理论是线性规划中的一个最重要和有趣的概念。支持对偶理论的基本思想是,每一个线性规划问题都存在一个与其对偶的问题,在求出一个问题解的时候,也同时给出了另一问题的解。下面通过实际例子看待对偶问题的经济意义。
    <书本上的例子实在是过于晦涩难懂,于是在网上摘了一点好理解的“栗子”……>

    【例一】
    某工厂用甲乙两种资源生产A、B、C、D四种产品,现有资源数、单位产品所需资源数以及单位产品可获得利润如下表所示。问如何组织生产能够使得利润最大?
    在这里插入图片描述
    根据题意列出的线性规划不等式是这样的(大家不用去推出这个公式,目的在于和下文的对偶问题公式形成对比):
    在这里插入图片描述
    但是现在如果从另一个角度考虑问题。假设该厂不生产A、B、C、D四种产品,而是将甲、乙两种资源出租给其他单位,其原则是:识别的单位愿意租,又使本单位获利不低于原利润。问如何给甲、乙两种资源定价最合理?

    根据题意列出的线性规划不等式是这样的:
    在这里插入图片描述
    可以发现,两个问题下的线性规划公式很相似(具体的如何转换会在下文予以说明)。那么两个问题具有什么样的实际意义呢?可以考虑该厂的目的现在是想要出租资源但是要保证价格不低于资源变成产品所带来的收益。也就是说第二个问题所求出来的最小(优)值应该是第一个问题求出的最大(优)值,换句话说我们可以通过原问题的对偶问题的最优值来获得原问题的最优值,但为什么要这样做呢?直接用原问题来求得最优值不可以吗?这就是我们第二个问题所涉及的了。

    【例二】
    ① :仔细对比上图两种式子可以发现,图一中的变量较多而且约束条件较少,相信大家都做过线性规划的问题,不难发现变量越少,约束条件越多对于我们的求解就越有利。这里也是这个道理,通过将原问题转换成为其对偶问题,可以使得更加有利于我们求解线性规划问题,并且从问题一的解答中我们了解到两种问题“本是同根生”,所以对偶问题其实是有利于我们计算复杂线性规划问题的一种"辅助"方式。但是,对偶问题一定比原问题变量要少吗?并不是这样的,但是我们可以非常容易的判断出该问题的对偶问题会不会更简单,这个方法涉及到对偶问题的转换,我们在第三个问题中进行解答。
    ② :其实有时不仅仅是为了减少变量的个数,有的问题甚至必须要通过转换称为对偶问题才能够解决(博主目前的水平下,非数学专业),比如为了将原式化成标准式时会出现(不)等式右端出现负数的情况,这时如果仅用单纯形法是不能够解决的,因此从这个角度来看,为应对考试对偶问题是必须要学习的。

    【例三】
    接下来我们将进入实战,直接用实例来讲解原问题的对偶问题是如何化成的。首先我们以下面这个线性规划问题为例:
    在这里插入图片描述

    1. 对偶问题的目标函数和原问题是相反的,原问题是min则对偶问题为max。并且变量的个数也会发生改变,系数是原问题不等式右端的b值(仅仅是化为对偶问题是不需要将原问题化作标准式的)。根据以上得出目标函数:
      在这里插入图片描述
    2. 接下来是写约束条件,约束条件的书写是最容易出错的地方。我们先写等式的左端,对偶问题等式的左端是根据原问题等式左端竖着来写的;等式的右端就是直接用原问题目标函数中的系数(先不考虑符号),也就是看如下画红框的部分:
      在这里插入图片描述
    3. 根据原问题竖着的系数来作为对偶问题每个等式中变量的系数;原问题目标函数的系数,可以得出如下(先仔细看下红框里的数据是如何得到的):
      在这里插入图片描述
    4. 接着是最为重点的约束条件中的符号和变量的范围符号,这两点是根据如下来进行变换:
      在这里插入图片描述
      解释: 根据max类型写min类型的变量符号时,要根据max的约束条件符号,并且与之相反;写min的约束条件符号时,要根据max类型的变量符号,并且与之相同。反之亦然。另外无约束对应的是‘ = ’。最终得到:
      在这里插入图片描述
      至此,我们已经讲完了对偶问题的转换方法,下面再举一个max类型转换成min类型的例子,大家可以对照练习加深印象。
      在这里插入图片描述
      <因为壳子比较菜又比较摸鱼还不会举“栗子”,所以第一部分的“栗子”都是从优秀博主家摘的……后面有走心原创哦~~>

    二. 对称形式下对偶问题的一般形式

    <你们最爱的 纯数学理论来辣~~~>
    定义:满足下列条件的线性规划问题称为具有对称形式:其变量均具有非负约束,其约束条件当目标函数求极大时均取“≤”号,当目标函数求极小时均取“≥”号。
    对称形式下线性规划原问题的一般形式为:

    在这里插入图片描述
    用yi(i=1,…,m)代替第i种资源的估价,则其对偶问题的一般形式为:
    在这里插入图片描述
    用矩阵形式表示,对称问题的线性规划问题的原问题为:
    在这里插入图片描述
    其对偶问题为:

    在这里插入图片描述
    上述对偶问题中令w’=-w,可改写为:
    在这里插入图片描述
    将上述对称形式下线性规划的原问题与对偶问题进行比较,可以列出如下表的对应关系:

    在这里插入图片描述
    如将其作为原问题,并按上表所列对应关系写出它的对偶问题则有:
    在这里插入图片描述
    再令z=-z’,则上式可改写为:
    在这里插入图片描述
    可见对偶问题的对偶即原问题。因此将表中右端的线性规划问题作为原问题,写出其左端形式的对偶问题。

    三. 非对称形式的原-对偶问题关系

    因为并非所有线性规划问题具有对称形式,故下面讨论一般情况下线性规划问题如何写出其对偶问题。考虑下面例子:
    <随便举个栗子啊>
    【例四】 写出下述线性规划问题的对偶问题:
    在这里插入图片描述

    解:

    为了写出对偶问题,思路是先将其转化成对称形式,再按上表的对应关系来写。因例中目标函数为max,故约束条件应变换为“≤”号,所有的变量均应为≥0.为此:
    <emmm…好像忘了给方程标号了…随手就标,养成好习惯>
    在这里插入图片描述
    <好了,go on…>

    (1)约束条件b两端乘上“-1”;
    (2)将约束条件c先等价转换为x1+x2+x3≤4和x1+x2+x3≥4,再变换为x1+x2+x3≤4和-x1-x2-x3≤-4;
    (3)令x2’=-x2,所以x2’≥0;
    (4)令x3=x3’-x3’’,其中x3’≥0,x3’'≥0。

    由此【例四】可变换成具有如下对称形式的线性规划问题:
    在这里插入图片描述
    令对应上述4个约束条件的对偶变量分别为y_1,y_2’,y_3’,y_3^’’,按表的对应关系写出其对偶问题为:
    在这里插入图片描述
    再令y2=y2’,y3=y3’-y3’’,将第三四个约束条件改为一个等式-5y1-6y2’+y3=3,于是有:
    在这里插入图片描述
    将上述对偶问题同【一】的原问题对比发现,无论对称或非对称的线性规划问题在写出其对偶向题时,表中前4行的对应关系都适用,区别的只是约束条件的形式与其对应变量的取值。根据本例中约束和变量的对应关系,下面将对称或不对称线性规划原问题同对偶问题的对应关系,统一归纳为下表所示形式:

    在这里插入图片描述
    <看到这里是不是感jio要吐了……而这才只到如何写线性规划的对偶问题,你还没解呢……急啥,快到性质了……>

    四. 对偶问题的基本性质

    <这里才是你真正应该感jio到要吐的地方…>
    <还是决定手写,这里敲公式多半会哭死……>

    1. 弱对偶性
    在这里插入图片描述

    ·弱对偶性的推论:
    (1) 原问题任一可行解的目标函数值时其对偶问题目标函数值的下界;反之对偶问题任一可行解的目标函数值是其原问题目标函数值的上界。<有点儿绕,但不是不好理解>
    (2) 如原问题有可行解且目标函数值无界(具有无界解),则其对偶问题无可行解;反之对偶问题有可行解且目标函数值无界,则原问题无可行解(注意:本点性质的逆不成立,当对偶问题无可行解时,其原问题或具有无界解或无可行解,反之亦然)。
    (3) 若原问题有可行解而其对偶问题无可行解,则原问题目标函数值无界;反之对偶问题有可行解而其原问题无可行解时,其对偶问题的目标函数值无界。

    2. 最优性
    在这里插入图片描述

    在这里插入图片描述
    3. 强对偶性(或称对偶原理)

    若原问题及其对偶问题均具有可行解,则两者均具有最优解,且它们最优解的目标函数值相等。

    由于两者均有可行解,根据弱对偶性的推论(1),对原问题的目标函数值具有上界,对偶问题的目标函数值具有下界,因此两者均具有最优解。当原问题为最优解时,其对偶问题的解为可行解,且有z=w,由最优性知,这时两者的解均为最优解。

    4. 互补松弛性
    在这里插入图片描述
    5.基解互补性
    原问题及其对偶问题之间存在一对互补的基解,其中原问题的松弛变量对应对偶问题的变量对偶问题的剩余变量对应原问题的变量.这些互相对应的变量如果在一个问题的解中是基变量则在另一个问题的解中是非基变量;将这对互补的集解分别带入原问题和对偶问题的目标函数中有 z = w

    五. 对偶问题的单纯形法描述

    <听嗦考试必考……但其实我并不熟悉,慌~~>
    既然是只菜狗,那就参考一下大佬的吧:

    参考链接:
    对偶问题的单纯形法

    六. 影子价格

    首先,我们先要认识到互补松弛性的作用:
    ① 简化求对偶问题最优解过程 : 已知一个线性规划问题的最优解 , 可以 简化求另外一个问题最优解的过程 , 避免使用两次单纯形法求解 ;
    ② 影子价格问题 : 使用互补松弛定理可以进行一些 经济解释 , 如影子价格问题 ;
    影子价格 是 对偶问题的 经济解释 ;
    在这里插入图片描述
    影子价格是对偶问题的变量值
    <懒了,不想举“栗子”了,有关边际价格的“栗子”还挺多的,有兴趣可以在*“参考”*里摘摘>

    七. 利用Matlab解决线性规划问题

    因为毕竟是计算机系的在读小学生,那就提一嘴实战应用咯。因为linprog这个函数比较常用,也是建模赛事中最最最基础的数学模型了,所以对于大家也不陌生。不过你想要用好它可不止单纯会敲一个linprog那么easy,至少你要知道线性规划的标准型,这样才能套对参数,合理求解线性规划问题。
    所以简单截个图:<就是懒?不(shi)是(de)>
    在这里插入图片描述

    八. 参考

    链接[1]: https://blog.csdn.net/qq_43539633/article/details/109150749
    链接[2]: https://blog.csdn.net/PursueLuo/article/details/112251520
    链接[3]: https://blog.csdn.net/weixin_43848054/article/details/105748797
    链接[4]: https://blog.csdn.net/shulianghan/article/details/112096559
    《运筹学教程》 胡运权 郭耀煌

    展开全文
  • MATLAB求解线性规划问题

    万次阅读 多人点赞 2019-05-23 18:35:59
    无论我们做什么事,都希望用最小的代价换取最大的利益,而线性规划就是解决这类问题的一个重要方法,下面我们通过几个具体的示例来介绍一下如何使用线性规划 示例一:利润最大化问题 某工厂生产三种产品,下面的表是...

    线性规划

    无论我们做什么事,都希望用最小的代价换取最大的利益,而线性规划就是解决这类问题的一个重要方法,下面我们通过几个具体的示例来介绍一下如何使用线性规划

    示例一:利润最大化问题

    某工厂生产三种产品,下面的表是这三种产品的利润和原料消耗,据此制定一个总利润最大的生产计划
    在这里插入图片描述
    我们假设这三种产品的产量分别为x1,x2,x3,则其总利润的表达式为:
    在这里插入图片描述
    产品的产量不能小于0,而且产量还受限于原料,于是就有了以下约束条件:
    在这里插入图片描述
    我们的目标就是在满足这些约束条件的情况下使z最大。

    示例二:运输问题

    有两个仓库A1,A2,四个零售店B1,B2,B3,B4。现在要把仓库中的货物运送到各个零售店去,已知从Ai到Bj运价为Cij,i=1,2;j=1,2,3,4,且货物的总量和零售店的需求量相同,问如何组织运输才能使总运输费最少。
    我们假设Xij为Ai到Bj运输的货物量,那么总运费就可以表示为:
    在这里插入图片描述
    由于存在供需平衡,所以就有了以下约束条件:
    在这里插入图片描述
    我们的目标就是在满足这些约束条件的情况下使z最小。
    从示例中我们可以的到线性规划的一般形式,如下:
    在这里插入图片描述

    MATLAB求解

    MATLAB中有一个专门求解线性规划问题的函数:linprog(),其使用方法如下:
    [x,fval]=linprog(c,A,b,Aeq,beq,lb,ub,x0,options)
    用于求解以下模型
    在这里插入图片描述
    其中fval表示最优解处的目标函数值,lb和ub分别表示决策变量的下界和上界,若不存在可以用空矩阵代替,x0表示迭代初始点,options是控制参数,用于指定模型求解算法、计算精度和最大迭代次数等
    例子1:
    在这里插入图片描述
    求解:
    在这里插入图片描述

    展开全文
  • 线性规划(二): Matlab 求解约束极值问题

    万次阅读 多人点赞 2019-04-24 11:10:34
    线性规划(一):定义与数值优化...非线性规划(二): Matlab 求解约束极值问题 目录 约束极值问题 1 二次规划 2 罚函数法 3 Matlab 求约束极值问题 3.1 fminbnd 函数 3.2 fseminf 函数 3.3 fminimax 函数...


    非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法)

    非线性规划(二): Matlab 求解约束极值问题


    目录

    约束极值问题 

    1  二次规划         2  罚函数法 

    3  Matlab 求约束极值问题 

    3.1  fminbnd 函数           3.2  fseminf 函数                 3.3  fminimax 函数 

    4 Matlab 优化工具箱的用户图形界面解法 

    4  非线性规划的应用:飞行管理问题

    4.1  模型一            4.2  模型二                习 题 


    约束极值问题 

    有约束条件的极值问题称为约束极值问题,也叫规划问题。 求解约束极值问题要比求解无约束极值问题困难得多。为了简化其优化工作,可采用以下方法:将约束问题化为无约束问题将非线性规划问题化为线性规划问题,以及 能将复杂问题变换为较简单问题的其它方法。 库恩—塔克条件是非线性规划领域中重要的理论成果之一,是确定某点为优点 的必要条件,但一般说它并不是充分条件(对于凸规划,它既是优点存在的必要条件, 同时也是充分条件)。 

    无约束问题的求解请参考这里:非线性规划(一):定义与数值优化方法

    1  二次规划 

    若某非线性规划的目标函数为自变量 x的二次函数约束条件又全是线性的,就称 这种规划为二次规划。

    Matlab 中求解二次规划的命令是 

    [X,FVAL]= QUADPROG(H,f,A,b,Aeq,beq,LB,UB,X0,OPTIONS) 

    返回值 X 是决策向量 x的值,返回值 FVAL 是目标函数在 x处的值。(具体细节可以参 看在 Matlab 指令中运行 help quadprog 后的帮助)。 

    h=[4,-4;-4,8]; 
    f=[-6;-3]; 
    a=[1,1;4,1]; 
    b=[3;9]; 
    [x,value]=quadprog(h,f,a,b,[],[],zeros(2,1)) 

    2  罚函数法 

    利用罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题, 因而也称这种方法为序列无约束小化技术,简记为 SUMT (Sequential Unconstrained Minization Technique)。 罚函数法求解非线性规划问题的思想是,利用问题中的约束函数作出适当的罚函 数,由此构造出带参数的增广目标函数,把问题转化为无约束非线性规划问题。主要有 两种形式,一种叫外罚函数法,另一种叫内罚函数法,下面介绍外罚函数法

    解  (i)编写 M 文件 test.m  

    function g=test(x); 
    M=50000; 
    f=x(1)^2+x(2)^2+8; 
    g=f-M*min(x(1),0)-M*min(x(2),0)-M*min(x(1)^2-x(2),0)+... 
      M*abs(-x(1)-x(2)^2+2); 

    或者是利用Matlab的求矩阵的极小值和极大值函数编写test.m如下: 

    function g=test(x); 
    M=50000; 
    f=x(1)^2+x(2)^2+8; 
    g=f-M*sum(min([x';zeros(1,2)]))-M*min(x(1)^2-x(2),0)+...   
      M*abs(-x(1)-x(2)^2+2); 

    我们也可以修改罚函数的定义,编写test.m如下: 

    function g=test(x); 
    M=50000; 
    f=x(1)^2+x(2)^2+8; 
    g=f-M*min(min(x),0)-M*min(x(1)^2-x(2),0)+M*(-x(1)-x(2)^2+2)^2; 

     (ii)在 Matlab 命令窗口输入 

    [x,y]=fminunc('test',rand(2,1)) 

    即可求得问题的解。 

    3  Matlab 求约束极值问题 

    在 Matlab 优化工具箱中,用于求解约束优化问题的函数有:fminbnd、fmincon、 quadprog、fseminf、fminimax,上面我们已经介绍了函数 fmincon 和 quadprog。 

    3.1  fminbnd 函数 

    求单变量非线性函数在区间上的极小值            

    Matlab 的命令为

    [X,FVAL] = FMINBND(FUN,x1,x2,OPTIONS)

    它的返回值是极小点x 和函数的极小值。这里 fun 是用 M 文件定义的函数或 Matlab 中 的单变量数学函数。 

    3.2  fseminf 函数 

    上述问题的 Matlab 命令格式为

    X=FSEMINF(FUN,X0,NTHETA,SEMINFCON,A,B,Aeq,Beq) 

    解  (1)编写 M 文件 fun6.m 定义目标函数如下: 

    function f=fun6(x,s); 
    f=sum((x-0.5).^2); 

    (2)编写 M 文件 fun7.m 定义约束条件如下: 

    function [c,ceq,k1,k2,s]=fun7(x,s); 
    c=[];ceq=[]; 
    if isnan(s(1,1))     
        s=[0.2,0;0.2 0]; 
    end 
    %取样值 
    w1=1:s(1,1):100; 
    w2=1:s(2,1):100; 
    %半无穷约束 
    k1=sin(w1*x(1)).*cos(w1*x(2))-1/1000*(w1-50).^2-sin(w1*x(3))-x(3)-1; k2=sin(w2*x(2)).*cos(w2*x(1))-1/1000*(w2-50).^2-sin(w2*x(3))-x(3)-1; 
    %画出半无穷约束的图形 
    plot(w1,k1,'-',w2,k2,'+'); 

    (3)调用函数 fseminf 在 Matlab 的命令窗口输入  

    [x,y]=fseminf(@fun6,rand(3,1),2,@fun7) 

    即可求得结果。

    3.3  fminimax 函数 

    上述问题的 Matlab 命令为    

     X=FMINIMAX(FUN,X0,A,B,Aeq,Beq,LB,UB,NONLCON) 

    解  (1)编写 M 文件 fun8.m 定义向量函数如下: 

    function f=fun8(x); 
    f=[2*x(1)^2+x(2)^2-48*x(1)-40*x(2)+304     
       -x(1)^2-3*x(2)^2     
        x(1)+3*x(2)-18     
       -x(1)-x(2)     
        x(1)+x(2)-8]; 

    (2)调用函数 fminimax 

    [x,y]=fminimax(@fun8,rand(2,1)) 

    3.3.4  利用梯度求解约束优化问题 

    分析:当使用梯度求解上述问题时,效率更高并且结果更准确。 题目中目标函数的梯度为: 

    解  (1)编写 M 文件 fun9.m 定义目标函数及梯度函数: 

    function [f,df]=fun9(x); 
    f=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); 
    df=[exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+8*x(1)+6*x(2)+1);exp(x(1))*(4*x(2) +4*x(1)+2)]; 

    (2)编写 M 文件 fun10.m 定义约束条件及约束条件的梯度函数: 

    function [c,ceq,dc,dceq]=fun10(x); 
    c=[x(1)*x(2)-x(1)-x(2)+1.5;-x(1)*x(2)-10]; 
    dc=[x(2)-1,-x(2);x(1)-1,-x(1)]; ceq=[];dceq=[]; 

    (3)调用函数 fmincon,编写主函数文件 example13.m 如下: 

    %采用标准算法 
    options=optimset('largescale','off'); 
    %采用梯度 
    options=optimset(options,'GradObj','on','GradConstr','on'); 
    [x,y]=fmincon(@fun9,rand(2,1),[],[],[],[],[],[],@fun10,options) 
     

    4 Matlab 优化工具箱的用户图形界面解法 

    Matlab 优化工具箱中的 optimtool 命令提供了优化问题的用户图形界面解法。 optimtool 可应用到所有优化问题的求解,计算结果可以输出到 Matlab 工作空间中。 
     

    例 14  用 optimtool 重新求解例 2。 

    解  (i)编写 M 文件 fun1.m 定义目标函数 

    function f=fun1(x); 
    f=sum(x.^2)+8; 
    

    (ii)编写M文件fun2.m定义非线性约束条件 

    function [g,h]=fun2(x); 
    g=[-x(1)^2+x(2)-x(3)^2 
        x(1)+x(2)^2+x(3)^3-20];  %非线性不等式约束 
    h=[-x(1)-x(2)^2+2 
       x(2)+2*x(3)^2-3]; %非线性等式约束 

    利用例 2 已经定义好的函数 fun1 和 fun2。在 Matlab 命令窗口运行 optimtool,就打 开图形界面,如图 1 所示,填入有关的参数,未填入的参数取值为空或者为默认值,然 后用鼠标点一下“start”按钮,就得到求解结果,再使用“file”菜单下的“Export to Workspace…”选项,把计算结果输出到 Matlab 工作空间中去。 

     

    4  非线性规划的应用:飞行管理问题

    在约 10,000m 高空的某边长 160km 的正方形区域内,经常有若干架飞机作水平 飞行。区域内每架飞机的位置和速度向量均由计算机记录其数据,以便进行飞行管理。 当一架欲进入该区域的飞机到达区域边缘时,记录其数据后,要立即计算并判断是否会 与区域内的飞机发生碰撞。如果会碰撞,则应计算如何调整各架(包括新进入的)飞机 飞行的方向角,以避免碰撞。现假定条件如下:

    1)不碰撞的标准为任意两架飞机的距离大于 8km;

    2)飞机飞行方向角调整的幅度不应超过 30 度;

    3)所有飞机飞行速度均为每小时 800km;

    4)进入该区域的飞机在到达区域边缘时,与区域内飞机的距离应在 60km 以上;

    5)多需考虑 6 架飞机;

    6)不必考虑飞机离开此区域后的状况。

    请你对这个避免碰撞的飞行管理问题建立数学模型,列出计算步骤,对以下数据进 行计算(方向角误差不超过 0.01 度),要求飞机飞行方向角调整的幅度尽量小。 

    设该区域 4 个顶点的座标为(0,0),(160,0),(160,160),(0,160)。记录数据见表 1。 

    4.1  模型一 

    本问题中的优化目标函数可以有不同的形式:如使所有飞机的大调整量小; 所有飞机的调整量绝对值之和小等。这里以所有飞机的调整量绝对值之和小为目标 函数,可以得到如下的数学规划模型: 

    利用如下的程序: 

    clc,clear 
    x0=[150 85 150 145 130 0]; 
    y0=[140 85 155 50 150 0]; 
    q=[243 236 220.5 159 230 52]; 
    xy0=[x0; y0]; 
    d0=dist(xy0);   %求矩阵各个列向量之间的距离 
    d0(find(d0==0))=inf; 
    a0=asind(8./d0)  %以度为单位的反函数 
    xy1=x0+i*y0 xy2=exp(i*q*pi/180) 
    for m=1:6      
        for n=1:6          
            if n~=m          
                b0(m,n)=angle((xy2(n)-xy2(m))/(xy1(m)-xy1(n)));           
            end 
        end 
    end 
    b0=b0*180/pi; 
    dlmwrite('txt1.txt',a0,'delimiter', '\t','newline','PC'); 
    fid=fopen('txt1.txt','a'); 
    fwrite(fid,'~','char');       %往纯文本文件中写 LINGO 数据的分割符 dlmwrite('txt1.txt',b0,'delimiter', '\t','newline','PC','-append','roffset', 1) 

    上述飞行管理的数学规划模型可如下输入 LINGO 求解: 

     

    model: 
    sets: 
    plane/1..6/:delta; 
    link(plane,plane):alpha,beta; 
    endsets 
    data: 
    alpha=@file('txt1.txt');   !需要在alpha的数据后面加上分隔符"~"; 
    beta=@file('txt1.txt'); 
    enddata 
    min=@sum(plane:@abs(delta)); 
    @for(plane:@bnd(-30,delta,30)); @for(link(i,j)|i#ne#j:@abs(beta(i,j)+0.5*delta(i)+0.5*delta(j))>a 
    lpha(i,j)); 
    end

     

    4.2  模型二

     

     

     计算到这里也没有展开的必要了。由于目标的约束是< 0和 <= 的不等式约束。用罚函数的方式编写和求解,有思路的人请留言到评论区讨论吧


    习 题 

     


    非线性规划(一):定义与数值优化方法(梯度法、牛顿法、拟牛顿法、变尺度法)

    非线性规划(二): Matlab 求解约束极值问题

    展开全文
  • MATLAB规划问题——线性规划和非线性规划

    万次阅读 多人点赞 2017-01-16 10:07:56
    线性规划问题的最优解有两种方法,一种方法是使用linprog命令,另一种是使用optimtool工具箱,下面分别介绍这两种方法. ①linprog命令 一般情况下,Linprog命令的参数形式为[x,fval] = linprog(f,A,b,Aeq,beq,lb,...

    1.线性规划

    求线性规划问题的最优解有两种方法,一种方法是使用linprog命令,另一种是使用optimtool工具箱,下面分别介绍这两种方法.

    ①linprog命令

    一般情况下,Linprog命令的参数形式为[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub,x0),下面分别介绍各参数的含义.

    [x,fval]返回值中x为最优解,fval为最优值.

    f表示目标函数中各个变量前面的系数向量,如果是求最小值问题,那么f就是各个变量的系数,如果是求最大值问题,那么f就是各个变量的系数的相反数.

    A和b    表示不等式约束A*x <=b中的矩阵A和向量b.

    Aeq和beq    表示等式约束Aeq*x =beq中的矩阵Aeq和向量beq.

    lb和ub    分别表示自变量的上下界组成的向量,如果没有上下界,该选项用[]表示,如果只有部分变量有上下界,其余的变量没有,那么可以把没有上下界的变量的上下界设为-inf或者inf使lb或者ub的长度符合要求.

    x0    表示变量的初始值,可以缺省.

    例,求如下的线性规划问题



    由目标函数可知f=[-5;-4;-6];

    由约束条件可知矩阵A = [1 -11;3 2 4;3 2 0];右端向量为b = [20;42;30];

    由自变量都大于零可知lb =[0;0;0];

    所以求该线性规划问题最优解的代码如下

    f = [-5;-4;-6];

    A = [1 -1 1;3 24;3 2 0];

    b = [20;42;30];

    lb = [0;0;0];

    [x,fval] =linprog(f,A,b,[],[],lb)

    其中Aeq和beq都为空,因为没有等式约束条件,只有不等式约束条件.

    ②optimtool工具箱

    在Command窗口输入optimtool,即可弹出optimtool工具箱,如下


    工具箱可以大致分为5个部分.第5部分为说明文档,第4部分为优化选项,第3部分为最优解和最优值的显示区域,第2部分为约束条件输入区,第1部分可以填入目标函数值,初始值等.

    利用工具箱求解①的问题,填入相应的数据,然后点击【start】按钮,得到结果如下


    可以看到,最优解与linprog命令的方式求得的结果是相同的,但最优值不是-78,因为这是迭代的结果,只有在迭代次数区域无穷的时候,才能得到准确值-78.

    再举一例,利用MATLAB求解下面这个线性规划问题



    这是求最大值问题,要先将问题化为求解最小值的问题,再进行求解.

    利用linprog命令求解上述问题的代码如下

    f = [-2;-3;5];

    A = [-2 5 -1];b= [-10];

    Aeq = [1 11];beq = [7];

    lb = [0;0;0];

    [x,feval] = linprog(f,A,b,Aeq,beq,lb)

    利用optimtool工具箱来求解过程如下图


    可以验证,两种求解方法的结果是相同的.最后取最优值为图中显示的最优值的相反数.

    ——————————————————————分割线——————————————————————

    2.非线性规划

    也有两种求解的方法,一种是fmincon命令,另一种是optimtool工具箱.

    ①fmincon命令

    fmincon命令的一般参数形式为fmincon(‘fun’,x0,A,b,Aeq,beq,lb,ub,’nonlinearcondition’),其中各个参数含义如下

    fun    目标函数(以求最小值为目标函数)

    x0     最优解迭代的初始值

    A,b    线性约束不等式A*x<= b

    Aeq,beq    线性约束等式Aeq*x =beq

    lb,ub   自变量的上下界

    nonlinearcondition   非线性约束函数,它有两个返回值,其中一个为非线性不等式约

    束,另一个是非线性等式约束(具体举例说明该项参数的设置)

    在具体编写代码过程中,可以将线性约束也写在非线性约束函数nonlinearcondition中,简化代码.

    例1,求下面这个非线性规划问题的最优值




    首先,编写目标函数的M函数文件,并保存为fun.m代码如下

    function f =fun(x)

    f = x(1)^2 + x(2)^2 + 8;

    end

    其次,编写线性和非线性约束的等式或不等式,编写M函数文件,并保存为nonlinearcondition.m,代码如下

    function [f,ceq] = nonlinearcondition(x)

        f = - x(1)^2 + x(2);

        ceq = - x(1) - x(2)^2 + 2;             %非线性等式约束

    end

    最后,在Command窗口输入如下代码

    [x,fval] =fmincon('fun',[0;0],[],[],[],[],[0;0],[],'nonlinearcondition')

    即可得到最优值和最优解为x = [1;1],fval = 10.

    例2,求下面这个非线性规划问题的最优值


    首先,编写目标函数的M函数文件,由于求得是最大值,所以先化为求最小值问题,再原目标函数前面添加负号即可,M函数文件如下,保存为fun.m.

    function f =fun(x)

    f = -(sqrt(x(1)) + sqrt(x(2)) + sqrt(x(3)) +sqrt(x(4)));

    end

    然后,编写线性和非线性约束不等式已经非线性约束等式的M函数文件,保存为nonlinearcondition.m,代码如下

    function [f,ceq]= nonlinearcondition(x)

    %非线性和线性不等式有4个

    f(1) =x(1) - 400;

    f(2) =1.1*x(1) + x(2) - 440;

    f(3) =1.21*x(1) + 1.1*x(2) + x(3) - 484;

    f(4) =1.331*x(1) + 1.21*x(2) + 1.1*x(3) + x(4) - 532.4;

    ceq = 0;%由于没有非线性约束等式,所以这一项写 0

    end

    最后,在Command窗口输入如下代码

    [x,fval] =fmincon('fun',[0;0;0;0],[],[],[],[],[0;0;0;0],[],'nonlinearcondition')

    即可得到最优解和最优值,最优值分别为

    x =

       86.1883

      104.2879

      126.1883

      152.6879

    fval = -43.0860

             目标函数最优值为z = -fval=43.0860.

    由于线性问题也可以看做是非线性问题的特殊情况,所以可用求解非线性问题的方法求解线性规划问题.

    例3,利用fmincon命令求解1.①中的线性规划问题


    首先,编写目标函数的M函数文件,M函数文件如下,保存为fun.m.

    function f =fun(x)

    f = -5*x(1) - 4*x(2) - 6*x(3);

    end

    然后,编写线性和非线性约束不等式已经非线性约束等式的M函数文件,保存为nonlinearcondition.m,代码如下

    function [f,ceq]= nonlinearcondition(x)

    %由于有3个线性约束,所以f返回一个三维向量

    f(1) =x(1) - x(2) + x(3) - 20;

    f(2) =3*x(1) + 2*x(2) + 4*x(3) - 42;

    f(3) =3*x(1) + 2*x(2) - 30;

    ceq = 0;%没有非线性等式

    end

    最后,在Command窗口输入如下代码

    [x,fval] =fmincon('fun',[0;0;0],[],[],[],[],[0;0;0],[],'nonlinearcondition')

    得到的结果与1.线性规划问题的1.①中所用的线性方法所得结果相同.

    ②optimtool工具箱

    同样,非线性规划也可以利用optimtool工具箱,因为其中有一项是填写非线性约束条件的,如下


    利用工具箱求解在2.①中的一个问题


    首先,编写目标函数的M函数文件,由于求得是最大值,所以先化为求最小值问题,再原目标函数前面添加负号即可,M函数文件如下,保存为fun.m.

    function f =fun(x)

    f = -(sqrt(x(1)) + sqrt(x(2)) + sqrt(x(3)) +sqrt(x(4)));

    end

    然后,编写线性和非线性约束不等式已经非线性约束等式的M函数文件,保存为nonlinearcondition.m,代码如下

    function [f,ceq]= nonlinearcondition(x)

    %非线性和线性不等式有4个

    f(1) =x(1) - 400;

    f(2) =1.1*x(1) + x(2) - 440;

    f(3) =1.21*x(1) + 1.1*x(2) + x(3) - 484;

    f(4) =1.331*x(1) + 1.21*x(2) + 1.1*x(3) + x(4) - 532.4;

    ceq = 0;%由于没有非线性约束等式,所以这一项写 0

    end

    在optimtool工具箱中输入相应参数,如下,即可得到相应结果


    所得结果与利用fmincon命令所得结果相同.


    小结

    规划问题中还有特殊的一些问题,例如特殊的线性规划问题——0-1规划,特殊的非线性规问题——二次规划问题,而线性规划问题又是特殊的非线性规划问题,所以这几种规划问题都可以用【非线性规划问题】求解.


    参考文献

    [1] 卓金武, 魏永生, 秦健, 李必文. MATLAB在数学建模中的应用[M]. 北京: 北京航空航天大学 2011: 18-24 .

    展开全文
  • 线性规划模型详解及实际应用反思

    万次阅读 多人点赞 2018-09-02 18:49:45
    线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最 小的问题。该方法在建立方程时非常简单快速,但不利于人工计算。但随着计算机技术的发展,特别是在计算机能处理成千上万个约束条件和决策...
  • 基于jupyter notebook的Python编程 ...一、线性规划问题求解 1、Excel中大M法与Excel的“规划求解”包对实际问题的求解比较 实际例题: 求解以下约束条件的线性规划的最大值和最优解 使用大M法对...
  • 用C++解线性规划问题

    千次阅读 2019-04-11 23:59:59
    cout 此线性规划的最优解存在!" 最优解为:" ; for (i = 1; i ; i++) temp5[temp3[i]] = kernel[i][0]; for (i = 1; i ; i++) f += t * kernel[0][i] * temp5[i]; for (i = 1; i ; i++) ...
  • [学习笔记]线性规划问题的matlab实现

    千次阅读 2020-05-14 17:54:04
    二、线性规划的一般形式 x:决策变量 f(x):目标函数 Ax <= b:不等式约束 Aeqx = beq:等式约束 在matlab中所有的限制条件都是利用矩阵表示,例如: c = [2;3;-5]; a = [-2,5,-1;1,3,1]; b = [-10;12]; aeq...
  • 最有用的方法: matlab官方文档,搜索linprog函数和intlinprog函数。 ...但写这篇文章的目的并不是为了介绍数学理论,我们这里主要讲解如果利用工具求解这一类线性规划问题。 最著名,同时也是最强
  • 目标函数和约束条件均为线性的最优化问题。约束为线性等式Or不等式 求解方法:单纯形法 分支:整数线性规划Iinteger Linear Programing
  • MATLAB解决线性规划问题需要的掌握的知识(详细)

    千次阅读 多人点赞 2019-11-24 20:52:34
    前言: 相信大家在刚刚接触建模时都会初步了解matlab这...不过今天,我在这里就分享一下关于用matlab解决一般线性规划问题需要掌握的知识吧。 具备知识: 在看这篇文章前,你需要大概了解一些最基本的MATLAB的语法,...
  • MatLab建模学习笔记8——非线性规划问题求解

    万次阅读 多人点赞 2016-08-16 23:04:23
    如果目标函数或者约束函数中包含非线性函数,就称这种规划问题为非线性规划问题。非线性规划是具有非线性约束条件或目标函数的数学规划,是运筹学的一个重要分支。 非线性规划问题的数学模型如下: 其中,f(x)是...
  • 数学建模:matlab解决线性规划问题

    千次阅读 2020-02-08 21:59:50
    此类问题构成了运筹学的一个重要分支一数学规划,而线性规划(Linear Programming, LP)则是数学规划的一个重要分支。自从1947年G. B. Dantzig 提出求解线 性规划的单纯形方法以来,线性规划在理论上趋向成熟,在实用中日...
  • Python关于线性规划问题

    千次阅读 2019-10-24 20:17:40
    相关函数:linprog()函数 函数功能: 用于寻找目标函数的最小值(如果求最大值需做相应变化) 注意事项: 1.目标函数f要写成列矩阵的形式 ... 2.... 3....参数解释: ... 参数1:所求目标函数未知数的系数 ...
  • 数学建模(三):非线性规划问题

    千次阅读 2020-04-22 20:53:54
    1.当一个规划问题的约束条件或者是目标函数中包含至少一个非线性函数,那么这种规划问题就是⎡非线性规划问题⎦。 举个例子说明: 设决策变量xi的意义为对第i个项目投资与否,则xi=1代表对这个项目投资,xi=0代表对...
  • 一类新的参数线性规划最优解研究,熊洪斌,叶祥企,本文在一些常见参数线性规划的基础上研究了一类新的参数线性规划最优解的分布区间及相关定理。
  • 线性规划的灵敏度分析,是指模型参数的变化,对优化结果的影响分析,分定性和定量两种。 定性分析 这里的定性分析,指参数变化,对结果的影响,比如不变,变坏或者变差。 松约束和紧约束 放宽优化模型中的约束...
  • 1 线性规划   在人们的生产实践中,经常会遇到如何利用现有...特别是在计算机能处理成千上万个约束条件和决策变量的线性规划问题之后,线性规划的适用领域更为广泛了,已成为现代管理中经常采用的基本方法之一。 1
  • 如果MATLAB中的非线性规划问题可以写成如下形式: min f(x) Ax<=B A'·x=B' C(x)<=0 C'(x)=0 其中f(x)是标量函数,A,B,A’,B’是相应维数的矩阵和向量,C(x)和C’(x)是非线性向量函数。 x=fmincon(fun,x~...
  • 优化 | 利用SciPy求解非线性规划问题

    千次阅读 2020-01-09 09:00:00
    作者:莫斑炜编者按:本文使用SciPy的optimize模块来求解非线性规划问题,结合实际例子,引入非线性规划问题的求解算法及相应函数的调用。本文提纲一维搜索/单变量优化问题无约束多元优...
  • 线性规划问题与对偶问题

    千次阅读 2019-12-15 21:16:57
    线性规划中,通过对原目标函数引入拉格朗日乘项,转化为求解对应新函数的优化问题
  • R语言:线性规划问题求解

    千次阅读 2019-04-01 21:53:52
    线性规划求解: 这里是用到R语言里的Rglpk包 Rglpk包中主要的函数有:Rglpk_solve_LP((obj, mat, dir, rhs, bounds = NULL, types = NULL, max = FALSE,control = list(), ...)) 其中参数及其作用见下表: obj ...
  • 蒙特卡洛方法解非线性规划问题

    千次阅读 2016-07-23 11:39:50
    蒙特卡洛方法解非线性规划问题 蒙特卡洛算法定义: 当所求解问题是某种随机事件出现的概率,或者是某个随机变量的期望值时,通过某种“实验”的方法,以这种事件出现的频率估计这一随机事件的概率,或者得到这个随机...
  • 线性规划问题是目标函数和约束条件均为线性函数(Liner Function)的问题; MATLAB解决的线性规划问题的标准形式为: 其中 f、x、b、beq、lb、ub 为向量,A、Aeq 为矩阵。 其它形式的线性规划问题都可经过适当变换...
  • 数学建模之线性规划问题(含整数规划和0-1规划)

    万次阅读 多人点赞 2018-09-05 13:19:56
    线性规划问题 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约束的,变量范围为有理数的线性规划。 如: 为了便于表达,将上面的式子写成矩阵形式: 于是约束就表达为了一个不等式。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 401,879
精华内容 160,751
关键字:

参数线性规划问题