在matlab中实现优先级队列,以便使用BRANCH和BOUND解决优化问题

时间:2014-05-20 15:58:14

标签: matlab priority-queue

我试图在MATLAB中编写优先级队列,我知道有优先级队列的SIMULINK工具箱,但我试图在MATLAB中编写代码。我有一个伪代码,它使用优先级队列作为一个名为BEST First Search with Branch and Bound的方法。分支定界算法设计策略是状态空间树,用于解决优化问题。 simple explanation of what is branch and bound 我从一本名为“算法的基础”的书中读到了第5章:分支和界限,它是Richard Neapolitan和Kumarss Naimipour的第4版,文本是关于设计算法,复杂性分析的。算法和计算复杂性(问题分析),非常有趣的书,我遇到了这个伪代码:


Void BeFS( state_space_tree T, number& best)

{

priority _queue-of_node PQ; 

node(u,v); 

initialize (PQ)   % initialize PQ to be empty

u=root of T;

best=value(v);

insert(PQ,v)      insert(PQ,v) is a procedure that adds v to the priority queue PQ 

  while(!empty(PQ){   % remove node with best bound

     remove(PQ,v); 

remove(PQ,v) is a procedure that removes the node with the best bound and it assigns    its value to v    

   if(bound(v) is better than best) % check if node is still promising

     for (each child of u of v){ 

     if (value (u) is better than best)

    (best=value(u);

     if (bound(u) is better than best)

    insert(PQ,u)
       }
      }
     }

我不知道如何在matlab中编写代码,并且分支和绑定是一种有趣的通用算法,用于查找各种优化问题的最优解,尤其是在离散和组合优化中,而不是使用启发法来找到最优解决方案,因为分支和绑定减少了计算时间并更快地找到最佳解决方案。

编辑:

在此处发布问题之前,我已经检查了解决方案是否已经实施。我来到这里是为了了解如何开始实施此代码

1 个答案:

答案 0 :(得分:0)

我已将此信息包含在您的帖子中,以便人们可以更好地了解您对他们的期望。但是,开始实施的想法是什么?仍然没有比如何在matlab中编写代码更具体。'

但是,我仍然会尝试回答:

  1. 制作代码的结构,编写基本循环并用你想做的评论填写
  2. 选择(最简单或第一个)其中一条评论,看看你是否可以在几行中实现它,你可以通过为该段代码生成一些虚拟输入来测试它
  3. 继续重复步骤2,直到所有评论都包含所需的代码
  4. 如果您遇到其中一个区块,并且已搜索但未找到特定问题的答案。那么这不是一个不好的地方。