jncrusher

Untitled

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