• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

分枝定界的matlab实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
function [optSolution,optValue,exists]=BranchBound(c,A,b)
% 分支定界法
% 整数规划问题标准型
% min c'*x
% s.t.
% A*x<=b

upper = inf;
lower = -inf;
branchStack_A(1) = {A};
branchStack_B(1) = {b};
numOfVariable = length(c);

while ~isempty(branchStack_A)
    len = length(branchStack_A);
    A = branchStack_A{len};
    b = branchStack_B{len};
    branchStack_A(len) = [];
    branchStack_B(len) = [];
    
%     A
%     b
    [x,opt,exist] = linprog(c,A,b);
    if 1 == exist && (opt - upper) <= 1e-7
        for iVar = [1:numOfVariable + 1]
            if iVar <= numOfVariable
                if abs(x(iVar) - round(x(iVar))) > 1e-7
                    %进行分枝操作,就将子问题入栈
                    temp_A = zeros(1,numOfVariable);
                    
                    temp_A(iVar) = -1;
                    branchStack_A(len) = {[A;temp_A]};
                    branchStack_B(len) = {[b;-(floor(x(iVar) + 1))]};
                    
                    temp_A(iVar) = 1;
                    branchStack_A(len + 1) = {[A;temp_A]};
                    branchStack_B(len + 1) = {[b;floor(x(iVar))]};
                    break;
                end
            else
                %是个整数解.更新upper
                if abs(upper - opt) < 1e-7
                    optSolution(:,end + 1) = x;
                else
                    optSolution = x;
                    upper = opt;
                    optValue = opt;
                end
            end
        end %for
    end %if
end%while
   
sizeOfSolution = size(optSolution);
if sizeOfSolution(2) == 0
    exists = 0;
else
    exists = 1;
end
end 

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
南叔先生学习笔记-Matlab算法篇-动态规划发布时间:2022-07-18
下一篇:
matlab中使用load命令导入数据发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap