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

最近在准备数学建模,处理非线性的整数规划问题时,用到了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文件的代码及注释吧... ... :)

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

  1. Matlab中的lsqcurvefit函数的使用

    Matlab中的lsqcurvefit函数的使用 lsqcurvefit函数 调用示例 lsqcurvefit函数 非线性曲线拟合是已知输入向量xdata和输出向量ydata,并且知道输入与输出的函数 ...

  2. 【 MATLAB 】使用 filter 函数产生给定线性时不变系统的单位阶跃响应

    先给出filter的大致介绍:[ MATLAB ]filter 函数介绍(一维数字滤波器) 上篇博文写了产生一个系统的脉冲响应的博文,有兴趣可以看看:[ MATLAB ]使用 impz 函数计算并画出 ...

  3. matlab拟合未定义函数或变量,关于matlab的未定义函数或变量的问题

    1.首先需要知道matlab中查看数据类型函数是class,可以先在命令行窗口中help class.2.在命令行窗口中输入"a=123 class(a)".3.按回车键可以看到变 ...

  4. 【Matlab 控制】求函数极限

    Matlab 求极限 求函数的0极限: >> syms x; >> y1=(4*x^3-2*x^2+x)/(3*x^2+2*x); >> limit(y1,x,0) ...

  5. Matlab:Matlab中常用的函数、案例详细攻略

    Matlab:Matlab中常用的函数.案例详细攻略 目录 常用函数 1.与文件相关 2.MATLAB GUI不同控件函数间变量传递方法 常用函数 Matlab中的bwmorph函数解释 bwmorp ...

  6. MTM:matlab实现5主函数解码

    前言 之前讲了MTM(多锥形窗谱估计)的相关原理,现在来分析一下它的matlab实现. 想要复习的可以参考一下之前的文件: 现代谱估计:多窗口谱 想要复习一下如何实现的可以参考: MTM:matlab ...

  7. [MATLAB学习笔记]peaks函数1013(2)

    >> Z = peaksZ =1 至 10 列0.0001 0.0001 0.0002 0.0004 0.0007 0.0011 0.0017 0.0025 0.0034 0.00430. ...

  8. matlab作动态函数曲线图,[转载]Matlab中使用Plot函数动态画图方法总结

    本帖最后由 sonictl 于 2012-12-31 12:18 编辑 请删除我 清楚超靠靠靠 没办法,一会儿限制这不能发表,那不能发表的.... [转载]Matlab中使用Plot函数动态画图方法总 ...

  9. MATLAB常用命令、函数与运算

    MATLAB常用命令.函数与运算(自学笔记1) 笔者正在学习matlab的m函数,本文为学习笔记的其中之一. 本文主要介绍MATLAB中常用的命令.函数和运算. 文章目录 MATLAB常用命令.函数与 ...

最新文章

  1. 儿智展---国内首个少儿智能产品专业展11月登陆上海
  2. gRPC:Google开源的基于HTTP/2和ProtoBuf的通用RPC框架
  3. D. Binary Literature
  4. 理解Spring框架中Bean的作用域
  5. bzoj1334 [Baltic2008]Elect
  6. 前端接收pdf文件_原生ajax请求获取pdf文件流本地下载(支持谷歌IE)
  7. 4.linux 命令行 光标移动技巧
  8. html与css游戏开发工具,分享15个最佳的HTML/CSS设计和开发框架
  9. 冒泡排序c语言程序,冒泡排序(C语言实现)
  10. 教育系统APP(四)
  11. 使用Python自动提取内容摘要
  12. 树莓派Pico与ADXL345三轴加速度传感器SPI总线接口技术及MicroPython编程
  13. C语言商品订购系统(跟购物系统有些差别)
  14. 中文数字与阿拉伯数字转换(Python)
  15. 揭秘!苏宁“信息基础设施”型零售实践大解析
  16. 618买什么蓝牙耳机最划算?四款高品质蓝牙耳机测评
  17. 微信小程序页面上面的名字怎么改_微信小程序名称可以修改几次? 微信小程序修改名称的方法...
  18. Bugku - 代码审计 | md5函数
  19. 英语四级真题作文 计算机,2017年6月英语四级作文真题及范文:卖电脑
  20. C#,图像二值化(04)——全局阈值的凯勒算法(Kittler Thresholding)及源程序

热门文章

  1. websocket 前后端交互实战
  2. Linux重启服务器设置程序自启;
  3. 当图片宽高和轮播图的框不一致时
  4. 第19章 随机波动率模型入门
  5. 单片机c语言程序为什么要加密,(转老贴)单片机加密方法简介:
  6. 任务管理(job control)
  7. 【基于容器的部署、扩展和管理】3.6 集群监控和日志收集
  8. sftp搭建出现的一些问题
  9. Jenkins 启动一直显示 Jenkins正在启动,请稍后...
  10. 公司收购的流程及收购的风险防范