1

私は現在、MATLAB で最適化アルゴリズムを書いていますが、これは完全に苦手なので、本当にあなたの助けを借りることができます。多かれ少なかれ次のように見えるグラフ(または複数のルートを持つツリーのようなもの)を表す良い方法を見つけるのに本当に苦労しています:

代替テキスト http://img100.imageshack.us/img100/3232/graphe.png

基本的に 11/12/13 はルート (ステージ 0) で、2x はステージ 1、3x はステージ 2、4x はステージ 3 です。ご覧のとおり、stageX のノードは stage(X+1) のいくつかのノードにのみ接続されています (したがって、すべてのノードに接続する必要はありません)。

重要: 各ノードは複数の値 (少なくとも 3 ~ 4) を保持する必要があります。1 つはその番号であり、少なくとも 2 つの他の変数 (決定を最適化するために使用されます) です。

私は行列を使った簡単な表現を持っていますが、それを維持するのは本当に難しいので、それを行う良い方法があるのだろうかと思っていました.

2 番目の質問: その表現が終わったら、各ルート (ルートから最後まで) がどれだけ優れているかを計算する必要があります (たとえば、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 があまり得意ではなく、先生は私にそれをさせてくれませんでした)ジャバ)。

4

1 に答える 1

3

確かに、これは最も効率的なソリューションではないかもしれませんが、Matlab 2008+ にアクセスできる場合は、ノード クラスを定義してグラフを表すことができます。

Matlabのドキュメントには、テンプレートとして使用できるリンク リストに関する優れた例があります。

基本的に、ノードには、リンク先のノードのインデックスを指すプロパティ 'linksTo' と、各リンクのコストを計算するメソッド (場合によっては、各リンクを説明する追加のプロパティを使用) があります。次に、必要なのは、各リンクを下に移動し、上に移動したときにコストをもたらす関数だけです。

于 2010-03-16T23:34:16.993 に答える