700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > matlab中的relop MINP混合整数非线性规划问题求解(MATLAB OPTI toolbox)

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

时间:2021-11-03 07:40:35

相关推荐

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

MINP(mixed integer nolinear

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

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

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

本文介绍 OPTI toolbox 安装方法见:/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求解的案例,实际问题的处理可能包括更多的约束条件和更加复制的目标函数,对上面代码中的约束条件和目标函数子函数进行编辑就可,同时注意对应约束条件的上下界。

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。