SHARE
TWEET

Untitled

a guest Dec 11th, 2019 62 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6.  
  7. namespace l2
  8. {
  9.      public static class Util
  10.     {
  11.         private static Random rnd = new Random();
  12.         public static int GetRandom02()
  13.         {
  14.             return rnd.Next(0,2);
  15.         }
  16.          public static double GetRandom02d()
  17.         {
  18.             return rnd.NextDouble();
  19.         }
  20.         public static int GetRandomCustom(int val)
  21.          {
  22.              return rnd.Next(0, val);
  23.          }
  24.          public static char rev(char har)
  25.         {
  26.             char h = '0';
  27.             if (har == h)
  28.                 return '1';
  29.             else return '0';
  30.         }
  31.         public static string ReplaceAt(this string input, int index, char newChar)
  32.         {
  33.             char[] chars = input.ToCharArray();
  34.             chars[index] = newChar;
  35.             return new string(chars);
  36.         }
  37.  
  38.     }
  39.  
  40.     class Program
  41.     {
  42.  
  43.         public static string Reverse(string s)
  44.         {
  45.             char[] charArray = s.ToCharArray();
  46.             Array.Reverse(charArray);
  47.             return new string(charArray);
  48.         }
  49.  
  50.  
  51.         public static String genbin(double dlugosc)
  52.         {
  53.             String liczbastr = "";
  54.             for (int i = 0; i < dlugosc; i++)
  55.             {
  56.                 liczbastr = liczbastr.Insert(0, Util.GetRandom02().ToString());
  57.             }
  58.             return liczbastr;
  59.         }
  60.  
  61.         public static int bintodec(String bin)
  62.         {
  63.             int dec = 0;
  64.             dec = Convert.ToInt32(bin, 2);
  65.             return dec;
  66.         }
  67.  
  68.         public static double doprzedzialu(int liczba, double a, double b, double m)
  69.         {
  70.             double wynik = 0;
  71.             wynik = a + (b - a) * liczba / (Math.Pow(2, m) - 1);
  72.             return wynik;
  73.         }
  74.  
  75.         public static double rastrigin(double x, double A, double omega, int n)
  76.         {
  77.             double wynik = 0;
  78.             wynik = A * n + Math.Pow(x, 2) - 10 * Math.Cos(omega * x);
  79.             return wynik;
  80.         }
  81.  
  82.         static void Main(string[] args)
  83.         {
  84.             bool pierwszy = true;
  85.             double A = 10;
  86.             double omega = 20 * 3.14;
  87.             int n = 3;
  88.             int d = 6;
  89.             double a = -1.0;
  90.             double b = 1.0;
  91.             double dziedzm = b - a;
  92.             double ilosckom = (b - a) * Math.Pow(10, d);
  93.             int m = 0;
  94.             double dlugwekbin = Math.Pow(2, m);
  95.             while (dlugwekbin <= ilosckom)
  96.             {
  97.                 m++;
  98.                 dlugwekbin = Math.Pow(2, m);
  99.             }
  100.             int il = 10;
  101.             List<String> lancuchy = new List<String>();
  102.             for (int i = 0; i < il; i++)
  103.             {
  104.                 lancuchy.Add(genbin(m));
  105.             }
  106.             List<String> koncowe = new List<String>();
  107.             for (int k = 0; k < 10; k++)
  108.             {
  109.                 //CAŁKOWITE ZASTĘPOWANIE
  110.                 if(pierwszy != true)
  111.                     lancuchy = koncowe;
  112.                 //CZĘŚCIOWE ZASTĘPOWANIE
  113.                 /*if(pierwszy != true)
  114.                 {
  115.                     List<String> temp = lancuchy;
  116.                     lancuchy = new List<String>();
  117.                     for (int i = 0; i < 5; i++)
  118.                         lancuchy.Add(koncowe[i]);
  119.                     for (int i = 0; i < 5; i++)
  120.                         lancuchy.Add(temp[i]);
  121.                    
  122.                 }
  123.                 */
  124.                 //LOSOWE ZASTĘPOWANIE
  125.                 /*if (pierwszy != true)
  126.                 {
  127.                     List<String> temp = lancuchy.Concat(koncowe).ToList();
  128.                     lancuchy = new List<String>();
  129.                     for (int i = 0; i < 10; i++)
  130.                         lancuchy.Add(temp[Util.GetRandomCustom(temp.Count)]);
  131.  
  132.                 }
  133.                 */
  134.                 List<double> odwzorowane = new List<double>();
  135.                 for (int i = 0; i < il; i++)
  136.                 {
  137.                     odwzorowane.Add(doprzedzialu(bintodec(lancuchy[i]), a, b, m));
  138.                 }
  139.                 List<double> rastriginlista = new List<double>();
  140.                 for (int i = 0; i < il; i++)
  141.                 {
  142.                     rastriginlista.Add(rastrigin(odwzorowane[i], A, omega, n));
  143.                 }
  144.                 Console.WriteLine("Dziedzina zmienności = " + dziedzm + " Il kombinacji = " + ilosckom + " m = " + m + " dł wektora bin = " + dlugwekbin);
  145.                 Console.WriteLine();
  146.                 Console.WriteLine("Wektory binarne:");
  147.                 for (int i = 0; i < il; i++)
  148.                     Console.WriteLine(lancuchy[i]);
  149.                 Console.WriteLine();
  150.                 Console.WriteLine("Odwzorowane lancuchy binarne na liczbę X z zakresu [" + a + "," + b + "]:");
  151.                 for (int i = 0; i < il; i++)
  152.                     Console.WriteLine(odwzorowane[i]);
  153.                 Console.WriteLine();
  154.                 Console.WriteLine("Wartości funkcji Rastrigina:");
  155.                 for (int i = 0; i < il; i++)
  156.                     Console.WriteLine(rastriginlista[i]);
  157.  
  158.                 Console.WriteLine();
  159.                 Console.WriteLine("RULETKA:");
  160.                 Console.WriteLine();
  161.                 double F = 0;
  162.                 for (int i = 0; i < il; i++)
  163.                     F += rastriginlista[i];
  164.                 //Console.WriteLine("Całkowite dopasowanie F = " + F);
  165.                 List<double> prawdopodobienstwa_wyboru = new List<double>();
  166.                 for (int i = 0; i < il; i++)
  167.                     prawdopodobienstwa_wyboru.Add(rastriginlista[i] / F);
  168.                 /*Console.WriteLine("Prawdopodobienstwa wyboru:");
  169.                 for (int i = 0; i < il; i++)
  170.                     Console.WriteLine(prawdopodobienstwa_wyboru[i]);*/
  171.                 List<double> dystrybuanty = new List<double>();
  172.                 for (int i = 0; i < il; i++)
  173.                 {
  174.                     double dystr = 0;
  175.                     for (int j = 0; j <= i; j++)
  176.                         dystr += prawdopodobienstwa_wyboru[j];
  177.                     dystrybuanty.Add(dystr);
  178.                 }
  179.                 /*Console.WriteLine("Dystrybuanty:");
  180.                 for (int i = 0; i < il; i++)
  181.                     Console.WriteLine(dystrybuanty[i]);*/
  182.                 List<String> ruletka = new List<string>();
  183.                 for (int i = 0; i < il; i++)
  184.                 {
  185.                     double r = Util.GetRandom02d();
  186.                     for (int j = 0; j < il; j++)
  187.                     {
  188.                         if (r < dystrybuanty[j])
  189.                         {
  190.                             //Console.WriteLine("Wybrany osobnik z indeksem " + j + ": " + lancuchy[j]);
  191.                             ruletka.Add(lancuchy[j]);
  192.                             break;
  193.                         }
  194.                     }
  195.                 }
  196.                 for (int i = 0; i < il; i++)
  197.                     Console.WriteLine(ruletka[i]);
  198.  
  199.                 Console.WriteLine();
  200.                 Console.WriteLine("MUTACJA:");
  201.                 Console.WriteLine();
  202.                 double pm = 0.1;
  203.                 List<String> lancuchymut = new List<String>();
  204.                 for (int i = 0; i < ruletka.Count; i++)
  205.                 {
  206.                     string st = "";
  207.                     for (int j = 0; j < m; j++)
  208.                     {
  209.                         double rn = Util.GetRandom02d();
  210.                         if (rn < pm)
  211.                         {
  212.                             if (ruletka[i][j] == '0')
  213.                                 st = st.Insert(0, "1");
  214.                             else if (ruletka[i][j] == '1')
  215.                                 st = st.Insert(0, "0");
  216.                         }
  217.                         else
  218.                         {
  219.                             st = st.Insert(0, ruletka[i][j].ToString());
  220.                         }
  221.                     }
  222.                     lancuchymut.Add(Reverse(st));
  223.                 }
  224.                /* Console.WriteLine("PO MUTACJI:");
  225.                 for (int i = 0; i < il; i++)
  226.                     Console.WriteLine(lancuchymut[i]);*/
  227.                
  228.                 Console.WriteLine();
  229.                 Console.WriteLine("INWERSJA:");
  230.                 Console.WriteLine();
  231.                 List<String> inw = new List<String>();
  232.                 double pi = 0.1;
  233.                 for (int i = 0; i < ruletka.Count; i++)
  234.                 {
  235.                     double rnd = Util.GetRandom02d();
  236.                     if(rnd < pi)
  237.                     {
  238.                         int p1 = Util.GetRandomCustom(m - 1);
  239.                         int p2 = Util.GetRandomCustom(m - 1);
  240.                         int pocz;
  241.                         int kon;
  242.                         if (p1 < p2)
  243.                         {
  244.                             pocz = p1;
  245.                             kon = p2;
  246.                         }
  247.                         else
  248.                         {
  249.                             pocz = p2;
  250.                             kon = p1;
  251.                         }
  252.                         string lancuch = ruletka[i];
  253.                         for(int j = pocz + 1; j < kon; j++)
  254.                         {
  255.                             if (lancuch[j] == '0')
  256.                                 lancuch = lancuch.ReplaceAt(j, '1');
  257.                             else if (lancuch[j] == '1')
  258.                                 lancuch = lancuch.ReplaceAt(j, '0');
  259.                         }
  260.                         inw.Add(lancuch);
  261.                     }
  262.                 }
  263.                /* for (int i = 0; i < inw.Count; i++)
  264.                     Console.WriteLine(inw[i]);*/
  265.  
  266.                 Console.WriteLine();
  267.                 Console.WriteLine("KRZYŻOWANIE JEDNOPUNKTOWE:");
  268.                 Console.WriteLine();
  269.                 List<String> rulkopia = ruletka;
  270.                 double pk = 0.6;
  271.                 List<String> ldokrzyz = new List<String>();
  272.                 for (int i = il - 1; i >= 0; i--)
  273.                 {
  274.                     double r = Util.GetRandom02d();
  275.                     if (r < pk)
  276.                     {
  277.                         ldokrzyz.Add(rulkopia[i]);
  278.                         rulkopia.RemoveAt(i);
  279.                     }
  280.                 }
  281.                 if (ldokrzyz.Count % 2 != 0)
  282.                 {
  283.                     int rnd = Util.GetRandomCustom(rulkopia.Count);
  284.                     ldokrzyz.Add(rulkopia[rnd]);
  285.                     rulkopia.RemoveAt(rnd);
  286.                 }
  287.                 /*for (int i = 0; i < ldokrzyz.Count; i++)
  288.                     Console.WriteLine(ldokrzyz[i]);*/
  289.                 List<String> lkrzyzfin = new List<String>();
  290.                 int ile = ldokrzyz.Count / 2;
  291.                 for (int i = 0; i < ile; i++)
  292.                 {
  293.                     List<String> lkrzyztemp = new List<String>();
  294.                     int los = Util.GetRandomCustom(ldokrzyz.Count);
  295.                     lkrzyztemp.Add(ldokrzyz[los]);
  296.                     ldokrzyz.RemoveAt(los);
  297.                     los = Util.GetRandomCustom(ldokrzyz.Count);
  298.                     lkrzyztemp.Add(ldokrzyz[los]);
  299.                     ldokrzyz.RemoveAt(los);
  300.                     int punkt = Util.GetRandomCustom(m - 1);
  301.                     string t1 = lkrzyztemp[0];
  302.                     string t2 = lkrzyztemp[1];
  303.                     for (int j = punkt + 1; j < m; j++)
  304.                     {
  305.                         lkrzyztemp[0] = lkrzyztemp[0].ReplaceAt(j, t2[j]);
  306.                         lkrzyztemp[1] = lkrzyztemp[1].ReplaceAt(j, t1[j]);
  307.                     }
  308.                     lkrzyzfin.Add(lkrzyztemp[0]);
  309.                     lkrzyzfin.Add(lkrzyztemp[1]);
  310.                 }
  311.  
  312.                 List<String> wszystkie = new List<string>();
  313.                 wszystkie = lancuchymut.Concat(inw).Concat(rulkopia).ToList();
  314.                 odwzorowane = new List<double>();
  315.                 for (int i = 0; i < wszystkie.Count; i++)
  316.                 {
  317.                     odwzorowane.Add(doprzedzialu(bintodec(wszystkie[i]), a, b, m));
  318.                 }
  319.                 rastriginlista = new List<double>();
  320.                 for (int i = 0; i < odwzorowane.Count; i++)
  321.                 {
  322.                     rastriginlista.Add(rastrigin(odwzorowane[i], A, omega, n));
  323.                 }
  324.                 List<Tuple<double, string>> polaczone = new List<Tuple<double, string>>();
  325.                 for (int i = 0; i < wszystkie.Count; i++)
  326.                     polaczone.Add(new Tuple<double, String>(rastriginlista[i], wszystkie[i]));
  327.                 polaczone.Sort();
  328.                 polaczone.Reverse();
  329.                 Console.WriteLine("WSZYSTKIE:");
  330.                 for (int i = 0; i < polaczone.Count; i++)
  331.                     Console.WriteLine(polaczone[i]);
  332.                 koncowe = new List<String>();
  333.                 for(int i = 0; i < 10; i++)
  334.                 {
  335.                     koncowe.Add(polaczone[i].Item2);
  336.                 }
  337.                 odwzorowane = new List<double>();
  338.                 for (int i = 0; i < koncowe.Count; i++)
  339.                 {
  340.                     odwzorowane.Add(doprzedzialu(bintodec(koncowe[i]), a, b, m));
  341.                 }
  342.                 rastriginlista = new List<double>();
  343.                 for (int i = 0; i < odwzorowane.Count; i++)
  344.                 {
  345.                     rastriginlista.Add(rastrigin(odwzorowane[i], A, omega, n));
  346.                 }
  347.                 rastriginlista.Sort();
  348.                 polaczone = new List<Tuple<double, string>>();
  349.                 for (int i = 0; i < koncowe.Count; i++)
  350.                     polaczone.Add(new Tuple<double, String>(rastriginlista[i], koncowe[i]));
  351.                 polaczone.Sort();
  352.                 polaczone.Reverse();
  353.                 pierwszy = false;
  354.                 Console.WriteLine("WYNIK:");
  355.                 for (int i = 0; i < polaczone.Count; i++)
  356.                     Console.WriteLine(polaczone[i]);
  357.             }
  358.            
  359.             Console.ReadKey();
  360.         }
  361.     }
  362. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top