【MATLAB】线性规划与非线性规划器求解
在MATLAB中,自带线性规划、整数规划和非线性规划求解器,在使用这些求解器前需要先得到参数输入,如系数矩阵A, Aeq,b,beq等。
这里就有个前提,如何获取这些系数矩阵呢?难道要自己手打系数矩阵吗?
这种办法在变量少时可以使用,但变量多时则很难实现。
以下介绍一个可行的方法,就是通过符号变量构造系数矩阵。
这个模型实际上有x1...x6,y1...y6,z1...z6一共18个变量,手打系数矩阵则要数清楚哪个地方是0哪个地方不是0,用接下来符号变量定义:
首先定义参数:
X=sym('x',[1,6]);
Y=sym('y',[1,6]);
Z=sym('z',[1,6]);
var=[X,Y,Z];%定义变量的顺序依次为X,Y,Z,在线性规划函数中,y(1)相当于在x(7)的位置,x(18)则为z(6)
定义等式约束组:
AeqM=sym('aeq',[9,1]); %在一个大的符号向量中存放等式约束,等式约束个数为9个
AeqM(1)=X(1)+Y(3)-3;
AeqM(2)=X(2)+X(6)-Z(2)+8-3;
AeqM(3)=X(6)+Y(6)+Z(3)-10;
j=4;
for i=1:6
AeqM(j)=X(i)-Y(i)-2 ;
j=j+1 ;
end
得到等式组
根据等式和参数提取Aeq和beq
[Aeq,beq] = equationsToMatrix(AeqM, var);%提取Aeq,beq
便可得到求解器需要的等式系数矩阵的符号向量
Aeq =
Aeq =
[1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0]
[1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0]
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0]
beq =
3
-5
10
2
2
2
2
2
2
但是由于其类型不是double,还不能输入求解器,需要进行转换
Aeq=double(Aeq);% 等式约束的变量系数矩阵
beq =double(beq);%等式约束的资源数
如此便可输入到求解器中求解了。
对于目标函数和不等式约束也是由同样的方法得到系数矩阵或向量。
但目前该方法仅限于线性约束提取系数矩阵,不能对非线性约束提取系数矩阵
非线性约束求解器fmincon的输入参数为
若目标函数是可变的,每次都需要输入参数改变函数中的risk值,
则先把目标函数的输入形式以字符串形式拼接起来obj=['fun1(x,',num2str(risk),')'];
[x,y]=fmincon(obj,x0,A,b,Aeq,beq,lb,ub,'fun2',options);
其中'fun1'为目标函数文件名称,'fun2'为非线性约束的函数文件名称。
在fun2中,可以用符号类似常量定义公式,但只能以x作为参数,若有非线性约束
根据上面参数的顺序,代码应该写成
A=[
x(2)*x(10)-x(15)^2)-8
]
fmincon不支持非线性整数规划,但可在非线性函数中加上等式约束实现整数规划,如
ceqM(i)=mod(x(i),1);%意思是约束x对1取余=0
求解器设置options = optimoptions('fmincon','Display','none');
可以不显示求解信息(如未达到最优解)
MTALAB自带的ga求解器可以求解非线性整数规划,但是整数参数约束和等式约束不能同时出现,即x(2)不能既是整数,也在非线性等式约束中出现!
【MATLAB】线性规划与非线性规划器求解相关推荐
- 线性规划与非线性规划的求解
一.单纯法求解线性规划的原理 一般线性规划问题中当线性方程组的变量数大于方程个数,这时会有不定数量的解,而单纯形法是求解线性规划问题的通用方法. 具体步骤是,从线性方程组找出一个个的单纯形,每一个单纯 ...
- Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划
Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划 目录 PrA之nLP非线性规划算法 操作图文教程 PrA之nLP非线性规划算法 (1).编写M ...
- matlab 线性规划求最大值,MATLAB求解线性规划(含整数规划和01规划)问题.pdf
MATLAB求解线性规划(含整数规划和01规划)问题 MATLAB 求解线性规划(含整数规划和0-1 规划)问题 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约 束的,变量范围为有 ...
- 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】
⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab增强型黑猩猩优化器算法求解单目标优化问题[含Matlab源码 2013期] 点击上面蓝色字体,直接付费下 ...
- 1、Matlab线性规划(线性约束下极值求解)
1.Matlab线性规划(线性约束下极值求解) 参考MATLAB数学建模经典案例实战(余胜威2015)
- 算法1—线性规划和非线性规划
线性规划 1.标准线性规划 Matlab 中规定线性规划的标准形式为 其中 c .x.b.beq.lb.ub都为列向量, A . Aeq 为矩阵. Matlab中求解线性规划的命令为: [x,fval ...
- matlab试用SUMT外点法求解,数学建模集训知识大纲
数学建模集训知识大纲 文章目录 数学建模集训知识大纲 评价算法 简单加权法 逼近于理想解的排序法(TOPSIS算法) 层次分析法 主成分分析法 模糊综合评价法 聚类分析法 秩和比法 人工神经网络 熵权 ...
- 【数学建模】算法模型(一)|线性规划 整数规划 非线性规划 层次分析模型 灰色关联分析
文章目录 1.线性规划 Linear Programming (LP) 1.1线性规划的matlab标准形式及软件求解 1.2 投资的收益和风险 2. 整数规划 2.1 整数规划和线性规划的关系 2. ...
- Python数据分析入门--线性规划和非线性规划学习笔记
文章目录 一.线性规划简介 二.线性规划常用求解方法 三.线性规划实现流程 1. 明确问题和变量 2. 建立数学模型 四. Python实现线性规划 五. 非线性规划简介 六. 非线性规划常用求解方法 ...
最新文章
- CentOS 7.8升级gcc-8.2
- 联想 k2450 温度、耗电试验
- SCSM 2012Orchestrator 2012 虚拟机自动交付测试
- 另一种ABAP解析XML file的方式
- 一些用过的优秀软件摘录
- sublime text3安装js提示的插件
- CoreJava 笔记总结-第六章 接口、lambda表达式与内部类
- freecodecamp_freeCodeCamp的服务器到底发生了什么?
- CentOS7 安装 scala 2.11.1
- 大数据(二)Elasticsearch 分布式搜索引擎(存索引、索引搜索)
- 从技术和历史的视角,理解Too many technical terms in FE BE
- Three.js - 加载 .OBJ 格式模型(十六)
- java 找不到符号变量_java 编程中出现的 找不到符号 的问题
- Linux 别名设置,可一键登入服务器- alias
- Ubuntu 2004 鼠标可以移动但是点击无响应 排查流程
- 安东尼:为来欧洲踢球做出了牺牲,穿上曼联球衣让我很满足
- java fxml教程_openjfx(javaFX)完整学习指南(教程)
- 2022开年第一个爆款凭什么是山东蓝翔?如何实现破圈传播?
- node文件下载的方式
- sqlserver读取数据库表结构