jncrusher

Untitled

Jan 19th, 2014
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.02 KB | None | 0 0
  1. odcinek mrowka::losuj(int ktory_krok){
  2.     /////////////////ODRZUCENIE WĘZŁÓW WYKORZYSTANYCH//////////////////////
  3.     vector <int> indeksy_pozostalych_wezlow; //wektor z indeksami nie wykorzystanych węzłów
  4.    
  5.     for(int i=0; i<DLUGOSC;i++){
  6.         bool czy_byl=false;
  7.         for(int j=0; j<=ktory_krok;j++){
  8.             if(wezly[j]==i)
  9.                 czy_byl=true;
  10.         }
  11.         if(czy_byl)
  12.             ;
  13.         else
  14.             indeksy_pozostalych_wezlow.push_back(i);
  15.     }
  16.     ////////////////////UTWORZENIE LISTY ODCINKÓW DO PRZEJŚCIA////////////////////////
  17.     int indeks_obecnego=wezly[ktory_krok];
  18.     vector <odcinek> odcinki_do_wylosowania;
  19.     for(int i=0; i<(int)odcinki_z_feromonem_glowne.size(); i++){
  20.         for(int j=0; j<(int)indeksy_pozostalych_wezlow.size(); j++){
  21.             if(odcinki_z_feromonem_glowne[i].pocz==indeks_obecnego){
  22.                 if(odcinki_z_feromonem_glowne[i].kon==indeksy_pozostalych_wezlow[j]){
  23.                     odcinki_do_wylosowania.push_back(odcinki_z_feromonem_glowne[i]);
  24.                 }
  25.             }
  26.             if(odcinki_z_feromonem_glowne[i].kon==indeks_obecnego){
  27.                 if(odcinki_z_feromonem_glowne[i].pocz==indeksy_pozostalych_wezlow[j]){
  28.                     odcinki_do_wylosowania.push_back(odcinki_z_feromonem_glowne[i]);
  29.                 }
  30.             }
  31.         }
  32.     }
  33.     ///////////////////TWORZENIE LINII LOSOWANIA//////////////////////////////////////
  34.     double linia_losowania=0;
  35.     for(int i=0; i<(int)odcinki_do_wylosowania.size(); i++){
  36.         linia_losowania+=odcinki_do_wylosowania[i].feromon;
  37.         linia_losowania+=0.1;
  38.     }
  39.      mt19937 eng(static_cast<unsigned long>(time(nullptr)));
  40.  
  41.     uniform_real <double> dist(0, linia_losowania);
  42.  
  43.     double wylosowana_liczba=dist(eng);
  44.     int indeks=0; //indeks wylosowanego odcinka
  45.     linia_losowania=0;
  46.     for(int i=0; i<(int)odcinki_do_wylosowania.size(); i++){
  47.         if(i==(int)odcinki_do_wylosowania.size()-1){
  48.             if((wylosowana_liczba>=linia_losowania)&&(wylosowana_liczba<=(linia_losowania+0.1))){
  49.                 indeks=i;
  50.                 break;
  51.             }
  52.         }
  53.         else{
  54.             if((wylosowana_liczba>=linia_losowania)&&(wylosowana_liczba<(linia_losowania+0.1))){
  55.                 indeks=i;
  56.                 break;
  57.             }
  58.         }
  59.     }
  60.  
  61.     return odcinki_do_wylosowania[indeks];
  62.    
  63. };
Advertisement
Add Comment
Please, Sign In to add comment