我目前正在MATLAB中编写一个优化算法,我完全厌恶,因此我可以真正使用你的帮助。我真的很难找到一个表示图形的好方法(或者更像是一个有几个根的树),这看起来或多或少是这样的:
alt text http://img100.imageshack.us/img100/3232/graphe.png
基本上11/12/13是我们的根(第0阶段),2x是阶段1,3x阶段2和4x阶段3。正如您所看到的,stageX中的节点仅连接到阶段(X + 1)的多个节点(因此它们不必连接到所有节点)。
重要提示:每个节点必须包含多个值(至少3-4个),一个是数字,至少有两个其他变量(用于优化决策)。
我确实有一个使用矩阵的简单表示,但它很难维护,所以我想知道有一个很好的方法吗?
第二个问题:当我完成这种表示时,我需要计算每条路线(从根到最后)的好坏程度(比如让我说我需要比较的是11-21-31-41最好或是11-21-31-42更好)要做到这一点我将使用每个节点持有的变量。但是这些值必须递归计算,假设我们从11开始,但要计算好11-21-31-41我们首先需要去41,做一些计算,去31,做一些计算,去到21进行一些计算然后我们可以使用所有先前的计算来计算11。与11-21-31-42相同(我们从42开始,然后31-> 21-> 11)。我需要检查所有可能的路线。这是问题,如何做到这一点?也许是BFS / DFS?但我不太确定如何存储所有结果。
这些是一些冗长的问题,但我希望我不要求你做我的作业(因为我得到了所有的算法,只是因为我不太擅长matlab而我的老师不会让我去在java中做。)
答案 0 :(得分:3)
当然,它可能不是最有效的解决方案,但如果您可以访问Matlab 2008+,则可以定义一个节点类来表示您的图形。
Matlab documentation在链接列表上有一个很好的例子,您可以将其用作模板。
基本上,一个节点有一个属性'linksTo',它指向它链接到的节点的索引,以及一个计算每个链接成本的方法(可能还有一些描述每个链接的附加属性) 。然后,您所需要的只是一个向下移动每个链接的功能,并在它向上移动时带来成本。