matlab bnb20,关于bnb20()函数不好使的解决方案

新手发帖... ... :)

最近在准备数学建模,处理非线性的整数规划问题时,用到了bnb20()函数,最开始也遇到了很多问题,总是不好使,最后的解决方案如下:

Matlab环境:MATLAB R2008a

原始问题(来源于薛定宇等《高等应用数学问题的MATLAB求解》p188--例6-26):

>> A = [0 2 1 4 2; 3 4 5 -1 -1]; intlist = ones(5, 1); Aeq = []; Beq = [];

>> B = [54; 62]; xm = [0, 0, 3.32, 0.678, 2.57]‘; xM = 20000*ones(5, 1);

>> ix = (intlist == 1); xm(ix) = ceil(xm(ix)); x0 = xm;

>> [errmsg, f, x] = bnb20('test', x0, intlist, xm, xM, A, B, Aeq, Beq)

输出结果:

*** searched   0 % of three

*** Z    :          Inf

*** t    :          0.0 secs

*** c    :            0 cycles

*** fail :            0 cycles

Optimization terminated: first-order optimality measure less

than options.TolFun and maximum constraint violation is less

than options.TolCon.

Active inequalities (to within options.TolCon = 1e-006):

lower      upper     ineqlin   ineqnonlin

2                     1

3                     2

5

??? Error using ==> lt

Matrix dimensions must agree.

Error in ==> bnb20 at 312

elseif all(abs(round(x(K))-x(K))0

查询bnb20原代码,关键注释代码如下:

>> edit bnb20

settings is a row vector with settings for BNB:

% settings(1) (standard 0) if 1: if the sub-problem does not converge do not branch it and

% raise fail by one. Normally BNB will always branch a nonconvergent sub-problem so it can

% try again to find a solution.

% A sub-problem that is a leaf of the branch-and-bound-tree cannot be branched. If such

% a problem does not converge it will be considered infeasible and fail will be raised by one.

% settings(2) is the handle of main BNB GUI. Leave empty.

% options is an options structure. For details type help optimset.

% options.maxSQPiter is a variable used by fmincon (if modified as described in bnb20.m).

% maxSQPiter cannot be set by optimset because it is not part of the

% standard options

% structure. maxSQPiter is 1000 by default.

这里面有个关键的地方,是option.maxSQPiter,"maxSQPiter cannot be set by optimset because it is not part of the standard options"按照中文解释是在Matlab中的options结构不含maxSQPiter一项(貌似和作者发布这个m文件的时间$Date: 1998/08/24 13:46:15 $)有关),但在命令窗口中输入:

>> ff = optimset; ff.MaxSQPIter

ans =

[]

可知新版的Matlab中的options结构中含有MaxSQLPIter一项,但为空,而在后面bnb20.m文件代码中,有如下if判断:

Line 111:

if nargin>3 && ~isempty(xl)

if isnumeric(xl) && isreal(xl) && all(size(xl)<=size(x0))

xlb(1:size(xl,1))=xl;

else

errmsg='xlb must be a real column vector the same size as x0.';

return;

end

end

可知MaxSQLPIter需要初始化一个正整数值,比如可以给默认值100。由于使用opt这一项参数,因此还需添加如下东西:

1.添加一个m文件,用于得到线性不等式约束(由于在本问题中无非线性约束,因此ceq,c全为空,注意只能以m文件的方式获得)

function [c, ceq] = nolinear(x)

%本文件实现了约束条件不等式的获取

ceq = []; c = [];

2.在命令窗口中添加参数设置

>> ff = optimset; ff.TolFun = 1e-6; ff.TolX = 1e-6; ff.TolCon = 1e-020;ff.MaxSQPIter = 1000;

%之前测试的时候,发现ff.TolFun和ff.Tolx貌似必须要进行设置 :)

>> settings = [0];

%settings的默认设置,具体见前面注释中对settings的解释 :)

>> [errmsg, f, x] = bnb20('test', x0, intlist, xm, xM, A, B, Aeq, Beq, nonlinear, settings, ff)

%'test‘是对目标函数的描述,intlist的设置为什么是[1 1 1 1 1]'在前面的注释中也提到 :)

输出结果:

errmsg =

''

f =

-89

x =

19.0000

0

4.0000

10.0000

5.0000

所输出的结果和书中给出的值一样,即正确。

PS:1.bnb20()函数和众多其它需要设置初始值的函数一样,其最终得出的结果有时候很依赖x0的选择,貌似和“全局最优”和“局部最优”有关,因此

得出结果后,还需尝试其它初始值,进行验证,有时候感觉就像碰运气 :)

2.上述的解决方案基本上可以解决使用bnb20()函数所遇到的所有问题,如果实在还不行,在参考bnb20.m文件的代码及注释吧... ... :)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
《高等应用数学问题的MATLAB求解》一书的配书光盘。供大家参考学习 本光盘包括如下目录: “CAI教学材料” 包含全套的PowerPoint文件,可以直接用于教学,具体请参见该目录的readme.pps文件说明。目前包含的为文版辅助材料。最新版本将在下面给出的“MATLAB大观园”网站不定期更新。英文版教学辅助材料也将在该网站给出,适于双语教学。 “例题全部代码” 包含本书全部例题的MATLAB语句。文件命名方法为examp章号_例题号.m,例如书例 3-5 对应的文件名为examp3_5.m。为能使得本书例 题方便执行,可以在MATLAB的命令窗口由File/Set Path菜单将例题所在目录包含在内。 “开发函数和使用资源” 包含作者为本书开发的全套函数;一些可以用于符号运算的新函数放在了@sym子目录下;rsda子目录下为“粗糙集数据处理工具箱”, 该工具箱原作者为张雪峰,由薛定宇修改后定稿。 本书建议使用的其他免费工具箱均可以从给出的MATLAB大观园直接下载,其最新版本可以从下面的地址直接免费下载。 (1) bnb工具箱,书第 6 章介绍的非线性整数规划程序。下载地址: http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=95&objectType=file (2) gaot工具箱,用遗传算法求解最优化问题的工具箱。为了避免和MATLAB 7.0版本的新遗传算法与直接搜索工具箱在函数名上的冲突 ,这里将主函数名改为gaopt.m,相应的函数调用语句也作了适当的改动。下载地址: http://www.ie.ncsu.edu/mirage/GAToolBox/gaot/ http://www.mathworks.com/matlabcentral/fileexchange/loadFile.do?objectId=2797&objectType=file (3) lpsolve工具箱,整数线性规划的工具箱,由C语言通过mex格式调用,如果在您的MATLAB环境下不能正确使用该工具箱的dll文件,则说明MATLAB版本不兼容,需要您自己运行该目录的lp_mex.m文件重新生成dll文件。下载地址: ftp://ftp.ics.ele.tue.nl/pub/lp_solve/ http://www.netlib.org/ampl/solvers/lpsolve/ (4) nit_new工具箱,是数值积分工具箱的修改版,原版适合于 MATLAB 4.X,为能在当前MATLAB版本下运行,对个别文件做了相关修正。下载地址: http://www.matlab-world.com/progs/toolbox/nit.zip 本书所涉及的TeXPoint 2.0.3插件是由美国加州Berkeley大学开发的,包括3个文件,其最新版本可以到开发者的网站免费下载。下载地址: http://raw.cs.berkeley.edu/texpoint/ TeXPoint 2.0.3插件所包括的3个文件也可以分别在如下地址下载: http://www.matlab-world.com/temp/TexPoint2000-2.0.3.msi http://www.matlab-world.com/temp/TexPoint2002-2.0.3.msi http://www.matlab-world.com/temp/TexPoint2003-2.0.3.msi 相关网站地址列表: MATLAB大观园,作者维护的MATLAB教学与资源网站。网站地址: http://www.matlab-world.com MATLAB语言与应用论坛,作者维护的论坛,讨论MATLAB方面的问题。论坛地址: http://matlab.netsh.net

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值