6

私は現在プロジェクト(TSP)に取り組んでおり、シミュレーテッドアニーリング擬似コードをJavaに変換しようとしています。私は過去に擬似コードをJavaコードに変換することに成功しましたが、これを正常に変換することはできません。

擬似コードは次のとおりです。

T0(T and a lowercase 0)    Starting temperature
Iter    Number of iterations
λ    The cooling rate

1.  Set T = T0 (T and a lowercase 0)
2.  Let x = a random solution
3.  For i = 0 to Iter-1
4.  Let f = fitness of x
5.  Make a small change to x to make x’
6.  Let f’ = fitness of new point
7.  If f’ is worse than f then
8.      Let p = PR(f’, f, Ti (T with a lowercase i))
9.      If p > UR(0,1) then
10.         Undo change (x and f)
11.     Else
12.         Let x = x’
13.     End if
14.     Let Ti(T with a lowercase i) + 1 = λTi(λ and T with a lowercase i)
15. End for
Output:  The solution x

誰かがJavaでこれの基本的なマークアップを見せてくれたら、私は非常に感謝するでしょう-私はそれを理解できないようです!

私はいくつかの関数を使用して複数のクラスにまたがって作業しています(これは私が求めているものとは無関係であるため、リストしません)。私はすでにsmallChange()メソッドとfitness関数を持っています-上記のメソッドのさまざまなバージョンを作成する必要がある可能性はありますか?たとえば、私は次のようなものを持っています:

public static ArrayList<Integer> smallChange(ArrayList<Integer> solution){

//Code is here.

}

異なるパラメーターを受け入れるこのメソッドの別のバージョンが必要になる可能性がありますか?次のようなもの:

public static double smallChange(double d){

//Code is here.

}

必要なのは、Javaで記述した場合にこれがどのように見えるかについての基本的な考え方です。正しい構文でどのように表示されるかがわかれば、コードに適応させることができますが、この特定のハードルを乗り越えることはできないようです。 。

4

3 に答える 3

5

基本的なコードは次のようになります。

public class YourClass {
  public static Solution doYourStuff(double startingTemperature, int numberOfIterations, double coolingRate) {
    double t = startingTemperature;
    Solution x = createRandomSolution();
    double ti = t;

    for (int i = 0; i < numberOfIterations; i ++) {
      double f = calculateFitness(x);
      Solution mutatedX = mutate(x);
      double newF = calculateFitness(mutatedX);
      if (newF < f) {
        double p = PR(); // no idea what you're talking about here
        if (p > UR(0, 1)) { // likewise
          // then do nothing
        } else {
          x = mutatedX;
        }
        ti = t * coolingRate;
      }
    }
    return x;
  }

  static class Solution {
    // no idea what's in here...
  }
}

smallChange()メソッドのさまざまなバージョンが必要な場合は、完全に実行可能ですが、継承について少し理解する必要があります。

于 2011-03-26T00:19:33.163 に答える
5

あなたの答えを教科書
ArtificialIntelligenceaModernApproachに提供されているコードと比較することができます。

于 2011-03-26T05:30:18.897 に答える
3

また、シミュレーテッドアニーリング(サンプルコードを使用)を教えるためのJavaベースのアプローチは次のとおりです。

ネラー、トッド。I.ラッセルとZ.マルコフ編の確率的ローカル検索の指導。第18回国際FLAIRS会議(FLAIRS-2005)の議事録、フロリダ州クリアウォータービーチ、2005年5月15〜17日、AAAI Press、8〜13ページ。

関連するリソース、リファレンス、およびデモはここにあります:http: //cs.gettysburg.edu/~tneller/resources/sls/index.html

于 2011-03-29T01:22:28.447 に答える