在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】线性规划与非线性规划器求解相关推荐

  1. 线性规划与非线性规划的求解

    一.单纯法求解线性规划的原理 一般线性规划问题中当线性方程组的变量数大于方程个数,这时会有不定数量的解,而单纯形法是求解线性规划问题的通用方法. 具体步骤是,从线性方程组找出一个个的单纯形,每一个单纯 ...

  2. Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划

    Algorithm之PrA:PrA之nLP非线性规划算法+Matlab 优化工具箱的GUI求解非线性规划 目录 PrA之nLP非线性规划算法 操作图文教程 PrA之nLP非线性规划算法 (1).编写M ...

  3. matlab 线性规划求最大值,MATLAB求解线性规划(含整数规划和01规划)问题.pdf

    MATLAB求解线性规划(含整数规划和01规划)问题 MATLAB 求解线性规划(含整数规划和0-1 规划)问题 线性规划是数学规划中的一类最简单规划问题,常见的线性规划是一个有约 束的,变量范围为有 ...

  4. 【单目标优化求解】基于matlab增强型黑猩猩优化器算法求解单目标优化问题【含Matlab源码 2013期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[单目标优化求解]基于matlab增强型黑猩猩优化器算法求解单目标优化问题[含Matlab源码 2013期] 点击上面蓝色字体,直接付费下 ...

  5. 1、Matlab线性规划(线性约束下极值求解)

    1.Matlab线性规划(线性约束下极值求解) 参考MATLAB数学建模经典案例实战(余胜威2015)

  6. 算法1—线性规划和非线性规划

    线性规划 1.标准线性规划 Matlab 中规定线性规划的标准形式为 其中 c .x.b.beq.lb.ub都为列向量, A . Aeq 为矩阵. Matlab中求解线性规划的命令为: [x,fval ...

  7. matlab试用SUMT外点法求解,数学建模集训知识大纲

    数学建模集训知识大纲 文章目录 数学建模集训知识大纲 评价算法 简单加权法 逼近于理想解的排序法(TOPSIS算法) 层次分析法 主成分分析法 模糊综合评价法 聚类分析法 秩和比法 人工神经网络 熵权 ...

  8. 【数学建模】算法模型(一)|线性规划 整数规划 非线性规划 层次分析模型 灰色关联分析

    文章目录 1.线性规划 Linear Programming (LP) 1.1线性规划的matlab标准形式及软件求解 1.2 投资的收益和风险 2. 整数规划 2.1 整数规划和线性规划的关系 2. ...

  9. Python数据分析入门--线性规划和非线性规划学习笔记

    文章目录 一.线性规划简介 二.线性规划常用求解方法 三.线性规划实现流程 1. 明确问题和变量 2. 建立数学模型 四. Python实现线性规划 五. 非线性规划简介 六. 非线性规划常用求解方法 ...

最新文章

  1. CentOS 7.8升级gcc-8.2
  2. 联想 k2450 温度、耗电试验
  3. SCSM 2012Orchestrator 2012 虚拟机自动交付测试
  4. 另一种ABAP解析XML file的方式
  5. 一些用过的优秀软件摘录
  6. sublime text3安装js提示的插件
  7. CoreJava 笔记总结-第六章 接口、lambda表达式与内部类
  8. freecodecamp_freeCodeCamp的服务器到底发生了什么?
  9. CentOS7 安装 scala 2.11.1
  10. 大数据(二)Elasticsearch 分布式搜索引擎(存索引、索引搜索)
  11. 从技术和历史的视角,理解Too many technical terms in FE BE
  12. Three.js - 加载 .OBJ 格式模型(十六)
  13. java 找不到符号变量_java 编程中出现的 找不到符号 的问题
  14. Linux 别名设置,可一键登入服务器- alias
  15. Ubuntu 2004 鼠标可以移动但是点击无响应 排查流程
  16. 安东尼:为来欧洲踢球做出了牺牲,穿上曼联球衣让我很满足
  17. java fxml教程_openjfx(javaFX)完整学习指南(教程)
  18. 2022开年第一个爆款凭什么是山东蓝翔?如何实现破圈传播?
  19. node文件下载的方式
  20. sqlserver读取数据库表结构

热门文章

  1. 云计算助力中国产业数字化升级
  2. Android开发案例Onclick点击事件switch调用分类04
  3. DesktopLayer.exe专杀
  4. Python爬虫之Scrapy框架系列(16)——深入剖析request和response类
  5. AD测量线长及其快捷键
  6. 计算机内存智能清理系统好些,电脑内存怎么清理?
  7. python 汉字和字节序列转换,汉字编解码
  8. 2016国赛A题——系泊系统问题粒子群算法求解
  9. C语言和设计模式大全(附代码示例)
  10. 啊哈c语言 潦草的初步笔记(1)