图搜索分枝限界法.pptVIP

  • 0
  • 0
  • 约8.33千字
  • 约 32页
  • 2019-12-22 发布于广东
  • 举报
第3讲 分支限界法 MaxLoading(c1); if (s-bestw =c2); {print(“The first ship loading”,bestw,“chose:”); for(i=1;i=n;i++) if(bestx[i]=1) print(i,“,”); print(“换行符 The second ship loading”, s-bestw“chose”); for(i=1;i=n;i++) if(bestx[i]=1) print(i,”,”); } else print(“no solution”); } 第3讲 分支限界法 AddLiveNode(folat wt,int i, QNode *E, int ch) { Qnode *b; if (i = n) / /叶子 { if (wtbestw) / /目前的最优解 { bestE = E; bestx[n] = ch;} //bestx[n]取值为ch return; } b = new QNode; // 不是叶子, 添加到队列中 b-weight = wt; b-parent = E; b-L Child = ch; //新节点是左孩子时 add (Q,b) ; } 第3讲 分支限界法 MaxLoading(int n, int bestx[]) { Qnode *E; int i = 1; E= new QNode;add (Q,0) ; // 0 代表本层的尾部 E-weight=0; E-parent =null; E- Lchild=0; add (Q,E) ; bestw = 0; r = 0; // E-节点中余下的重量 Ew=E-weight; for (int j =2; j = n; j++) r=r+ w[i]; while (true) // 搜索子集空间树 { wt = E-weight + w[i]; // 检查E-节点的左孩子 if (wt = c) // 可行的左孩子 { if (wt bestw) bestw = wt; AddLiveNode(wt,i, E ,1);} if (Ew+r bestw) // 检查右孩子 AddLiveNode(Ew,i,E,0); Delete (Q,E ) ; // 下一个E-节点 第3讲 分支限界法 if (!E) // 层的尾部 {if (Empty(Q )) break; add (Q 0 ) ; // 层尾指针 Delete(Q,E ) ; // 下一个E-节点 i + + ; // E-节点的层次 r = r - w[i];} // E-节点中余下的重量 Ew = E- w e i g h t ; // 新的E-节点的重量 }// 沿着从b e s t E到 根的路径构造x[ ],x [n]由AddLiveNode来设置 for (j = n - 1; j 0; j--) {bestx[j]=bestE-LChild; // 从bool转换int bestE=bestE-parent;} return bestw; } That’s all for today See you next time Good bye! fengzhi fengzhi fengzhi fengzhi fengzhi fengzhi fengzhi fengzhi fengzhi 第3讲 分支限界法 每节一经典 有预见的前行 ? ? 第3讲 分支限界法 分枝——某个节点成为扩展节点后,要展开它的所有子节点;并将这些子节点放在一个称为活节点表中(栈,队列,优先队列). 按一定的规则(后进先出,先进先出)从活节点表中取出一个节点作为扩展节点. 定界——展开扩展节点的子节点时,使用限界函数以避免在状态空间中生成不包含答案结点的子树. 第

文档评论(0)

1亿VIP精品文档

相关文档