分枝定界算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

产生式规则: 5条,即向CR(R=1,2,3,4,5)城市移动
生成结点的条件: 第一、 所求下界小于当前的上界(已求路径的费用) 第二、 到CR城市可行(即费用不为max)。
搜索策略 (BFS)
框图:
初始 head=0 Tail=1
初始化INIT;初始结点入队;DD ←max 结点出队out(temp1);
分枝定界
回溯算法:在问题的整个状态空间图上搜索一 个解或全部解,并不断地使用约束函数(或约 束条件)来控制搜索进程,一旦发现以某个节 点为根的子树上不可能产生问题的解,就终止 对这一子图的搜索,从而避免了许多不必要的 工作,提高了效率。
分枝限界法:使用比回溯更为有效的约束函数 来控制这种搜索进程,使 之能更好的朝着状态 空间上有最佳解(即有最大目标函数或极小目 标函数)的分支推进,以尽快地找出一个最佳 解。
Repeat 结点出队; for I:=1 to r do{扩展结点}
begin 根据当前扩展情况计算delimiter; if delimiter<=min{其子结点可能产生比当前下界更
好的方案}
begin
if 子状态符合约束条件 then 生成子结点temp并入队 if min>temp.statei{重新估计下界}
分枝限界法的算法框架
一、初始化
2、Procedure init; Begin 按输入格式输入初始状态; 根据要求设置下界 min 的初始值; 初始化初始结点的各项值; 初始结点入队; End;
分枝限界法的算法框架
二、搜索
2、Procedure seach; Var
delimiter:integer{界变量}; temp:node{子结点}; Begin 下续 End;
即第I行第j列的数表示从Ci到Cj的旅费。城市之间无旅 费用max表示。要求找出从每个城市出发,游历每个城 市一次,最后返回出发地,找出旅费最少的路径。
12345 1 max 24 34 14 15 -14 2 19 max 20 9 6 -6 3 7 9 max 6 8 -6 4 23 10 22 max 7 -7 5 20 8 11 20 Max -8
例:求四皇后问题的所有合法 布局。
*** ** * **** * **
ห้องสมุดไป่ตู้
***
**
**
*
*
*** *** * ** ****
*** *** * ** ** *
例 旅行问题。 设五个城市之间的旅费由下表给出:
12345 1 max 24 34 14 15 2 19 max 20 9 6 3 7 9 max 6 8 4 23 10 22 max 7 5 20 8 11 20 max
y
当前结点D值<DD
n
For r:=1 to 5 do
产生新结点;并求D值
把新结点与未扩展结点按D值从小到大排序
y
dep=5
n
D<DD
保存该方案
DD← D
Until head=tail
分枝限界法的算法框架
一、初始化
1、定义和说明 type node=record {结点定义}
………; statei{界变量}; ………; var {变量说明} open,tail{open表的首尾指针} list:array[0..max] of node;{建表} best{符合目标函数要求的解答} min{下界};
-1 -0 -3 -0 -0
1
2
3
4
5
1 max 10 17 0
1 -14
2 12 max 11 3
0 -6
3
0
2 max 0
2 -6
4 15 3 12 max 0 -7
5 11 0
0 12 Max -8
-1 -0 -3 -0 -0
14+6+6+7+8+1+0+3+0+0=45
综合数据库 type node=record a:array[1..5,1..5] of byte; b:byte;{空格的坐标} pnt,dep:word;{父节点和深度} end; Var data:array[1..2600] of node; temp:node;
相关文档
最新文档