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 に含まれるスクリプトです。

これを行った後、実行して、警告が表示される各行で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ん。

4

1 に答える 1