1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 |
Gentech, A Genetic Algorithm SolverGit RepositoryThis project's canonical repositories is hosted on Gothel Software. OverviewThis genetic algorithm follows the natural process of meiosis, see our meiosis compilation (pdf). Also available is the ancient German documentation from 1994. Supported PlatformsC++17 and better. Building BinariesThe project requires make and g++ >= 8.3 for building. Installing build dependencies on Debian (11 or better):
For a generic build use:
The binaries shall reside within StatusThe following parts require a rewrite due to poor English as well as a review based on our findings regarding meiosis. Same goes for the implementation. However, the salvaged version from 1994 is working using C++17 on a GNU/Linux system. Related bugzilla entries are available. The Genetic AlgorithmThis genetic algorithm follows the natural process, see our compilation about meiosis (pdf). The Basic PrincipleNature defines and constructs lifeforms with its genome. The genome is coded by it's chromosomes. A chromosome is a chain of nucleotides, the elements of the chromosomes. In nature these nucleotides a represented with the following four bases: Adenine (A), Guanine (G), Cytosine (C) und Thymine (T). The different sequences of these nucleotides, bases, on the chromosome, does code the genome[2]. The nature optimizes it's lifeforms with different methods. One of these methods is the sexual reproduction, so called mating. While mating, the genome of the mating partners are mixed, this is called "crossing over" [1,2,3,6]. The result of the mix is the genome of the partners child(s). E.g.:
Besides the "normal" crossing over (homologous or symmetric crossing
over[2]), asymmetric crossing over exists[2]. Within the asymmetric
crossing over, at least in the version of this genetic algorythm, one
child contains the whole genome of both parents. During the reproduction process so called mutations are possible. This mutations modifies the sequence of chromosomes with the following possible ways:
On chromosomes the genome is stored. The logical whit (minimal part) of this genome is called gene. The gene represents a segment of a chromosome, but the definition of this noun is not that sharp since this documentation was written in March 1994. A chromosome, e.g. with a length of 10 000 bases, contains not only usable (useful) information. So useless information is also within the chromosomes. The chromosome's genes are often fractional. The segments of genes/chromosomes with useful information are called exons[2]. The segments of genes/chromosomes with useless/junk information are called introns[2]. The fractional genes/chromosomes are spliced (splicing[2]), before they are transferred and used for the working process, e.g. the production of protein. The results of splicing is the useful meaning information, non fractional extrons. So the working process receives just the (you can call this compressed) useful information. Using this generation process, the nature is able to create new life forces (creatures). With or without purpose, well, this is a philosophical or theological matter. The natural environment defines the viability of it's creatures. Darwin's thesis says, that only the best of a population can prevail, so called "Survival of the Fittest". This natural selection prefers consequently the best of a generation. These "best" are able to reproduce itself more often (than the "worse"), so they can take care of a better condition of it's progeny. The next generation is thus more optimized as its predecessor (may be). So it is possible, that a population creates it's next optimized version. This natural evolution principle, describes with crossing over(symmetrical and asymmetrical), mutations, splicing and selection, is the role model for this genetic algorithm. Well, I think that I can think, so it may works ;-) Implemented Genetic AlgorithmUnder the terms of the natural principle of evolution a problem should be solved. The following steps are necessary:
This look will be terminated, if the chosen target fitness is reached, or is a chosen number of non optimized generations in a row. The selection (2) of the parents occurs with the roulette system. The better individuals receives higher probability as the worse individuals of the generation. The probability, that parents are composed outta individuals with a better fitness is most probably. But it is not impossible, that parents are composed outta individuals, which fitness may be worse at the current time. Herewith it is avoided, that currently questionable worse solutions are rejected.[1,3,4,6] The decease within the population can be regulated in two ways. One way is to create a complete new generation[4], which replaces the parents generation. in this case, the birth rate equals one. The other way is to use a lower birth rate, e.g. 0.6. In this case 60 percent new individuals are created, whereby their parents must die. Because bigamously relationships are allowed for both methods, after the decease of the parents as much individuals with a worse fitness must die, as the population's maximum is not exceeded. Implementation DetailsThis natural analoge principle is declared in the file gentech.h, and defined in the file gentech.cpp. The class 'Chromosom' contains the nukleotides of one chromosome, the methods for splicing and mutations besides others. For details, please have a look at the file gentech.h. The class 'Chromosomen' (many chromosomes -> population) contains the methods for selection, crossing over and the whole evolution process. The fitness method within the class 'Chromosomen' is a virtual one. The user, who want's to define the problem, must define this one regarding his problem. It must return a normal floating value within [0..1]. The Encoding of the Problem'How do I encode the problem within the chromosomes' ? Is the basic question, and it's answer the problem's solution. For example: In the river-problem (see 1.3.1 below), the combination of the boat crew must be encoded. The encoding is implemented to expose only valid crew combinations. In this case, one nucleotide has the following range of values within [0..4]:
An encoded (solution) chromosome of this kind, supplies the alternating boat crew from shore-a to shore b and vice versa. The implementations of the game itself is contained within the files 'RIVER.[H|CPP]' using the class 'RiverGame'. The chromosomes encoding of this game is contained within the files
Example ApplicationsThe RiverproblemThe riverproblem is that monks and canibals must cross the river in an way, so that the canibal number is never greater as the monk number on both riversides - except only canibals exist on one riverside. The boat is able to transport up to two persons, but one person as the minimum. The Traveler-Salesman problemThe salesman-problem is that the salesman must travel to many towns in an way, so that he takes the shortest way. The difference to the river-problem (see river.gen) is that the solution is not clear ... meaning that the shortest way is unknown. ConclusionWe wish you fun in solving problems following the methods of natural reproduction ;-) ChangesSee Changes. Bibliographie
|