En genetisk algoritme er en heuristisk søgealgoritme , der bruges til at løse optimerings- og modelleringsproblemer ved tilfældig udvælgelse, kombination og variation af de ønskede parametre ved hjælp af mekanismer, der ligner naturlig udvælgelse i naturen. Det er en form for evolutionær beregning , der løser optimeringsproblemer ved hjælp af naturlige evolutionsmetoder såsom nedarvning , mutation , selektion og overkrydsning . Et karakteristisk træk ved den genetiske algoritme er vægten på brugen af "krydsnings"-operatoren, som udfører operationen med rekombination af kandidatløsninger, hvis rolle svarer til rollen som krydsning i naturen.
Det første arbejde med simulering af evolution blev udført i 1954 af Nils Baricelli på en computer installeret på Institute for Advanced Study ved Princeton University. [1] [2] Hans værk, udgivet samme år, tiltrak bred offentlig opmærksomhed. Siden 1957 [3] har den australske genetiker Alex Fraser udgivet en række artikler, der simulerer kunstig selektion blandt organismer med flere kontroller for målbare egenskaber. Denne banebrydende gjorde det muligt for computersimulering af evolutionære processer og metoderne beskrevet i bøgerne af Fraser og Barnell (1970) [4] og Crosby (1973) [5] at blive en mere almindelig aktivitet blandt biologer fra 1960'erne. Frasers simuleringer omfattede alle de væsentlige elementer i moderne genetiske algoritmer. Ud over dette udgav Hans-Joachim Bremermann en række artikler i 1960'erne, der også tog tilgangen til at bruge en beslutningspopulation underlagt rekombination, mutation og selektion i optimeringsproblemer. Bremermanns forskning omfattede også elementer af moderne genetiske algoritmer. [6] Andre pionerer inkluderer Richard Friedberg, George Friedman og Michael Conrad. Mange tidlige værker er blevet genudgivet af David B. Vogel (1998). [7]
Selvom Baricelli i sit papir fra 1963 simulerede en maskines evne til at spille et simpelt spil, [8] blev kunstig evolution en accepteret optimeringsteknik efter Ingo Rechenbergs og Hans-Paul Schwefels arbejde i 1960'erne og begyndelsen af 1970'erne af det tyvende. århundrede - Rechenbergs gruppe var i stand til at løse komplekse tekniske problemer i henhold til evolutionsstrategier . [9] [10] [11] [12] En anden tilgang var Lawrence J. Vogels evolutionære programmeringsteknik , som blev foreslået for at skabe kunstig intelligens. Evolutionær programmering brugte oprindeligt statsmaskiner til at forudsige omstændigheder, og mangfoldighed og udvælgelse til at optimere forudsigelseslogikken. Genetiske algoritmer blev særligt populære takket være John Hollands arbejde i begyndelsen af 70'erne og hans bog Adaptation in Natural and Artificial Systems (1975) [13] . Vogels forskning var baseret på Hollands eksperimenter med cellulære automater og hans (Hollands) skrifter skrevet ved University of Michigan . Holland introducerede en formaliseret tilgang til at forudsige kvaliteten af den næste generation, kendt som Scheme Theorem . Forskning i genetiske algoritmer forblev stort set teoretisk indtil midten af 1980'erne, hvor den første internationale konference om genetiske algoritmer endelig blev afholdt i Pittsburgh, Pennsylvania (USA) .
Med væksten i forskningsinteressen er stationære computeres regnekraft også vokset markant, hvilket gjorde det muligt at bruge ny computerteknologi i praksis. I slutningen af 80'erne begyndte General Electric at sælge verdens første genetiske algoritmeprodukt. De blev til et sæt industrielle computerværktøjer. I 1989, et andet selskab, Axcelis, Inc. udgav Evolver , verdens første kommercielle genetiske algoritmeprodukt til stationære computere. New York Times teknologijournalist John Markoff skrev [ 14] om Evolver i 1990.
Problemet er formaliseret på en sådan måde, at dets løsning kan kodes som en vektor (" genotype ") af gener, hvor hvert gen kan være en bit , et tal eller et andet objekt. I klassiske implementeringer af den genetiske algoritme (GA) antages det, at genotypen har en fast længde. Der er dog variationer af GA, der er fri for denne begrænsning.
På en eller anden, sædvanligvis tilfældig måde, skabes mange genotyper af den oprindelige population. De evalueres ved hjælp af en " fitness-funktion ", hvor en bestemt værdi ("fitness") er knyttet til hver genotype, som bestemmer, hvor godt den fænotype , der beskrives af den, løser problemet.
Når du vælger en " fitness- funktion " (eller fitness-funktion i den engelske litteratur), er det vigtigt at sikre, at dens "relief" er "glat".
Fra det resulterende sæt af løsninger ("generationer"), under hensyntagen til værdien af "fitness", vælges løsninger (normalt har de bedste individer større sandsynlighed for at blive valgt), som "genetiske operatører" anvendes på (i de fleste tilfælde tilfælde, " crossover " - crossover og " mutation " - mutation ), hvilket resulterer i nye løsninger. For dem beregnes også konditionsværdien, og derefter foretages udvælgelsen (“selektion”) af de bedste løsninger til næste generation.
Dette sæt handlinger gentages iterativt og modellerer således en "evolutionær proces", der varer adskillige livscyklusser ( generationer ), indtil algoritmens stopkriterium er opfyldt. Dette kriterium kan være:
Genetiske algoritmer tjener hovedsageligt til at søge efter løsninger i multidimensionelle søgerum.
Således kan de følgende stadier af den genetiske algoritme skelnes:
Før det første trin skal du tilfældigt oprette en indledende population; selvom det viser sig at være fuldstændig ukonkurrencedygtigt, er det sandsynligt, at den genetiske algoritme stadig hurtigt vil overføre det til en levedygtig population. I det første trin kan man således ikke specielt forsøge at gøre individer for fit, det er nok, at de svarer til formatet af individer i befolkningen, og fitnessfunktionen kan beregnes på dem. Resultatet af det første trin er populationen H, bestående af N individer.
På udvælgelsesstadiet er det nødvendigt at udvælge en vis andel af hele befolkningen, der vil forblive "i live" på dette evolutionstrin. Der er forskellige måder at vælge på. Overlevelsessandsynligheden for et individ h skal afhænge af fitnessfunktionsværdien Fitness(h). Selve overlevelsesraten s er normalt en parameter for den genetiske algoritme, og den er ganske enkelt givet på forhånd. Som et resultat af selektion skal der ud af N individer af population H forblive sN-individer, som vil blive inkluderet i den endelige population H'. Resten af individerne dør.
Reproduktion i genetiske algoritmer kræver flere forældre, normalt to, for at producere afkom.
Der er flere forældrevalgsoperatører:
Indavl og udavl kommer i to former: fænotypisk og genotypisk. I tilfælde af den fænotypiske form måles lighed afhængigt af værdien af fitnessfunktionen (jo tættere værdierne af den objektive funktion er, jo mere ens individerne), og i tilfælde af den genotypiske form måles lighed. afhængigt af repræsentationen af genotypen (jo færre forskelle mellem individernes genotyper, jo mere ens individerne).
Reproduktion i forskellige algoritmer er defineret forskelligt - det afhænger selvfølgelig af datarepræsentationen. Hovedkravet for reproduktion er, at afkommet eller afkommet har mulighed for at arve begge forældres egenskaber ved at "blande" dem på en eller anden måde.
Hvorfor er individer til reproduktion normalt udvalgt fra hele populationen H, og ikke fra de elementer af H', der overlevede på det første trin (selvom sidstnævnte mulighed også har ret til at eksistere)? Faktum er, at den største ulempe ved mange genetiske algoritmer er manglen på mangfoldighed hos individer. Ret hurtigt skiller en enkelt genotype sig ud, som er et lokalt maksimum, og så mister alle elementer i befolkningen selektion til den, og hele populationen "tilstoppes" med kopier af dette individ. Der er forskellige måder at håndtere sådan en uønsket effekt på; en af dem er valget til reproduktion af ikke de mest tilpassede, men generelt alle individer. Denne tilgang tvinger os imidlertid til at gemme alle allerede eksisterende individer, hvilket øger problemets beregningsmæssige kompleksitet. Derfor bruges metoder til at udvælge individer til krydsning ofte på en sådan måde, at ikke kun de mest tilpassede, men også andre individer med dårlig kondition "formeres". Med denne tilgang øges mutationers rolle for genotypens mangfoldighed.
Det samme gælder mutationer som for reproduktion: der er en vis andel af mutanter m, som er en parameter for den genetiske algoritme, og ved mutationstrinnet skal du udvælge mN-individer og derefter ændre dem i overensstemmelse med foruddefinerede mutationsoperationer .
Der er flere grunde til kritik af brugen af en genetisk algoritme i sammenligning med andre optimeringsmetoder:
Der er mange skeptikere omkring gennemførligheden af at bruge genetiske algoritmer. For eksempel skriver Steven S. Skiena, professor i computerteknik ved Stony Brook University, en velkendt forsker i algoritmer, vinder af IEEE Institute Award [17] :
Jeg er personligt aldrig stødt på et eneste problem, hvor genetiske algoritmer ville være det bedst egnede værktøj. Desuden er jeg aldrig stødt på resultater af beregninger opnået gennem genetiske algoritmer, som ville gøre et positivt indtryk på mig.
Genetiske algoritmer bruges til at løse følgende problemer:
Søg i et-dimensionelt rum, uden at krydse.
#include <cstdlib> #include <ctime> #include <algoritme> #include <iostream> #inkluder <nummer> int main () { srand (( usigneret int ) tid ( NULL )); const size_t N = 1000 ; int a [ N ] = { 0 }; for ( ; ; ) { //mutation til den tilfældige side af hvert element: for ( størrelse_ti = 0 ; i < N ; ++ i ) _ a [ i ] += (( rand () % 2 == 1 ) 5 1 : -1 ); //Vælg nu den bedste, sorteret i stigende rækkefølge std :: sort ( a , a + N ); //og så vil de bedste være i anden halvdel af arrayet. //kopier det bedste til første halvdel, hvor de efterlod afkom, og de første døde: std :: kopi ( a + N / 2 , a + N , a ); //kig nu på befolkningens gennemsnitlige tilstand. Som du kan se, bliver det bedre og bedre. std :: cout << std :: akkumulere ( a , a + N , 0 ) / N << std :: endl ; } }Søg i et-dimensionelt rum med sandsynlighed for overlevelse, uden at krydse. (testet på Delphi XE)
program Program1 ; {$APPTYPE CONSOLE} {$R *.res} bruger System . generiske lægemidler . Standarder , System . generiske lægemidler . Samlinger , System . Sysutils ; const N = 1000 ; Nh = N div2 ; _ MaxPopulation = Høj ( heltal ) ; var A : array [ 1..N ] af heltal ; _ _ I , R , C , Points , Fødselsrate : Heltal ; Iptr : ^ Heltal ; begynde Randomize ; // Delvis population for I := 1 til N do A [ I ] := Tilfældig ( 2 ) ; gentag // Mutation for I := 1 til N do A [ I ] := A [ I ] + ( - Tilfældig ( 2 ) eller 1 ) ; // Udvælgelse, de bedste i slutningen af TArray . Sort < Heltal > ( A , TComparer < Heltal >. Standard ) ; // Forudindstillet Iptr := Addr ( A [ Nh + 1 ] ) ; Point := 0 ; Fødselsrate := 0 ; // Crossover-resultater for I := 1 til Nh do begin Inc ( Points , Iptr ^ ) ; // Tilfældig crossover succes R := Tilfældig ( 2 ) ; Inc ( Fødselsrate , R ) ; A [ I ] := Iptr ^ * R ; Iptr ^ := 0 ; Inc ( Iptr , 1 ) ; ende ; // Subtotal Inc ( C ) ; indtil ( Punkter / N >= 1 ) eller ( C >= MaxPopulation ) ; Writeln ( Format ( 'Population %d (rate:%f) score:%f' , [ C , BirthRate / Nh , Points / N ])) ; ende .Ordbøger og encyklopædier | ||||
---|---|---|---|---|
|
Optimeringsmetoder _ | |
---|---|
Endimensionel |
|
Nul orden | |
Første ordre | |
anden orden | |
Stokastisk | |
Lineære programmeringsmetoder _ | |
Ikke-lineære programmeringsmetoder |
Machine learning og data mining | |
---|---|
Opgaver | |
At lære med en lærer | |
klyngeanalyse | |
Dimensionalitetsreduktion | |
Strukturel prognose | |
Anomali detektion | |
Grafer sandsynlighedsmodeller | |
Neurale netværk | |
Forstærkende læring |
|
Teori | |
Tidsskrifter og konferencer |
|