分支定界解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分支定界解析

MATLAB解整数规划问题——分支定界法 柯伟敏 G012012348 一、问题分析 在线性规划问题中,有些最优解可能是分数或小数,事实上,线性规划是连续变量的线性优化问题。但在实际问题中,常有要求解答必须是整数的情形。例如,所求解是机器人的台数,完成工作的人数或者装货的车数等,分数或者小数的解答就不符合要求。为了满足整数解的要求,初看起来,似乎只要把已得到的带有分数的或小数的解经过‘舍入化整’就可以了。但这常常是不行的,因为化整之后不见得就是可行解,或虽是可行解,但不一定是最优解。因此,对求最优整数解问题,有必要另行研究。我们称这样的问题为整数规划问题。学习运筹学过后,我们学习了笔算这类问题,但是当对于一个问题的约束条件有很多个时,手算必然耗费很大个工作量。但是用 MATLAB 解题却可以达到事半功倍的效果,省去了很多繁琐的运算过程。 二、数学原理 下面我主要介绍分支定界解法。分支定界法的基本思想是不断将可行域分割成小的集合,然后再小的集合上找整数最优解,在分割可行域时,整数解并不会丢失。其算法过程如下: 1、 置矩阵NF_lb为原整数的的lb,NF_ ub 为原整数规划的ub,置最优解(,目标函数的最优上界F=+∞。 2、设NF_lb的第一列为l,NF_ub第一列为u,求解线性规划min f(x)=cx, s.t. ,设最优解为,最优值为,如果不存在最优解,则设=+∞; 3、若=+∞,则将NF_lb的第一列和NF_ub的第一列去掉,转7,否则,转4 4、若F,则将NF_lb的第一列去掉,和NF_ub的第一列去掉,转7,否则,转5. 5、若F,且的各分量都为整数,则置F=,,将NF_lb的第一列和NF_ub的第一列去掉,转7,否则转6。 6、若F,但的有些分量不是整数,任选择中一个不是整数的分量,将此问题分解为两个问题Q1Q2; 第一个问题的ub等于u,而lb是将NF_lb中的第一列分量对应的下界改为[]+1; 第二个问题的lb等于l,而ub是将NF_ub中的第一列,对应的上界改为[],再将NF_lb的第一列和NF_ub的第一列去掉,把Q1,Q2对应的lb,ub作为新列分别添加到NF_lb和NF_ub的后面,转2 若NF_lb不为空,则转2,若为空,且不为空,则为原整数规划的最优解,F=最优值,如果为空,则原整数规划不存在最优解。 解题过程 根据上述算法,编写对应的MATLAB程序 function [x,fm] = IntProgFZ(f,A,b,Aeq,beq,lb,ub) x = NaN; fm = NaN; NF_lb = zeros(size(lb)); NF_ub = zeros(size(ub)); NF_lb(:,1) = lb; NF_ub(:,1) = ub; F = inf; while 1 sz = size(NF_lb); k = sz(2); opt = optimset(TolX,1e-9); %解线性规划 [xm,fv,exitflag] = linprog(f,A,b,Aeq,beq,NF_lb(:,1),NF_ub(:,1),[],opt);%求原问题的松弛问题的最优解 if exitflag == -2 %不存在最优解 xm = NaN; fv = NaN; end if xm == NaN fv = inf; %无穷大,对应第3步 end if fv ~= inf %不为不穷大 if fv F %对应算法分析第5步 if max(abs(round(xm) - xm))1.0e-7 %判断各个分量是否为整数 F = fv; x = xm; tmpNF_lb = NF_lb(:,2:k);%去掉第一列 tmpNF_ub = NF_ub(:,2:k);%去掉第一列 NF_lb = tmp NF_lb; NF_ub = tmp NF_ub; if is empty(NF_lb) == 0 %第7步,判断NF_lb是否为空

文档评论(0)

juhui05 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档