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
.

MATLAB规划问题——线性规划和非线性规划的更多相关文章

  1. Matlab随笔之线性规划

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

  2. matlab中fmincon函数求解非线性规划问题

    Matlab求解非线性规划,fmincon函数的用法总结 1.简介 在matlab中,fmincon函数可以求解带约束的非线性多变量函数(Constrained nonlinear multivari ...

  3. matlab学习——01线性规划

    01线性规划 format compact; % min fx % Ax<=b % Aeq*x=beq % lb<=x<=ub % % max z=2x1+3x2-5x3 % x1+ ...

  4. leetcode-Maximum Subarray

    https://leetcode.com/problems/maximum-subarray/ Find the contiguous subarray within an array (contai ...

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

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

  6. 数模常用算法系列Matlab实现-----线性规划

    线性规划的 Matlab 标准形式 线性规划的目标函数可以是求最大值,也可以是求最小值,约束条件的不等号可以是小于号也可以是大于号.为了避免这种形式多样性带来的不便,Matlab 中规定线性 规划的标 ...

  7. matlab绘图--线性规划图解法示意

    matlab绘图--线性规划图解法示意 图解法 matlab绘图 区域填充 线性规划问题: matlab绘图 L1=[4,0;4,4];  plot(L1(:,1),L1(:,2));hold on  ...

  8. matlab——线性规划

    @ 目录 前言 一.基本概念 二.matlab实现 1.常用函数 2.常见变形 参考书目 前言 线性规划是数学规划中的一个重要分支,常用于解决如何利用现有资源来安排生产,以取得最大经济效益的问题.本文 ...

  9. Python小白的数学建模课-12.非线性规划

    非线性规划是指目标函数或约束条件中包含非线性函数的规划问题,实际就是非线性最优化问题. 从线性规划到非线性规划,不仅是数学方法的差异,更是解决问题的思想方法的转变. 非线性规划问题没有统一的通用方法, ...

随机推荐

  1. [C/C++] static在C和C++中的用法和区别

    转自:http://blog.csdn.NET/skyereeee/article/details/8000512 static的三个作用: (1)局部静态变量 (2)外部静态变量/函数 (3)静态数 ...

  2. [洛谷P2590][ZJOI2008]树的统计

    题目大意:一棵树,支持三个操作, $CHANGE\;u\;t:$ 把结点$u$的权值改为$t$ $QMAX\;u\;v:$ 询问从点$u$到点$v$的路径上的节点的最大权值 $QSUM\;u\;v:$ ...

  3. error C3872: '0x3000': this character is not allowed in an identifier 解决方法

    文章参考地址:http://blog.csdn.net/danxuezx/article/details/5096497 编译时遇到这个错误多半是从网上拷贝一段代码到VS里然后编译时产生的,这是因为拷 ...

  4. POJ3261 Milk Patterns 【后缀数组】

    牛奶模式 时间限制: 5000MS   内存限制: 65536K 提交总数: 16796   接受: 7422 案件时间限制: 2000MS 描述 农夫约翰已经注意到,他的牛奶的质量每天都在变化.经进 ...

  5. 洛谷 P1502 窗口的星星 解题报告

    P1502 窗口的星星 题目背景 小卡买到了一套新房子,他十分的高兴,在房间里转来转去. 题目描述 晚上,小卡从阳台望出去,"哇~~~~好多星星啊",但他还没给其他房间设一个窗户, ...

  6. [bzoj1033] [ZJOI2008]杀蚂蚁 Big MoNI

    这个模拟就不用说了吧...... 注意事项(救命的):1.不能回原位 2.在可以打到target的塔打target的时候,其他打不到的继续打自己的(这是显然的事情只是当时已惘然) 3.如果游戏在某一秒 ...

  7. taotao单点登录的用户Controller、service(注册、登录、验证是否登录方法)

    接口文档: 1.1. 注册接口 1.1.1. 检查数据是否可用 请求方法 GET URL http://sso.taotao.com/user/check/{param}/{type} 参数说明 格式 ...

  8. Codeforces Round #524 (Div. 2) B. Margarite and the best present

    B. Margarite and the best present 题目链接:https://codeforces.com/contest/1080/problem/B 题意: 给出一个数列:an=( ...

  9. 工作总结-js插件

    因最近工作需要,使用了一些js插件,感觉还不错,记录下来以便以后使用. 1.图片轮播插件: 扩展:梦想天空系列:http://www.cnblogs.com/lhb25/archive/2013/01 ...

  10. 【SPOJ-QTREE】树链剖分

    树链剖分学习 https://blog.csdn.net/u013368721/article/details/39734871 https://www.cnblogs.com/George1994/ ...