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 に含まれるスクリプトです。
これを行った後、実行して、警告が表示される各行でtoおよびtoにtest_BNT.m
変更します。これにより、ほとんどのエラーが解消されます。&
&&
|
||
mpe1.m
ただし、 、mp2.m
、およびその他のいくつかはまだ実行できませんmildew1.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
ていると思います。より良い修正は、まったく使用しないようにコードを書き直すことeval
です。
にはもう 1 つのエラーがありますdraw_graph.m
。これは明らかに、プロジェクトへの外部からの貢献でもあります。今はグラフの描画に興味がないので、その関数の呼び出しをコメントアウトしました。これを行った後、短絡演算子の修正を続けると、すべてのテストtest_BNT.m
が実行されます。
それでも、実行できるようになるまで、これに対する答えは作成しませdraw_graph.m
ん。