MATLAB规划问题——线性规划和非线性规划
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规划问题——线性规划和非线性规划相关推荐
- matlab错误ceq未赋值,MATLAB规划问题——线性规划和非线性规划(from CSDN echo_hello)...
1.线性规划 求线性规划问题的最优解有两种方法,一种方法是使用linprog命令,另一种是使用optimtool工具箱,下面分别介绍这两种方法. ①linprog命令 一般情况下,Linprog命令的 ...
- 【数学建模】算法模型(一)|线性规划 整数规划 非线性规划 层次分析模型 灰色关联分析
文章目录 1.线性规划 Linear Programming (LP) 1.1线性规划的matlab标准形式及软件求解 1.2 投资的收益和风险 2. 整数规划 2.1 整数规划和线性规划的关系 2. ...
- Matlab规划问题——蒙特卡洛法
Matlab规划问题--蒙特卡洛法 一.蒙特卡洛法简介 蒙特卡洛法是基于大量事件的统计结果来实现一些确定性问题的计算.而在规划问题中,蒙特卡洛法可以通俗理解为枚举法,通过产生很多随机数,对每一个随 ...
- 运筹学matlab实验报告,运筹学上机实验报告 利用Matlab求解整数线性规划
四川师范大学数学与软件科学学院运筹学上机实验报告. 学期:__2011_至__2012__ 第___一__ 学期 2011年11月9日 课程名称:__ 运 筹 学 ________ 专业:_信息与计算 ...
- Python数据分析入门--线性规划和非线性规划学习笔记
文章目录 一.线性规划简介 二.线性规划常用求解方法 三.线性规划实现流程 1. 明确问题和变量 2. 建立数学模型 四. Python实现线性规划 五. 非线性规划简介 六. 非线性规划常用求解方法 ...
- Python之建模规划篇--线性规划
Python之建模规划篇--线性规划 基本介绍 线性规划的实例与定义 线性规划问题的解的概念 求解线性规划的Matlab 解法 Python解法 Python Scipy库实现 Python plup ...
- 算法1—线性规划和非线性规划
线性规划 1.标准线性规划 Matlab 中规定线性规划的标准形式为 其中 c .x.b.beq.lb.ub都为列向量, A . Aeq 为矩阵. Matlab中求解线性规划的命令为: [x,fval ...
- matlab01规划程序实例,matlab规划求解实例(matlab01规划标准模式)
matlab规划求解实例 示 例求解以下0-1整数线性规划目标函数maxf=-3x12x2-5x3约束条件x12x2-x3≤2,x14x2x3≤4,x1x2≤3.4 x3≤6,x1,x2,x3为0或1 ...
- matlab求解参数线性规划问题,实验三十用MATLAB求解线性规划问题
<实验三十用MATLAB求解线性规划问题>由会员分享,可在线阅读,更多相关<实验三十用MATLAB求解线性规划问题(27页珍藏版)>请在人人文库网上搜索. 1.实验三十 用MA ...
最新文章
- python类库丰富吗_Rich库:丰富你的Python程序终端输出
- 又一篇论文让我开始怀疑起了人生...
- 如何在mac上安装python3_在Mac上安装Python 3.3
- crowd counting_[crowd_counting]-MANet_arxiv1901
- 老赖整治升级,不还钱直接扣微信钱包!
- maya python api,如何使用Maya Python API查找所有上游DG节点?
- 如何在一行 rm -rf 的基础上释放 Mac 上的内存空间?
- [Tip]ActiveScaffold本地化
- 【图像分类】2021-Twins NeurIPS
- C语言如何实现寻找峰值函数,findpeaks 寻找峰值函数
- 对某在线教育平台用户使用RFM模型按价值分类
- 关于风险回归的Cox 模型构建,森林图(1)
- Leetcode 1905. Count Sub Islands
- RTP通话:视频流(H.264)的传输
- 红米5plus刷android one,安卓刷机必备!TWRP恢复工具添加支持红米5/雷蛇手机
- VideoCapX Video Crack,保存和访问这些视频和图像的需求
- java字节码文件学习
- 2019年美赛C题画图,python函数库basemap下载
- 内网port映射具体解释(花生壳)
- IT英文原版书籍专业词汇积累
热门文章
- python 微积分计算
- 【听】语言本能,语言进化本质探索
- 国科大学习资料--图像处理(彭思龙、杨戈)--学长笔记整理
- GAMES101笔记(九)
- ubuntu下svn多仓库关于dav_svn.conf文件和authz文件的修改
- 这比刷剧还爽 阿里大佬倾力打造Java1658页面试八股文,竟被开源
- 透过个人ios经验,说下自己的一个实习项目
- Yarn调度器和调度算法(From 尚硅谷)
- MySQL常用排序规则utf8mb4_general_ci、utf8mb4_unicode_ci、utf8mb4_bin
- 帮我写一个在广州自驾游去汕头和潮汕两个地方共两天的攻略