void reprodukcja()
  {
      // tworzę tablicę skumulowanych wartości przystosowania:
      double fittness_skum[] = new double[liczba_rozw];
      fittness_skum[0] = fittness[0];
      for (int i=1;i<liczba_rozw;i++)
          fittness_skum[i] = fittness_skum[i-1] + fittness[i];

      Rozw nowa_popul_rozw[] = new Rozw[liczba_rozw];
      for (int i=0;i<liczba_rozw;i++) nowa_popul_rozw[i] = new Rozw();

      for (int i=0;i<liczba_rozw;i++)
      {
          double los = loteria.nextFloat()*fittness_skum[liczba_rozw-1];
          int indeks = -1;
          //System.out.printf("los = %f, fit_min = %f, fit_max = %f\n",los,fittness_skum[0],fittness_skum[liczba_rozw-1]);

          if (los <= fittness_skum[0]) indeks = 0;
          else
          {
              int k,l = 0, p = liczba_rozw-1;

              // wyszukiwanie binarne miejsca na ruletce:
              while (indeks == -1)
              {
                k = (l+p)/2;
                if (los > fittness_skum[k]) l = k+1;
                else p = k-1;
                //System.out.printf("l = %d, p = %d, k = %d, \n",l,p,k);
                if ((los <= fittness_skum[k])&&(los > fittness_skum[k-1]))
                    indeks = k;
              }
          }
          // utworzenie nowej kopii rozwiązania i umieszczenie jej w nowej populacji:
          nowa_popul_rozw[i].kopiuj_obiekt(popul_rozw[indeks]);
      } // for po rozwiązaniach

      popul_rozw = nowa_popul_rozw;           // nowa populacja zastępuje starą
  }