5

我正在尝试在 Octave 中运行 Kevin Murphy 的 Bayes Net Toolbox,但遇到了一些问题。我是贝叶斯网络、Matlab 和 Octave 的新手,这于事无补。

这个工具箱最初是为 Matlab 编写的。有一个名为的大型测试文件test_BNT.m贯穿工具箱中的所有功能。&大多数错误消息与&&Matlab 和 Octave之间的差异有关。这很容易解决。但是,我现在遇到了一个新问题,我不知道该怎么办。

例如,该qmr1.m脚本创建一个pearl_inf_engine类的实例,设置一些成员成员变量并将该类的实例传递给另一个函数。稍后,在不同的脚本 ( parallel_protocol.m) 中再次访问成员变量。但发生这种情况时,会出现以下消息:

error: invalid index for class
error: evaluating argument list element number 1

似乎从一个脚本到另一个脚本,它忘记了该类有任何成员变量,并在您尝试访问它们时给出无效索引消息。

这是一个简单的解决方案的常见错误吗?路径或工作目录有问题吗?也许其他人已经将 BNT 转换为八度并知道该怎么做?

编辑

我能够通过此错误消息。诀窍是阅读安装说明(哈哈)并运行addpath(genpathKPM(<BNT base directory)). genpathKPM.m是一个包含在 BNT 中的脚本,它将所有必需的目录添加到路径中。

完成此操作后,在给出警告的每一行运行test_BNT.m并更改&to&&|to 。||这将清除大部分错误。

但是,我仍然无法运行mpe1.m,mp2.mmildew1.m其他一些。我坚持的新错误消息是:

error: invalid empty index list
error: called from:
error:   C:\FullBNT-1.0.7\bnt\BNT\inference\static\@var_elim_inf_engine\find_mpe
.m at line 63, column 5

在这行代码上:

eval(['sCPT.T(', sargs, num2str(jj), ')=0;']);

如果我可以让所有脚本正常工作,我将在此处发布答案以及我采取的步骤。

编辑 2

我能够克服上一次编辑中的问题。代替

eval(['sCPT.T(', sargs, num2str(jj), ')=0;']);

eval(['sCPT.T(', sargs, sprintf('%d',jj), ')=0;']);

下一个问题是相同的。用同样的方法替换 num2str 即可。

该文件显然是由 BNT 的用户贡献的,而不是由原作者编写的。我认为,使用eval一种 hack。更好的解决方法是重写代码,使其根本不使用eval

中还有一个错误draw_graph.m,这显然也是对该项目的外部贡献。我只是注释掉了对该函数的调用,因为我现在对绘制图表不感兴趣。完成此操作并继续修复短路运算符后,test_BNT.m将运行所有测试。

draw_graph.m不过,在我也可以运行之前,我不会为此创建答案。

4

1 回答 1

2

由于已经过去了很长时间,并且问题中提供了核心问题的答案,因此我将其发布在这里,因此它不会被列为未回答:

tl;dr:更改了一些操作符,解决了下面指定的剩余错误,除了绘图之外一切正常。

编辑

我能够通过此错误消息。诀窍是阅读安装说明(哈哈)并运行addpath(genpathKPM(<BNT base directory)). genpathKPM.m是一个包含在 BNT 中的脚本,它将所有必需的目录添加到路径中。

完成此操作后,在给出警告的每一行运行test_BNT.m并更改&to&&|to 。||这将清除大部分错误。

但是,我仍然无法运行mpe1.m,mp2.mmildew1.m其他一些。我坚持的新错误消息是:

error: invalid empty index list
error: called from:
error:   C:\FullBNT-1.0.7\bnt\BNT\inference\static\@var_elim_inf_engine\find_mpe
.m at line 63, column 5

在这行代码上:

eval(['sCPT.T(', sargs, num2str(jj), ')=0;']);

如果我可以让所有脚本正常工作,我将在此处发布答案以及我采取的步骤。

编辑 2

我能够克服上一次编辑中的问题。代替

eval(['sCPT.T(', sargs, num2str(jj), ')=0;']); with

eval(['sCPT.T(', sargs, sprintf('%d',jj), ')=0;']);

下一个问题是相同的。用同样的方法替换 num2str 即可。

该文件显然是由 BNT 的用户贡献的,而不是由原作者编写的。我认为,使用eval一种 hack。更好的解决方法是重写代码,使其根本不使用eval

中还有一个错误draw_graph.m,这显然也是对该项目的外部贡献。我只是注释掉了对该函数的调用,因为我现在对绘制图表不感兴趣。完成此操作并继续修复短路运算符后,test_BNT.m将运行所有测试。

于 2017-07-18T15:03:25.957 回答