MINP(mixed integer nolinear

programming)问题,是运筹学中的难点问题。经常使用的求解方法有分支定界法,割平面法。混合整数的求解问题已经有一些稳定的求解器。好比ipsolve

cplex, Matlab官方提供的GMATLAB使用智能仿生算法求解该类问题也有不错的稳定度。本文介绍OPTI工具包:git

一. 介绍工具OPTI toolbox及其语法

本文介绍 OPTI toolbox 安装方法见:https://github.com/jonathancurrie/OPTI

英文过关的直接按照上面的要求进行安装就能够了。(github若是下载不了,点击这个)

(英文阅读有困难的读:

在上诉网址下载了优化包,以后,须要安装该工具包

安装方法很简单github

下载

点击opti_Install.m 运行该文件

运行后该程序在命令行会询问,所有填y。在这一步停顿一下:

web

到如图的网站中下载 optiMEXFiles_mexw64_x_xx.zip文件

而后继续无脑y算法

程序跳出窗口,选择刚刚下载的文件

就能够自动安装了

程序会自动解压该压缩包,安装

安装完毕)开始使用吧!!!数组

2、一些case讲解

安装完毕后,对于具体的MINP问题,如何使用该工具来求解呢?

例如:

该问题的求解语句为:ide

%优化的目标函数

fun = @(x) 20 + x(1)^2 + x(2)^2 - 10*(cos(2*pi*x(1)) + cos(2*pi*x(2)))

% 设置约束范围

lb = [5*pi;-20*pi];

ub = [20*pi;-4*pi];

%数据类型,因为原问题中x1是实数,x2为整数,所以xtype='IC'

%必要说明下,I表明interger C表明实数 B 表明{0,1)

xtype = 'IC';

%初始的猜值,OPTI的初始猜值能够不在可行域范围,但会有必定的输出infessible (不可行)的风险

%所以尽可能仍是设置初始值在可行域中

x0 = [16;0];

% 选项,设定求解器为nomad求解器

opts = optiset('solver','nomad','display','iter')

%建立一个优化对象

Opt = opti('fun',fun,'bounds',lb,ub,'xtype',xtype,'options',opts)

%具体求解该问题

[x,fval,exitflag,info] = solve(Opt,x0)

上述是标准表达,可是对于通常求解的问题而言,目标函数都很是复杂,表达成

fun = @(x) 20 + x(1)^2 + x(2)^2 - 10*(cos(2pix(1)) + cos(2pix(2)))的格式都是很是困难的,表达成子函数是更加合理的作法,一样的,约束条件为x1,x2的形式的也不是很常见。

见下面的问题:

svg

% 目标函数

fun = @(x) x(1)*x(4)*(x(1) + x(2) + x(3)) + x(3);

% 约束条件 (cl <= nlcon(x) <= cu) 设置在cons子函数中

nlcon = @(x) [ x(1)*x(2)*x(3)*x(4);

x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2 ];

cl = [25;40];

cu = [Inf;40]; %对于约束条件的上界和下界,表达成数组的形式,若是是单方向的小于或者大于则表达成 Inf形式

%变量界限 (lb <= x <= ub)

lb = ones(4,1);

ub = 5*ones(4,1);

% 初始猜值

x0 = [1 5 5 1]';

% 求解设置

opts = optiset('solver','ipopt','display','iter');

%创建对象

Opt = opti('fun',fun,'nl',nlcon,cl,cu,'bounds',lb,ub,'x0',x0,'options',opts)

% 求解

[x,fval,exitflag,info] = solve(Opt)

而将目标函数和约束条件都表述成子函数的形式,代码改成:函数

function main

fun = @obj

%已经将目标函数表达成了子函数的形式

% 约束条件,矩阵形式 (cl <= nlcon(x) <= cu)

nlcon = @cons%约束条件已经表达成了子函数形式

cl = [25;40];

cu = [Inf;40];

%变量的界限 (lb <= x <= ub)

lb = ones(4,1);

ub = 5*ones(4,1);

% 初始的猜值

x0 = [1 5 5 1]';

% 设置求解器选项

opts = optiset('solver','ipopt','display','iter');

% 创建求解对象

Opt = opti('fun',fun,'nl',nlcon,cl,cu,'bounds',lb,ub,'x0',x0,'options',opts)

% 求解

[x,fval,exitflag,info] = solve(Opt)

end

% 目标函数的子函数

function o=obj(x)

o=x(1)*x(4)*(x(1) + x(2) + x(3)) + x(3);

end

%约束条件的子函数

function con=cons(x)

con(1)=x(1)*x(2)*x(3)*x(4);

con(2)=x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;

end

3、MINP(mixed integer nolinear programming)混合整数线性规划问题求解

由上一节的介绍,咱们已经对OPTI toolbox 有了基本的了解。下面对混合整数线性规划MINP问题进行求解。

工具

function main

fun = @obj

%已经将目标函数表达成了子函数的形式

% 约束条件,矩阵形式 (cl <= nlcon(x) <= cu)

nlcon = @cons%约束条件已经表达成了子函数形式

cl = [25;40];

cu = [Inf;40];

%变量的界限 (lb <= x <= ub)

lb = ones(4,1);

ub = 5*ones(4,1);

% 初始的猜值

x0 = [1 5 5 1]';

% 设置求解器选项

%opts = optiset('solver','ipopt','display','iter'); %若是按照这个设定那么输出结果将会错误,由于ipopt不适合求解MINP问题,求解器

%错误,不要设置就好,或者若是对算法有必定了解,选择BONMIN求解。即opts = optiset('solver','BONMIN','display','iter');

opts = optiset('display','iter');

%求解器,若是不肯定选什么就不要设定,不然会出问题,OPTI会自动选择合适的求解器

xtype='ICCC' %设置x1是整数对象,其余为实数对象

% 创建求解对象

Opt = opti('fun',fun,'nl',nlcon,cl,cu,'bounds',lb,ub,'x0',x0,'xtype',xtype,'options',opts)

% 求解

[x,fval,exitflag,info] = solve(Opt)

end

% 目标函数的子函数

function o=obj(x)

o=x(1)*x(4)*(x(1) + x(2) + x(3)) + x(3);

end

%约束条件的子函数

function con=cons(x)

con(1)=x(1)*x(2)*x(3)*x(4);

con(2)=x(1)^2 + x(2)^2 + x(3)^2 + x(4)^2;

end

如图则输出结果为:优化

x =

1.0000

4.7430

3.8211

1.3794

fval =

17.0140

exitflag =

1

info =

Iterations: 0

Nodes: 0

AbsGap: 1.0862e-08

RelGap: 6.3468e-10

Time: 0.0525

Algorithm: 'BONMIN: Branch & Bound using IPOP...'

Status: 'Success'

能够看到OPTI求解MINP问题的是复合的BONMIN算法。事实上,这也是OPTI toolbox自带的为数很少的能够求解MINP问题的求解器了。

以上就是MINP问题用OPTI toolbox求解的案例,实际问题的处理可能包括更多的约束条件和更加复制的目标函数,对上面代码中的约束条件和目标函数子函数进行编辑就可,同时注意对应约束条件的上下界。

笔者用该工具箱处理了复杂的专业问题,稳定性不错,都成功求出了最优解。

matlab中的relop,MINP混合整数非线性规划问题求解(MATLAB OPTI toolbox)相关推荐

  1. MINP混合整数非线性规划问题求解(MATLAB OPTI toolbox)

    MINP(mixed integer nolinear programming)问题,是运筹学中的难点问题.常用的求解方法有分支定界法,割平面法.混合整数的求解问题已经有一些稳定的求解器.比如ipso ...

  2. matlab非线性规划整数,MATLAB的混合整数非线性规划 - 源码下载|Windows编程|其他小程序|源代码 - 源码中国...

    MATLAB的混合整数非线性规划BNB20 bnb20 bnbgui20 16Nov2001 MATLAB的混合整数非线性规划BNB20 bnb20 bnbgui20 16Nov2001\BNB20. ...

  3. matlab 日期排序_在Matlab中对数据进行排序(Sorting Data in Matlab)

    在Matlab中对数据进行排序(Sorting Data in Matlab) 我试图在Matlab中对以下数据进行排序,但没有得到我需要的预期输出. 这是数据: '1B-3A-5A' '1A-3A- ...

  4. 混合整数线性规划问题 Matlab

    问题介绍 一般来说可以使用simplex算法计算正实数范围内的线性规划问题,但是在实际生活中我们常常会遇到带有相关整数要求的线性规划问题,我们称之为整数线性规划问题,而更复杂的情况下,问题中既有实数又 ...

  5. matlab 整数规划工具箱,Matlab中的YALMIP工具箱 混合整数规划

    YALMIP工具箱 混合整数规划 定义变量: sqdvar()实型 intvar()整型 binvar()0-1型 设定目标函数 : f=目标函数 设定限定条件: F=set(限定条件) 多个限定条件 ...

  6. matlab中if语句多个_科学计算 | MATLAB程序设计基础

    点击"蓝字"关注我们 科学计算 | MATLAB程序设计基础 引言 在前面的学习中,我们都是在命令行窗口逐条输入命令,然后由matlab解释执行,这种交互式的命令执行方式,操作简单 ...

  7. matlab中读文件的行数_【Matlab】 读取文件各种方法

    本技术支持指南主要处理:ASCII, binary, and MAT files.要得到MATLAB中可用来读写各种文件格式的完全函数列表,可以键入以下命令: help iofun MATLAB中有两 ...

  8. matlab中怎样求峭度,【转】Matlab常用函数~

    计算样本的百份位数 Matlab的常用内部数学函数 指数函数 exp(x) 以e为底数 对数函数 log(x) 自然对数,即以e为底数的对数 log10(x) 常用对数,即以10为底数的对数 log2 ...

  9. matlab中p是什意思,如下的用matlab进行编程的勒让德函数,求解释,看不懂什么意思。如:p和t分别代表什么?p(1,:)是什么意思...

    答:找本数学物理方法的书,弄好两件事: 1.勒让德函数与缔合勒让德函数,MATLAB的legendre函数是后者. 2.顺便找一下勒让德函数的递推公式. 我刚才粗看了一下,可能P(2,:),t(2,: ...

最新文章

  1. word2vec 中的数学原理详解(二)预备知识
  2. gMIS吉密斯更新:Pivot透视+图示,List+观察模式
  3. 1.6 课程资源-深度学习-Stanford吴恩达教授
  4. 【C++基础 09】避免对象的拷贝
  5. TAFE的完整形式是什么?
  6. HTML代码转换编辑器
  7. Token Based Authentication using ASP.NET Web API 2, Owin, and Identity
  8. 每日一算法 ---- 冒泡排序
  9. Qt线程间信号槽传递自定义数据类型(qRegisterMetaType的使用)
  10. SQL面试题(16 - 25)oracle写的
  11. 2015版的迅捷ppt转换成pdf转换器
  12. 微信小程序模板平台_小程序模板免费使用_小程序界面模板
  13. python实现r树存储地理位置_空间索引R树研究_回顾与展望_张明波
  14. 小白教程系列——XMind8 Pro下载安装
  15. Gradle sync failed: 句柄无效。 的解决方法
  16. scannable dest type struct with >1 columns (3) in result
  17. c语言编译器提示隐式声明,在C中使用“隐式声明功能”警告有什么含义?
  18. 小程序坑录-wx.getLocation接口申请
  19. 华硕冰刃4不显示,拆开检查2个故障,如不仔细分析上电又要烧板
  20. OSDI2020:Delos中的虚拟共识

热门文章

  1. java装饰模式_Java装饰者模式实例详解
  2. php 变量代码,php中的可变变量(代码详解)
  3. 设计灵感|如何让你的海报更具现代感?
  4. C++判断函数执行效率方法封装
  5. centos中 npm install 被kill的解决方案
  6. paging modes-分页模式
  7. C语言线性表之循环单链表
  8. java私有方法单元测试_如何通过java反射的方式对java私有方法进行单元测试
  9. python导入excel模块_python如何导入excel
  10. lombok的相关注解使用