0

ルートやコストなどを含むクラスを使用するTSPに2つのアルゴリズムを実装しています。すぐにランダムな値を使用しますが、これを公平にするためにアルゴリズムを比較する必要があります。同じ入力(ランダム入力を使用する場合は明らかに起こりそうにありません!)問題は、ランダム値から2D配列に事前に決定された値を挿入する方法がわからないことです。それだけでなく、私も知りません。これらの値のコストを計算する方法。


ノード値をランダムに生成します。

Random rand = new Random();
            for (int i=0; i<nodes; i++) {
                for (int j=i; j<nodes; j++) {
                    if (i == j)
                        Matrix[i][j] = 0;
                    else {
                        Matrix[i][j] = rand.nextInt(max_distance);
                        Matrix[j][i] = Matrix[i][j];
                    }
                }
            }

上記のために、たとえば[4] [4]の行列を宣言し、次にint行列[] [] =値を挿入すると仮定しますか?

私はこのクラスの他のいくつかのセクションを手伝っていませんが、もう尋ねる前にこの部分が正しいことを確認する必要があると思います!

よろしくお願いします!

4

2 に答える 2

2

乱数ジェネレーターごとに代わりにシードを設定できるため、テストする実装ごとに、疑似乱数の同じシーケンスが作成されることが保証されます。

これにより、多くの値を手動で入力する手間が省けます。

シード メソッドを表示するように編集します。

Random r = new Random(56);

r が 56 のシードで作成されるたびに、まったく同じ一連の乱数が生成されます。シードがなければ、シードはデフォルトでシステム時間に設定されていると思います(真に乱数のような錯覚を与えます)。

于 2013-01-14T16:24:31.957 に答える
2

次のように 2D 配列の初期化を行うことができます。

    double matrix[][] = { { v1, v2, ..., vn }, { x1, x2, ..., xn }, ..., { y1, y2, ..., yn } };

ここで、内側の各 {} は外側 (最初の) インデックスを表し、内側の各要素は最も内側 (2 番目) のインテックスを表します。

例: 要素 x1 にアクセスするには、次のようにします。

    matrix[1][0];

これはあなたが求めた答えですが、両方のアルゴリズムに同じランダム値のセットを使用する方が良いと思います.Jon Taylorはそれを行うための良い方法を示しました. シードを設定するコードは次のようになります。

    int seed = INTEGER_VALUE;
    Random rand = new Random(seed);

このようにして、同じ値のセットを取得できます。

于 2013-01-14T16:27:00.037 に答える