0

シミュレーテッド アニーリングの概念を理解しようとしているので、数値を並べ替えるために実装しようとしました。これがシミュレーテッド アニーリングの概念的に正しい実装であるかどうかはわかりません。この場合、適切に実装する方法を教えてもらえますか? この場合、スコア関数を改善するにはどうすればよいですか? また、ここでは温度の概念を実装できませんでした。私はプログラミングの初心者なので、ご容赦ください。

#include<iostream>
#include<vector>
#include<map>
#include<cstdlib>
#include<cmath>
using namespace std;
void print(vector<int> x)
{
  for(int i=0;i<x.size();i++)
  {
     cout<<x[i]<<"->";
  }
  cout<<endl;
}
int score(vector<int> x)
{
   int s=0;
   for(int i=0;i<x.size()-1;i++)
   {
      for(int j=i+1;j<x.size();j++)
      {
        if(x[j]<x[i])
        s++;
      }
   }
   return s; 
}
map<vector<int> ,int>h;
int main()
{ 
  vector<int> x;
  srand(time(0));
  int N=20;// vector size 
  for(int i=0;i<N;i++)
  {
    x.push_back(rand()%10000);
  }
  int it=0;
  while(it<5000)
  {
      if(score(x)==0)  // score =0 stop;  
      {
         print(x);
         cout<<"done in iterations"<<it<<endl;
         break;
      }
      int a=rand()%N;
      int b=rand()%N;
      swap(x[a],x[b]);
      vector<int>y=x;
      swap(x[a],x[b]);
      if(h.find(y)!=h.end())   continue;
      if(score(x)>score(y))
      {
           x=y;
      }
      //print(x);
      it++;
  }
  return 0;

}

4

1 に答える 1

2

これは、シミュレートされたアニーリングとは関係ありません。単純に山登りのランダム ソートです。シミュレートされたアニーリングの重要な特性は、検索でより悪い答えを受け入れることがありますが、コードでは決して受け入れません。

于 2013-03-26T13:49:27.310 に答える