【算法】分支定界

2023-11-07

一、基本描述

    类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解

   (1)分支搜索算法

    所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相邻结点,抛弃不满足约束条件的结点,其余结点加入活结点表。然后从表中选择一个结点作为下一个E-结点,继续搜索。

     选择下一个E-结点的方式不同,则会有几种不同的分支搜索方式。

   1)FIFO搜索

   2)LIFO搜索

   3)优先队列式搜索

(2)分支限界搜索算法 

二、分支限界法的一般过程

    由于求解目标不同,导致分支限界法与回溯法在解空间树T上的搜索方式也不相同。回溯法以深度优先的方式搜索解空间树T,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T

    分支限界法的搜索策略是:在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展对点。为了有效地选择下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值(限界),并根据这些已计算出的函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以便尽快地找出一个最优解。

    分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。问题的解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树。在搜索问题的解空间树时,分支限界法与回溯法对当前扩展结点所使用的扩展方式不同。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,那些导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被子加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所求的解或活结点表为空时为止。

三、回溯法和分支限界法的一些区别

    有一些问题其实无论用回溯法还是分支限界法都可以得到很好的解决,但是另外一些则不然。也许我们需要具体一些的分析——到底何时使用分支限界而何时使用回溯呢?

回溯法和分支限界法的一些区别:

   方法对解空间树的搜索方式       存储结点的常用数据结构      结点存储特性常用应用

  回溯法深度优先搜索堆栈活结点的所有可行子结点被遍历后才被从栈中弹出找出满足约束条件的所有解

  分支限界法广度优先或最小消耗优先搜索队列、优先队列每个结点只有一次成为活结点的机会找出满足约束条件的一个解或特定意义下的最优解

其他更好的解释:

分支定界 (branch and bound) 算法是一种在问题的解空间树上搜索问题的解的方法。但与回溯算法不同,分支定界算法采用广度优先或最小耗费优先的方法搜索解空间树,并且,在分支定界算法中,每一个活结点只有一次机会成为扩展结点。

利用分支定界算法对问题的解空间树进行搜索,它的搜索策略是:

1 .产生当前扩展结点的所有孩子结点;

2 .在产生的孩子结点中,抛弃那些不可能产生可行解(或最优解)的结点;

3 .将其余的孩子结点加入活结点表;

4 .从活结点表中选择下一个活结点作为新的扩展结点。

如此循环,直到找到问题的可行解(最优解)或活结点表为空。

从活结点表中选择下一个活结点作为新的扩展结点,根据选择方式的不同,分支定界算法通常可以分为两种形式:

1 . FIFO(First In First Out) 分支定界算法:按照先进先出原则选择下一个活结点作为扩展结点,即从活结点表中取出结点的顺序与加入结点的顺序相同。

2 .最小耗费或最大收益分支定界算法:在这种情况下,每个结点都有一个耗费或收益。假如要查找一个具有最小耗费的解,那么要选择的下一个扩展结点就是活结点表中具有最小耗费的活结点;假如要查找一个具有最大收益的解,那么要选择的下一个扩展结点就是活结点表中具有最大收益的活结点。

FIFO分支定界算法

因为没有一个感觉好的说明,固贴上两个网址上的算法,有兴趣可以看一看。

FIFO分支定界算法初探

http://www.21shipin.com/html/62062.shtml

常用算法大全-分枝定界

http://www.cppblog.com/ivenher/articles/1777.html

转载来源;https://blog.csdn.net/feiyangtianyao/article/details/35795317

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【算法】分支定界 的相关文章

  • 干电池升压5V,功耗比较低

    干电池升压5V 功耗10uA PW5100干电池升压5V芯片 输出电容 所以为了减小输出的纹波 需要比较大的输出电容值 但是输出电容过大 就会使得系统的 反应时间过慢 成本也会增加 所以建议使用一个 22uF 的电容 或者两个 22uF 的
  • Java动态规划硬币问题最优值和最优解

    给定不同面额的硬币coins和一个总金额amount 计算并输出可以凑成总金额所需的最少的硬币个数和使用的硬币 网上介绍动态规划的文章已经很多了 我的这篇文章分析了我自己分析硬币问题的算法在二维数组的效能分析 其中用了Intellij ID

随机推荐

  • maven项目如何加载不同的配置文件

    疑惑 公司项目 本地启动时取用默认路径的下的配置文件 而当maven打包时取用另一文件路径下的配置文件 解决过程 首先查找公司项目代码中是否控制本地启动和服务器启动时使用的配置文件不同 但是发现并不是 最后考虑是否是maven打包加载时已经
  • tiktok新号发布的视频播放量为零解决方案

    tiktok新号发布的视频播放量为零解决方案 大家好 我是项柚 一个专注于讨论TikTok玩法的跨境电商自媒体人 每天不断输出干货给需要的朋友 首先我们先来看下0播放的原因 一 伪装度不够 首先我们在打开TikTok之前 你的伪 装度必须是
  • docker容器内安装git服务端

    创建容器 privileged 获得完整的root权限 usr sbin init 启动容器执行的第一个命令 以便可以使用systemctl命令 将容器的ssh服务22端口映射到宿主的65002端口 docker run itd privi
  • 深入学习jquery源码之noConflict()

    深入学习jquery源码之noConflict jQuery noConflict extreme 概述 运行这个函数将变量 的控制权让渡给第一个实现它的那个库 执行 var jq noConflict 后 将不再控制当前的jQuery 而
  • Spring boot短信验证登录

    一 短信验证码业务 我用的是第三平台的短信服务 当用户点击发送验证码 会调用短信平台接口 从而给手机发验证码 流程如下 c 首先需要工具类 来发送验证码 public class DXMessageUtil public static Bo
  • 【05】MySQL:日志管理

    写在前面的话 日志是作为用户排查服务问题的重要依据 在 MySQL 中日志可以分为几类 各自产生着不同的作用 如 error log bin log slow log 等 很多时候优化数据库的优化来源就是日志 错误日志 error log
  • JAVA-数组

    数组 概念 用于存储具有相同数据类型的容器称之为数组 可以使用统一的标识符 变量名进行管理 数据既可以存储基本数据类型也可以存储引用数据类型 可以存储任意类型的数据 数组的使用 声明 声明 与变量声明类似 在相应位置声明一个变量用于存储指定
  • 16. 线性代数 - 矩阵的性质

    文章目录 神经网络的矩阵 向量 矩阵的性质 Hi 你好 我是茶桁 根据上一节课的预告 咱们这节课要进入神经网络中 看看神经网络中的矩阵 向量 然后再来详细了解下矩阵的性质 毕竟咱们的课程并不是普通的数学课 而是人工智能的数学基础 那为什么人
  • java按钮新建窗口_java中如何创建一个登录窗口,有一个按钮(或是单选框)为不再? 爱问知识人...

    建一个本地配置文件保存参数 以后每次读取 登录时如果打钩了 写入不再显示的参数 public void writeinfo throws IOException File file new File c info inf if file e
  • MySQL约束

    概述 什么是MySQL约束 约束是作用于表中字段上的规则 用于限制存储在表中的数据 约束有什么作用 保证数据库中数据的正确 有效性和完整性 分类 约束 描述 关键字 非空约束 限制该字段的数据不能为null NOT NULL 唯一约束 保证
  • 军衔系统与服务器人数,经验越打越少?CSGO个人资料军衔(等级)介绍

    本文将为CSGO玩家们详细介绍CSGO个人资料军衔 经验等级 系统 包括解释为什么经验越打越少 CSGO个人资料军衔系统于2015年5月26日随血猎大行动一同引入 玩家可以在官方服务器任何模式游戏获得经验 XP 并升级 与水平组等级 段位
  • Ant-design-vue框架学习。

    1 安装教程 npm install ant design vue save 2 运用vue cli3 0版本搭建脚手架 3 样式布局layout插件布局快速实现整体布局 4 lib flexible实现屏幕适配 安装 npm instal
  • Tomcat

    关于Tomcat和Tomcat的面试问题 一 Tomcat的缺省是多少 怎么修改 Tomcat的缺省端口号是8080 修改Tomcat端口号 1 找到Tomcat目录下的conf文件夹2 进入conf文件夹里面找到server xml文件3
  • Java线程池ThreadPoolExecutor应用(Spring Boot微服务)

    记录 475 场景 在Spring Boot微服务中使用Java线程池ThreadPoolExecutor 实现Runnable接口提交线程任务到线程池 版本 JDK 1 8 Spring Boot 2 6 3 1 使用注解配置线程池Thr
  • EMC定义 +EMC问题定位整改

    参考链接 强烈推荐 1 有源医疗器械电磁兼容入门知识汇总 2 电磁兼容EMC测试 电磁兼容整改 EMC整改 深圳第三方检测认证机构 3 EMC设计和整改 定位 专题 最重要 https blog csdn net lyh290188 cat
  • MATLAB的Structure数组

    数组的定义与调用 gt gt s struct a 1 4 7 2 9 3 Anne b James pi c magic 3 1 7 使用struct函数创建结构数组 gt gt s 1 1 a 1 2 ans 1 1 cell 数组 4
  • jdk和java什么关系_Java中JDK和JRE的区别是什么?它们的作用分别是什么?

    JDK和JRE是Java开发和运行工具 其中JDK包含了JRE 但是JRE是可以独立安装的 它们在Java开发和运行的时候起到不同的作用 1 JDK JDK是Java Development Kit的缩写 是Java的开发工具包 主要包含了
  • http的get请求如何传递一个对象

    原文链接 https www longkui site program frontend httpget 4366 0 前言 以前前台往后台对象时 后台都用POST请求 前台有时候通过拼接参数传参 会显得比较长 所以考虑前台GET请求能否直
  • Linux (Centos)下pip命令出现错误bash: pip: 命令未找到..解决方案

    今天在服务器上跑程序 提示没有XX模块 我就用pip install XX 安装了一下 结果竟然提示pip命令找不到了 pip3能安装 但是pip3 list一看 里面都没有torch包 之前应该都是用pip安装的才对 去网上找了一通 发现
  • 【算法】分支定界

    一 基本描述 类似于回溯法 也是一种在问题的解空间树T上搜索问题解的算法 但在一般情况下 分支限界法与回溯法的求解目标不同 回溯法的求解目标是找出T中满足约束条件的所有解 而分支限界法的求解目标则是找出满足约束条件的一个解 或是在满足约束条