logo

Algorytmy genetyczne

Algorytmy genetyczne (GA) to adaptacyjne algorytmy wyszukiwania heurystycznego, które należą do większej części algorytmów ewolucyjnych. Algorytmy genetyczne opierają się na koncepcjach doboru naturalnego i genetyki. Są to inteligentne wykorzystanie losowych wyszukiwań zaopatrzonych w dane historyczne w celu skierowania wyszukiwania w obszar o lepszej wydajności w przestrzeni rozwiązań. Są one powszechnie używane do generowania wysokiej jakości rozwiązań problemów optymalizacyjnych i problemów wyszukiwania.

Algorytmy genetyczne symulują proces doboru naturalnego co oznacza, że ​​te gatunki, które potrafią przystosować się do zmian w swoim środowisku, mogą przetrwać, rozmnażać się i przejść do następnego pokolenia. Krótko mówiąc, symulują przetrwanie najlepiej przystosowanych osobników z kolejnych pokoleń, aby rozwiązać problem. Każde pokolenie składa się z populacji osobników a każda osoba reprezentuje punkt w przestrzeni poszukiwań i możliwe rozwiązanie. Każda jednostka jest reprezentowana jako ciąg znaków/liczb całkowitych/zmiennoprzecinkowych/bitów. Ten ciąg jest analogiczny do chromosomu.



Podstawy algorytmów genetycznych

Algorytmy genetyczne opierają się na analogii ze strukturą genetyczną i zachowaniem chromosomów populacji. Poniżej znajduje się podstawa GA oparta na tej analogii –

  1. Poszczególne osobniki w populacji konkurują o zasoby i łączą się w pary
  2. Te osobniki, które odniosły sukces (najsilniejsze), następnie łączą się w pary, tworząc więcej potomstwa niż inne
  3. Geny najlepiej przystosowanego rodzica rozprzestrzeniają się przez całe pokolenie, co oznacza, że ​​czasami rodzice tworzą potomstwo lepsze od któregokolwiek z rodziców.
  4. Zatem każde kolejne pokolenie jest bardziej dostosowane do swojego środowiska.

Przeszukaj przestrzeń

Populacja osobników utrzymywana jest w przestrzeni poszukiwań. Każda jednostka reprezentuje rozwiązanie w przestrzeni poszukiwań danego problemu. Każdy osobnik jest kodowany jako wektor składników o skończonej długości (analogicznie do chromosomu). Te zmienne składniki są analogiczne do genów. Zatem chromosom (osobnik) składa się z kilku genów (składników zmiennych).



Wynik sprawności

Wynik sprawnościowy jest przyznawany każdej osobie, która pokazuje zdolność jednostki do rywalizacji . Poszukiwane są osoby posiadające optymalny wynik sprawności (lub prawie optymalny).

GA utrzymuje populację n osobników (chromosomy/roztwory) wraz z ich wynikami sprawności. Osobniki posiadające lepsze wyniki sprawności mają większe szanse na reprodukcję niż inne. Wybierane są osobniki z lepszymi wynikami sprawności, które łączą się w pary i produkują lepsze potomstwo poprzez połączenie chromosomów rodziców. Wielkość populacji jest stała, dlatego należy stworzyć pomieszczenie dla nowo przybyłych. Tak więc niektóre osobniki umierają i zostają zastąpione przez nowo przybyłych, ostatecznie tworząc nowe pokolenie, gdy wyczerpane zostaną wszelkie możliwości krycia się starej populacji. Można mieć nadzieję, że w ciągu kolejnych pokoleń pojawią się lepsze rozwiązania, a najmniej sprawni będą umierać.

Każde nowe pokolenie ma średnio więcej lepszych genów niż osobnik (rozwiązanie) poprzednich pokoleń. Zatem każde nowe pokolenie ma lepiej rozwiązania częściowe niż poprzednie pokolenia. Gdy urodzone potomstwo nie różni się znacząco od potomstwa wyprodukowanego przez poprzednie populacje, populacja zostaje zbieżna. Mówi się, że algorytm jest zbieżny do zbioru rozwiązań problemu.



Operatory algorytmów genetycznych

Po utworzeniu początkowej generacji algorytm ewoluuje generację za pomocą następujących operatorów –
1) Operator wyboru: Chodzi o to, aby preferować osoby z dobrą kondycją i pozwolić im przekazywać swoje geny kolejnym pokoleniom.
2) Operator skrzyżowania: Oznacza to łączenie się osobników. Za pomocą operatora selekcji wybiera się dwie osoby, a miejsca krzyżowania wybiera się losowo. Następnie geny w tych miejscach krzyżowania ulegają wymianie, tworząc w ten sposób zupełnie nowego osobnika (potomstwo). Na przykład -

3) Operator mutacji: Kluczową ideą jest wprowadzenie losowych genów do potomstwa w celu utrzymania różnorodności w populacji i uniknięcia przedwczesnej konwergencji. Na przykład -

kodowanie Java, instrukcja if else

Cały algorytm można podsumować następująco:

1) Randomly initialize populations p 2) Determine fitness of population 3) Until convergence repeat:  a) Select parents from population  b) Crossover and generate new population  c) Perform mutation on new population  d) Calculate fitness for new population>

Przykładowy problem i rozwiązanie z wykorzystaniem algorytmów genetycznych

Biorąc pod uwagę ciąg docelowy, celem jest utworzenie ciągu docelowego, zaczynając od losowego ciągu o tej samej długości. W poniższej realizacji dokonano następujących analogii –

  • Znaki A-Z, a-z, 0-9 i inne symbole specjalne są uważane za geny
  • Ciąg wygenerowany przez te znaki jest uważany za chromosom/roztwór/osobnik

Wynik sprawności to liczba znaków różniących się od znaków w ciągu docelowym przy określonym indeksie. Zatem osoby o niższej wartości sprawności fizycznej mają większe preferencje.

gdzie znajdę ustawienia przeglądarki

C++




// C++ program to create target string, starting from> // random string using Genetic Algorithm> > #include> using> namespace> std;> > // Number of individuals in each generation> #define POPULATION_SIZE 100> > // Valid Genes> const> string GENES =>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP'>> 'QRSTUVWXYZ 1234567890, .-;:_!'#%&/()=?@${[]}'>;> > // Target string to be generated> const> string TARGET =>'I love techcodeview.com'>;> > // Function to generate random numbers in given range> int> random_num(>int> start,>int> end)> {> >int> range = (end-start)+1;> >int> random_int = start+(>rand>()%range);> >return> random_int;> }> > // Create random genes for mutation> char> mutated_genes()> {> >int> len = GENES.size();> >int> r = random_num(0, len-1);> >return> GENES[r];> }> > // create chromosome or string of genes> string create_gnome()> {> >int> len = TARGET.size();> >string gnome =>''>;> >for>(>int> i = 0;i gnome += mutated_genes(); return gnome; } // Class representing individual in population class Individual { public: string chromosome; int fitness; Individual(string chromosome); Individual mate(Individual parent2); int cal_fitness(); }; Individual::Individual(string chromosome) { this->chromosom = chromosom; kondycja = cal_fitness(); }; // Dokonaj krycia i spłodź nowe potomstwo Individual Individual::mate(Individual par2) { // chromosom dla potomstwa string child_chromosome = ''; int len ​​= chromosom.rozmiar(); for(int i = 0;i { // losowe prawdopodobieństwo float p = random_num(0, 100)/100; // jeśli prawdopodobieństwo jest mniejsze niż 0,45, wstaw gen // z rodzica 1 if(p<0.45) child_chromosome += chromosome[i]; // if prob is between 0.45 and 0.90, insert // gene from parent 2 else if(p <0.90) child_chromosome += par2.chromosome[i]; // otherwise insert random gene(mutate), // for maintaining diversity else child_chromosome += mutated_genes(); } // create new Individual(offspring) using // generated chromosome for offspring return Individual(child_chromosome); }; // Calculate fitness score, it is the number of // characters in string which differ from target // string. int Individual::cal_fitness() { int len = TARGET.size(); int fitness = 0; for(int i = 0;i { if(chromosome[i] != TARGET[i]) fitness++; } return fitness; }; // Overloading bool operator<(const Individual &ind1, const Individual &ind2) { return ind1.fitness } // Driver code int main() { srand((unsigned)(time(0))); // current generation int generation = 0; vector population; bool found = false; // create initial population for(int i = 0;i { string gnome = create_gnome(); population.push_back(Individual(gnome)); } while(! found) { // sort the population in increasing order of fitness score sort(population.begin(), population.end()); // if the individual having lowest fitness score ie. // 0 then we know that we have reached to the target // and break the loop if(population[0].fitness <= 0) { found = true; break; } // Otherwise generate new offsprings for new generation vector new_generation; // Perform Elitism, that mean 10% of fittest population // goes to the next generation int s = (10*POPULATION_SIZE)/100; for(int i = 0;i new_generation.push_back(population[i]); // From 50% of fittest population, Individuals // will mate to produce offspring s = (90*POPULATION_SIZE)/100; for(int i = 0;i { int len = population.size(); int r = random_num(0, 50); Individual parent1 = population[r]; r = random_num(0, 50); Individual parent2 = population[r]; Individual offspring = parent1.mate(parent2); new_generation.push_back(offspring); } population = new_generation; cout<< 'Generation: ' << generation << ' '; cout<< 'String: '<< population[0].chromosome <<' '; cout<< 'Fitness: '<< population[0].fitness << ' '; generation++; } cout<< 'Generation: ' << generation << ' '; cout<< 'String: '<< population[0].chromosome <<' '; cout<< 'Fitness: '<< population[0].fitness << ' '; }>

>

>

Jawa




katalog w poleceniach systemu Linux

import> java.util.ArrayList;> import> java.util.Collections;> import> java.util.List;> import> java.util.Random;> > public> class> GeneticAlgorithm {> >// Number of individuals in each generation> >private> static> final> int> POPULATION_SIZE =>100>;> > >// Valid Genes> >private> static> final> String GENES =>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ 1234567890, .-;:_!'#%&/()=?@${[]}'>;> > >// Target string to be generated> >private> static> final> String TARGET =>'I love techcodeview.com'>;> > >// Function to generate random numbers in given range> >private> static> int> randomNum(>int> start,>int> end) {> >Random rand =>new> Random();> >return> rand.nextInt(end - start +>1>) + start;> >}> > >// Create random genes for mutation> >private> static> char> mutatedGenes() {> >int> len = GENES.length();> >int> r = randomNum(>0>, len ->1>);> >return> GENES.charAt(r);> >}> > >// Create chromosome or string of genes> >private> static> String createGnome() {> >int> len = TARGET.length();> >StringBuilder gnome =>new> StringBuilder();> >for> (>int> i =>0>; i gnome.append(mutatedGenes()); return gnome.toString(); } // Class representing individual in population private static class Individual implements Comparable { String chromosome; int fitness; Individual(String chromosome) { this.chromosome = chromosome; fitness = calFitness(); } // Perform mating and produce new offspring Individual mate(Individual par2) { StringBuilder childChromosome = new StringBuilder(); int len = chromosome.length(); for (int i = 0; i // random probability float p = randomNum(0, 100) / 100f; // if prob is less than 0.45, insert gene from parent 1 if (p <0.45) childChromosome.append(chromosome.charAt(i)); // if prob is between 0.45 and 0.90, insert gene from parent 2 else if (p <0.90) childChromosome.append(par2.chromosome.charAt(i)); // otherwise insert random gene(mutate), for maintaining diversity else childChromosome.append(mutatedGenes()); } // create new Individual(offspring) using generated chromosome for offspring return new Individual(childChromosome.toString()); } // Calculate fitness score, it is the number of characters in string which differ from target string private int calFitness() { int len = TARGET.length(); int fitness = 0; for (int i = 0; i if (chromosome.charAt(i) != TARGET.charAt(i)) fitness++; } return fitness; } @Override public int compareTo(Individual o) { return Integer.compare(this.fitness, o.fitness); } } // Driver code public static void main(String[] args) { // current generation int generation = 0; List population = new ArrayList(); boolean found = false; // create initial population for (int i = 0; i String gnome = createGnome(); population.add(new Individual(gnome)); } while (!found) { // sort the population in increasing order of fitness score Collections.sort(population); // if the individual having lowest fitness score i.e. 0 then we know that we have reached to the target // and break the loop if (population.get(0).fitness <= 0) { found = true; break; } // Otherwise generate new offsprings for new generation List newGeneration = new ArrayList(); // Perform Elitism, that mean 10% of fittest population goes to the next generation int s = (10 * POPULATION_SIZE) / 100; for (int i = 0; i newGeneration.add(population.get(i)); // From 50% of fittest population, Individuals will mate to produce offspring s = (90 * POPULATION_SIZE) / 100; for (int i = 0; i int len = population.size(); int r = randomNum(0, 50); Individual parent1 = population.get(r); r = randomNum(0, 50); Individual parent2 = population.get(r); Individual offspring = parent1.mate(parent2); newGeneration.add(offspring); } population = newGeneration; System.out.print('Generation: ' + generation + ' '); System.out.print('String: ' + population.get(0).chromosome + ' '); System.out.println('Fitness: ' + population.get(0).fitness); generation++; } System.out.print('Generation: ' + generation + ' '); System.out.print('String: ' + population.get(0).chromosome + ' '); System.out.println('Fitness: ' + population.get(0).fitness); } }>

>

>

Python3




# Python3 program to create target string, starting from> # random string using Genetic Algorithm> > import> random> > # Number of individuals in each generation> POPULATION_SIZE>=> 100> > # Valid genes> GENES>=> '''abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP> QRSTUVWXYZ 1234567890, .-;:_!'#%&/()=?@${[]}'''> > # Target string to be generated> TARGET>=> 'I love techcodeview.com'> > class> Individual(>object>):> >'''> >Class representing individual in population> >'''> >def> __init__(>self>, chromosome):> >self>.chromosome>=> chromosome> >self>.fitness>=> self>.cal_fitness()> > >@classmethod> >def> mutated_genes(>self>):> >'''> >create random genes for mutation> >'''> >global> GENES> >gene>=> random.choice(GENES)> >return> gene> > >@classmethod> >def> create_gnome(>self>):> >'''> >create chromosome or string of genes> >'''> >global> TARGET> >gnome_len>=> len>(TARGET)> >return> [>self>.mutated_genes()>for> _>in> range>(gnome_len)]> > >def> mate(>self>, par2):> >'''> >Perform mating and produce new offspring> >'''> > ># chromosome for offspring> >child_chromosome>=> []> >for> gp1, gp2>in> zip>(>self>.chromosome, par2.chromosome):> > ># random probability> >prob>=> random.random()> > ># if prob is less than 0.45, insert gene> ># from parent 1> >if> prob <>0.45>:> >child_chromosome.append(gp1)> > ># if prob is between 0.45 and 0.90, insert> ># gene from parent 2> >elif> prob <>0.90>:> >child_chromosome.append(gp2)> > ># otherwise insert random gene(mutate),> ># for maintaining diversity> >else>:> >child_chromosome.append(>self>.mutated_genes())> > ># create new Individual(offspring) using> ># generated chromosome for offspring> >return> Individual(child_chromosome)> > >def> cal_fitness(>self>):> >'''> >Calculate fitness score, it is the number of> >characters in string which differ from target> >string.> >'''> >global> TARGET> >fitness>=> 0> >for> gs, gt>in> zip>(>self>.chromosome, TARGET):> >if> gs !>=> gt: fitness>+>=> 1> >return> fitness> > # Driver code> def> main():> >global> POPULATION_SIZE> > >#current generation> >generation>=> 1> > >found>=> False> >population>=> []> > ># create initial population> >for> _>in> range>(POPULATION_SIZE):> >gnome>=> Individual.create_gnome()> >population.append(Individual(gnome))> > >while> not> found:> > ># sort the population in increasing order of fitness score> >population>=> sorted>(population, key>=> lambda> x:x.fitness)> > ># if the individual having lowest fitness score ie.> ># 0 then we know that we have reached to the target> ># and break the loop> >if> population[>0>].fitness <>=> 0>:> >found>=> True> >break> > ># Otherwise generate new offsprings for new generation> >new_generation>=> []> > ># Perform Elitism, that mean 10% of fittest population> ># goes to the next generation> >s>=> int>((>10>*>POPULATION_SIZE)>/>100>)> >new_generation.extend(population[:s])> > ># From 50% of fittest population, Individuals> ># will mate to produce offspring> >s>=> int>((>90>*>POPULATION_SIZE)>/>100>)> >for> _>in> range>(s):> >parent1>=> random.choice(population[:>50>])> >parent2>=> random.choice(population[:>50>])> >child>=> parent1.mate(parent2)> >new_generation.append(child)> > >population>=> new_generation> > >print>(>'Generation: {} String: {} Fitness: {}'>.> >format>(generation,> >''.join(population[>0>].chromosome),> >population[>0>].fitness))> > >generation>+>=> 1> > > >print>(>'Generation: {} String: {} Fitness: {}'>.> >format>(generation,> >''.join(population[>0>].chromosome),> >population[>0>].fitness))> > if> __name__>=>=> '__main__'>:> >main()>

>

Kolejka priorytetowa Java
>

C#




using> System;> using> System.Collections.Generic;> using> System.Linq;> > public> class> GeneticAlgorithm> {> >// Number of individuals in each generation> >private> const> int> POPULATION_SIZE = 100;> > >// Valid Genes> >private> const> string> GENES =>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP'> +> >'QRSTUVWXYZ 1234567890, .-;:_!'#%&/()=?@${[]}'>;> > >// Target string to be generated> >private> const> string> TARGET =>'I love techcodeview.com'>;> > >private> static> readonly> Random random =>new> Random();> > >// Function to generate random numbers in given range> >private> static> int> RandomNum(>int> start,>int> end)> >{> >return> random.Next(start, end + 1);> >}> > >// Create random genes for mutation> >private> static> char> MutatedGenes()> >{> >int> len = GENES.Length;> >int> r = RandomNum(0, len - 1);> >return> GENES[r];> >}> > >// Create chromosome or string of genes> >private> static> string> CreateGnome()> >{> >int> len = TARGET.Length;> >char>[] gnome =>new> char>[len];> >for> (>int> i = 0; i { gnome[i] = MutatedGenes(); } return new string(gnome); } // Class representing individual in population private class Individual { public string Chromosome { get; } public int Fitness { get; } public Individual(string chromosome) { Chromosome = chromosome; Fitness = CalculateFitness(); } // Calculate fitness score, it is the number of // characters in string which differ from target string. private int CalculateFitness() { return Chromosome.Zip(TARGET, (a, b) =>a == b? 0 : 1).Suma(); } // Wykonaj krycie i spłodź nowe potomstwo public Individual Mate(Individual parent2) { char[] childChromosome = new char[Chromosome.Length]; for (int i = 0; i { double p = random.NextDouble(); if (s<0.45) childChromosome[i] = Chromosome[i]; else if (p <0.90) childChromosome[i] = parent2.Chromosome[i]; else childChromosome[i] = MutatedGenes(); } return new Individual(new string(childChromosome)); } } // Overloading private class FitnessComparer : IComparer { public int Compare(Individual ind1, Individual ind2) { return ind1.Fitness.CompareTo(ind2.Fitness); } } // Driver code public static void Main() { // current generation int generation = 0; List population = new List(); bool found = false; // create initial population for (int i = 0; i { string gnome = CreateGnome(); population.Add(new Individual(gnome)); } while (!found) { // sort the population in increasing order of fitness score population.Sort(new FitnessComparer()); // if the individual having lowest fitness score ie. // 0 then we know that we have reached the target // and break the loop if (population[0].Fitness == 0) { found = true; break; } // Otherwise generate new offsprings for new generation List newGeneration = new List(); // Perform Elitism, that means 10% of fittest population // goes to the next generation int s = (10 * POPULATION_SIZE) / 100; for (int i = 0; i newGeneration.Add(population[i]); // From 50% of fittest population, Individuals // will mate to produce offspring s = (90 * POPULATION_SIZE) / 100; for (int i = 0; i { int len = population.Count; int r = RandomNum(0, 50); Individual parent1 = population[r]; r = RandomNum(0, 50); Individual parent2 = population[r]; Individual offspring = parent1.Mate(parent2); newGeneration.Add(offspring); } population = newGeneration; Console.WriteLine('Generation: ' + generation + ' ' + 'String: ' + population[0].Chromosome + ' ' + 'Fitness: ' + population[0].Fitness); generation++; } Console.WriteLine('Generation: ' + generation + ' ' + 'String: ' + population[0].Chromosome + ' ' + 'Fitness: ' + population[0].Fitness); } }>

>

>

JavaScript




// Number of individuals in each generation> const POPULATION_SIZE = 100;> > // Valid Genes> const GENES =>'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP'> +> >'QRSTUVWXYZ 1234567890, .-;:_!'#%&/()=?@${[]}'>;> > // Target string to be generated> const TARGET =>'I love techcodeview.com'>;> > // Function to generate random numbers in given range> function> RandomNum(start, end) {> >return> Math.floor(Math.random() * (end - start + 1)) + start;> }> > // Create random genes for mutation> function> MutatedGenes() {> >let len = GENES.length;> >let r = RandomNum(0, len - 1);> >return> GENES.charAt(r);> }> > // Create chromosome or string of genes> function> CreateGnome() {> >let len = TARGET.length;> >let gnome =>''>;> >for> (let i = 0; i gnome += MutatedGenes(); } return gnome; } // Class representing individual in population class Individual { constructor(chromosome) { this.Chromosome = chromosome; this.Fitness = this.CalculateFitness(); } // Calculate fitness score, it is the number of // characters in string which differ from target string. CalculateFitness() { let fitness = 0; for (let i = 0; i FitnessComparer.Compare(a, b)); // jeśli osoba posiadająca najniższy wynik sprawności, tj. // 0 to wiemy, że osiągnęliśmy cel // i przerywamy pętlę if (population[0].Fitness === 0) { found = true; przerwa; } // W przeciwnym razie wygeneruj nowe potomstwo dla nowego pokolenia let newGeneration = []; // Wykonaj elitarność, co oznacza, że ​​10% najlepiej przystosowanej populacji // przechodzi do następnej generacji, let s = Math.floor((10 * POPULATION_SIZE) / 100); for (let i = 0; i newGeneration.push(population[i]); // Z 50% najsilniejszej populacji osobniki // łączą się w pary, tworząc potomstwo s = Math.floor((90 * POPULATION_SIZE) / 100); for (niech i = 0; i niech r = LosowaNum(0, 50); niech rodzic1 = populacja[r]; r = LosowaNum(0, 50); niech rodzic2 = populacja[r]; niech potomstwo = rodzic1.Mate( rodzic2); noweGeneracja.push(potomek); } populacja = noweGeneracja; console.log('Generacja: ' + pokolenie + ' ' + 'String: ' + populacja[0].Chromosom + ' ' + 'Sprawność: ' + populacja[0].Sprawność generacja++ } console.log('Generacja: ' + generacja + ' ' + 'String: ' + populacja[0].Chromosom + ' ' + 'Sprawność: ' + populacja[0].Sprawność); } // Wykonaj główną funkcję Main();

> 

Wyjście:

Generation: 1 String: tO{'-?=jH[k8=B4]Oe@} Fitness: 18 Generation: 2 String: tO{'-?=jH[k8=B4]Oe@} Fitness: 18 Generation: 3 String: .#lRWf9k_Ifslw #O$k_ Fitness: 17 Generation: 4 String: .-1Rq?9mHqk3Wo]3rek_ Fitness: 16 Generation: 5 String: .-1Rq?9mHqk3Wo]3rek_ Fitness: 16 Generation: 6 String: A#ldW) #lIkslw cVek) Fitness: 14 Generation: 7 String: A#ldW) #lIkslw cVek) Fitness: 14 Generation: 8 String: (, o x _x%Rs=, 6Peek3 Fitness: 13  .   .   .  Generation: 29 String: I lope Geeks#o, Geeks Fitness: 3 Generation: 30 String: I loMe GeeksfoBGeeks Fitness: 2 Generation: 31 String: I love Geeksfo0Geeks Fitness: 1 Generation: 32 String: I love Geeksfo0Geeks Fitness: 1 Generation: 33 String: I love Geeksfo0Geeks Fitness: 1 Generation: 34 String: I love techcodeview.com Fitness: 0>

Notatka: Algorytm za każdym razem zaczyna się od losowych ciągów, więc dane wyjściowe mogą się różnić

Jak widać z wyników, nasz algorytm czasami utknął w lokalnym optymalnym rozwiązaniu. Można to jeszcze ulepszyć, aktualizując algorytm obliczania wyniku sprawności lub modyfikując operatory mutacji i krzyżowania.

system plików w Linuksie

Dlaczego warto używać algorytmów genetycznych

  • Są wytrzymałe
  • Zapewnij optymalizację w przypadku dużego stanu kosmicznego.
  • W przeciwieństwie do tradycyjnej sztucznej inteligencji, nie psują się przy niewielkiej zmianie sygnału wejściowego lub obecności szumu

Zastosowanie algorytmów genetycznych

Algorytmy genetyczne mają wiele zastosowań, niektóre z nich to:

  • Rekurencyjna sieć neuronowa
  • Testowanie mutacji
  • Łamanie kodu
  • Filtrowanie i przetwarzanie sygnałów
  • Nauka bazy reguł rozmytych itp