tcl−gaul − A Tcl extension for genetic (or evolutionary) algorithm processing |
package require gaul gaul create name size ?−generation_hook proc? ?−evaluate proc? ?−seed proc? ?−adapt proc? ?−mutate proc? ?−crossover proc? ?−select_one RANDOM | EVERY | RANDOMRANK | BESTOF2 | BESTOF3 | ROULETTE | ROULETTE_REBASED | SUS | SUSSQ | AGGRESSIVE | BEST | LINEARRANK | ROUNDROBIN? ?−select_two RANDOM | EVERY | RANDOMRANK | BESTOF2 | BESTOF3 | ROULETTE | ROULETTE_REBASED | SUS | SUSSQ | AGGRESSIVE | BEST | LINEARRANK? gaul version name seed name params name params ?−scheme darwin | lamarck_parents | lamarck_children | lamarck_all | baldwin_parents | baldwin_children | baldwin_all | lamarck_parents_baldwin_children | lamarck_children_baldwin_parents? ?−elitism parents | one_parent | parents_die | rescore_parents? ?−crossover num? ?−mutation num? ?−migration num? name evolve generations ?−mpi | −forked | −threaded | −steady_state? name solution name stats name list name rank name destroy rename name {} |
A genetic algorithm (GA) is a search technique used in computing to find exact or approximate solutions to optimization and search problems. Genetic algorithms are categorized as global search heuristics. They are a particular class of evolutionary algorithms that use techniques inspired by evolutionary biology such as inheritance, mutation, selection, and crossover. For an introduction to genetic algorithms visit: http://gaul.sourceforge.net/intro.html This extension enables genetic algorithm processing in Tcl. It is using the GAUL (Genetic Algorithm Utility Library) library underneath. GAUL is a flexible programming library designed to aid in the development of applications that use genetic algorithms. Additional stochastic algorithms are provided by the library for comparison to the genetic algorithms. Tcl−gaul supports: * Darwinian, Lamarckian or Baldwinian evolutionary schemes. * Both steady−state and generation−based GAs. * Includes most of the usual selection operators. * Custom seed, adapt, evaluation, crossover, and mutation operators. * Provision for custom termination criteria. * Display statistics and the population ranking. * Support for multiprocessor calculations on various architectures: * forks * MPI * OpenMP 2.0 * pthreads |
gaul create name size ?−generation_hook proc? ?−destroy proc? ?−evaluate proc? ?−seed proc? ?−adapt proc? ?−mutate proc? ?−crossover proc? ?−select_one RANDOM | EVERY | RANDOMRANK | BESTOF2 | BESTOF3 | ROULETTE | ROULETTE_REBASED | SUS | SUSSQ | AGGRESSIVE | BEST | LINEARRANK | ROUNDROBIN? ?−select_two RANDOM | EVERY | RANDOMRANK | BESTOF2 | BESTOF3 | ROULETTE | ROULETTE_REBASED | SUS | SUSSQ | AGGRESSIVE | BEST | LINEARRANK? |
Create a new population named name with size size (number of members). The −generation_hook, −destroy, −adapt, −evaluate, −seed, −mutate, and −crossover switches register callback Tcl procedures to be executed at certain events or times. The latter four callbacks should always be defined as they correspond to operators essential for the genetic algorithm to work. |
−generation_hook proc |
This procedure is executed at the end of each generation,
starting from 0. If it generates a Tcl error, the evolution
process terminates prematurely; thus, it can be used to
introduce custom termination criteria. |
−destroy proc |
This procedure is executed just before a member of the
population is deleted thanks to natural selection. It can be
used to clean−up memory/state associated with the
member by the Tcl script. |
−evaluate proc |
This procedure determines the fitness of each member of
the population. It must return a floating−point number
that indicates the fitness of the member. The higher this
number, the greater the fitness. |
−seed proc |
This procedure is called before the evolution starts in
order to initialize all the members of the population. It
must return the newly initialized member. |
−adapt proc |
This functionality is only available on Lamarckian and
Baldwinian evolutionary schemes. The specified procedure is
called for every member of the population in order to
"adapt" it before it is evaluated at the end of
the generation. |
−mutate proc |
This procedure is executed to mutate a single member. The
mutated member is expected to be returned. |
−crossover proc |
This procedure is invoked to mate/breed two members. A
list of two offsprings are expected to be returned by the
procedure. |
The −select_one type is used when selecting members for mutation, whereas the −select_two type is used in the crossover operator. Both switches accept one of a fixed number of selection operators: |
RANDOM |
Random selection of entities, irrespective of their fitnesses/ranks. |
|
EVERY |
Every entity (or combination of entities) will be systematically selected. The mutation and crossover ratios are ignored by these selection functions. |
RANDOMRANK |
Systematically select each entity in turn along with a random, more fit, entity. The select_one function doesn’t return the systematically selected entity. |
BESTOF2 |
Simple pairwise tournament selection. |
BESTOF3 |
Simple three−way tournament selection. |
ROULETTE |
Standard roulette wheel selection. |
ROULETTE_REBASED |
Standard roulette wheel selection. |
SUS |
Universal stochastic sampling. |
|||
SUSSQ |
Universal stochastic sampling. |
AGGRESSIVE |
Random selection, but heavily biased toward fit entities. |
BEST |
Select the single best entity only. The select_two function also selects a random entity. |
LINEARRANK |
Select an entity based on linear probability distribution with respect to rank. |
ROUNDROBIN |
Select entities using a round−robin algorithm. Each entity is selected in turn, returning to the first once the last entity has been selected. This option is not available to −select_two switch. |
The default value for both selection switches is SUS. gaul version |
Returns a Tcl dictionary describing the version of the underlying GAUL library. |
name seed |
Initialize the population. |
name params ?−scheme darwin | lamarck_parents | lamarck_children | lamarck_all | baldwin_parents | baldwin_children | baldwin_all | lamarck_parents_baldwin_children | lamarck_children_baldwin_parents? ?−elitism parents | one_parent | parents_die | rescore_parents? ?−crossover num? ?−mutation num? ?−migration num? |
Set population parameters. |
The −scheme switch sets the evolutionary scheme. The Darwinian scheme corresponds to the standard genetic algorithm, which only considers natural selection. On the other hand, the Baldwinian/Lamarckian schemes also consider the ability of each member to adapt (or improve on its own) giving higher survival chance to those members that can better adapt. In the Baldwinian scheme the members are adapted and their new form is re−evaluated. The greater the fitness of the adapted form, the higher the chances for its genes to appear in the next generation. However, the GA operators are performed on the previous/original form of the member (before the adaption). The Lamarckian scheme is like the Baldwinian, but the members retain the adapted form and the GA operators are perfomed on the adapted form. In particular, the acceptable values for this switch are: |
dawrin |
This corresponds to the standard GA. No adaption is performed/considered in this case. |
lamarck_parents |
Lamarckian evolution for parents only performed immediately after "birth". |
lamarck_children |
Lamarckian evolution for children only performed immediately after "birth". |
lamarck_all |
Lamarckian evolution for the entire population at every generation, not just the parents or children at the moment of "birth". This allow ongoing adaptation or learning, rather than just a single chance immediately after "birth". |
baldwin_parents |
Baldwinian evolution for parents only performed immediately after "birth". |
baldwin_children |
Baldwinian evolution for children only performed immediately after "birth". |
baldwin_all |
Baldwinian evolution for entire population. |
lamarck_parents_baldwin_children |
Lamarckian evolution for the parents and baldwinian for the children. |
lamarck_children_baldwin_parents |
Baldwinian evolution for the parents and lamarckian for the children. |
The −elitism switch sets the rules for the passage of parent individuals into subsequent generations. The meaning of the possible values is: |
parents |
All parents that rank sufficiently highly will pass to the next generation. |
one_parent |
The single fittest parent will pass to the next generation if it ranks sufficiently well. |
parents_die |
No parents pass to next generation, regardless of their fitness. |
rescore_parents |
All parents are re−evalutated, and those that subsequently rank sufficiently highly will pass to the next generation. |
The −mutation and −crossover switches set the propability that a mutation/crossover will occur on a member of the population on every generation. It must be a flowating point number from 0 to 1. The default is 0.1 for mutation and 0.9 for crossover. name params |
Get the current population parameters. |
name evolve generations ?−mpi | −forked | −threaded | −steady_state? |
Evolve the population up to a maximum generations generations. By default the evolution process is single−threaded, except if the underlying GAUL library is compiled with OpenMP enabled, in which case all GAUL code may, transparently, benefit without any further action by the user. Other supported models of parallelism are: MPI, process−based and thread−based. Some of these features might not be available, depending on compile−time options and system configuration. |
−mpi |
MPI−based parallel evolution. |
−forked |
The evolution is performed by multiple processes simultaneously. This option should be available on all installations. The MPI parallelism depends on the presense of an MPI library as well as compile−time options. |
−threaded |
The evolution is performed by multiple threads simultaneously. The thread−based parallelism requires the pthreads library in addition to compile−time options. |
−steady_state |
Not a parallel evolution, but a different type of single−threaded evolution. Consult GA literature for details. |
name solution |
Returns the best solution so far. |
name stats |
Returns a dictionary with some statistics on the current state of the population. The statistic variables returned concern the fitness of the members of the population. In particular: Max, min, mean, median, variance, stddev, kurtosis, and skew values are returned. |
name list |
Returns in a list all the members of the population. The members in the list are ordered from highest to lowest fitness. |
name rank |
Returns in a list all the members of the population along with their fitness. Every two items the list contains the member and its fitness. The touples in the list are ordered from highest to lowest fitness. |
name destroy |
Remove the Tcl command for the population and clean−up all data. |
package require gaul puts "GAUL Library: [gaul version]0 proc genrand {max num} { set result [list] for {set i 0} {$i < $num} {incr i} { lappend result [expr {int($max * rand())}] } return $result } proc generation {name gen} { puts "0eneration: $gen0 } proc evaluate {name entity} { global goal set result [expr {100 * 10}] for {set i 0} {$i < 10} {incr i} { incr result [expr {−1 * abs([lindex $goal $i] − [lindex $entity $i])}] } return $result } proc seed {name entity} { set seed [genrand 100 10] return $seed } proc adapt {name entity} { return $entity } proc mutate {name entity} { lset entity [genrand 10 1] [genrand 100 1] return $entity } proc crossover {name entity1 entity2} { set cross [genrand 10 1] set child1 [concat [lrange $entity1 0 $cross−1] [lrange $entity2 $cross end]] set child2 [concat [lrange $entity2 0 $cross−1] [lrange $entity1 $cross end]] return [list $child1 $child2] } set goal [genrand 100 10] gaul create pop 100 \ −generation_hook generation \ −evaluate evaluate \ −seed seed \ −adapt adapt \ −mutate mutate \ −crossover crossover \ −select_one SUS \ −select_two SUS pop params −scheme lamarck_all −elitism parents_die −crossover 0.900000 −mutation 0.100000 −migration 0.100000 puts "Params: [pop params]" pop seed pop evolve 50 puts "======================================" puts "Goal: $goal" puts "Solution: [pop solution]" puts "Stats: [pop stats]" foreach {member rank} [pop rank] { puts "$rank$member" } pop destroy |
GAUL Library: major 0 minor 1849 patch 0 Params: −scheme lamarck_all −elitism parents_die −crossover 0.900000 −mutation 0.100000 −migration 0.100000 Generation 0: max 459.0 min 858.0 mean 649.98 median 658.5 variance 5679.319600000001 stddev 75.3612606051677 kurtosis 2.9207406751029166 skew 0.09516601413315064 Generation 1: max 654.0 min 863.0 mean 718.05 median 758.5 variance 1911.0474999999997 stddev 43.71552927736321 kurtosis 3.447555360456811 skew 0.7457113187377609 Generation 2: max 721.0 min 863.0 mean 760.77 median 792.0 variance 958.8771000000008 stddev 30.965740746831827 kurtosis 3.5479228177699884 skew 1.0368299598773918 Generation 3: max 759.0 min 885.0 mean 796.46 median 822.0 variance 1041.248399999999 stddev 32.26838080846324 kurtosis 3.3547547068088783 skew 1.07936272652288 Generation 4: max 796.0 min 915.0 mean 832.68 median 855.5 variance 762.5776 stddev 27.614807621998743 kurtosis 2.464071072723989 skew 0.6233040613560461 Generation 5: max 837.0 min 927.0 mean 861.33 median 882.0 variance 420.64110000000005 stddev 20.509536806081215 kurtosis 3.7350366330506546 skew 1.0972795013828356 Generation 6: max 863.0 min 936.0 mean 883.77 median 899.5 variance 269.7771000000002 stddev 16.42489269371341 kurtosis 3.235576190024203 skew 0.8349488460692618 Generation 7: max 882.0 min 953.0 mean 904.28 median 917.5 variance 242.4216000000001 stddev 15.569894026614314 kurtosis 3.372569334160615 skew 0.8230657039857708 Generation 8: max 901.0 min 953.0 mean 919.96 median 927.0 variance 181.03839999999968 stddev 13.455051096149717 kurtosis 2.2203490148254645 skew 0.4183803332268127 Generation 9: max 916.0 min 955.0 mean 932.56 median 935.5 variance 119.70639999999972 stddev 10.941041997908595 kurtosis 1.9734838365261074 skew 0.2874963476168472 Generation 10: max 932.0 min 964.0 mean 942.43 median 948.0 variance 65.88509999999994 stddev 8.116963718041367 kurtosis 2.4111029335485736 skew 0.6031910542925711 Generation 11: max 941.0 min 966.0 mean 949.19 median 953.5 variance 34.03389999999985 stddev 5.833858071636629 kurtosis 2.714491942925497 skew 0.7130927841462207 Generation 12: max 947.0 min 970.0 mean 955.09 median 958.5 variance 29.401899999999976 stddev 5.422351888249229 kurtosis 2.581060627237597 skew 0.602974953285199 Generation 13: max 955.0 min 970.0 mean 960.18 median 962.5 variance 14.647599999999981 stddev 3.827218310992983 kurtosis 2.4330912354533085 skew 0.45602324853952114 Generation 14: max 960.0 min 972.0 mean 964.06 median 966.0 variance 7.756400000000011 stddev 2.7850314181351727 kurtosis 2.759806722189022 skew 0.5936367107187382 Generation 15: max 964.0 min 975.0 mean 966.74 median 969.5 variance 6.292399999999978 stddev 2.508465666498144 kurtosis 4.3377434740997085 skew 1.2687092157024076 Generation 16: max 966.0 min 975.0 mean 969.34 median 970.5 variance 4.764400000000006 stddev 2.182750558355216 kurtosis 2.168957992751751 skew 0.4558882135654201 Generation 17: max 969.0 min 978.0 mean 971.7 median 973.5 variance 4.810000000000002 stddev 2.1931712199461315 kurtosis 2.9941822519784425 skew 0.7883096919995383 Generation 18: max 971.0 min 981.0 mean 974.07 median 976.0 variance 5.665100000000012 stddev 2.380147054280473 kurtosis 3.3106484505887686 skew 0.9359389096522497 Generation 19: max 973.0 min 981.0 mean 976.18 median 977.0 variance 2.8676000000000106 stddev 1.693398948859958 kurtosis 2.4912911893537166 skew 0.507757137209828 Generation 20: max 976.0 min 985.0 mean 978.02 median 980.5 variance 2.599600000000013 stddev 1.612327510154191 kurtosis 5.735231935619675 skew 1.2988517997702596 Generation 21: max 978.0 min 985.0 mean 979.72 median 981.5 variance 3.2416000000000027 stddev 1.8004443895883047 kurtosis 3.9923302107157075 skew 1.2242124056152128 Generation 22: max 979.0 min 989.0 mean 981.29 median 984.0 variance 3.865899999999999 stddev 1.966189207578965 kurtosis 4.252390377418288 skew 1.115929036888462 Generation 23: max 981.0 min 989.0 mean 982.87 median 985.0 variance 2.673099999999995 stddev 1.6349617732534283 kurtosis 3.3251739098843442 skew 0.7309843660071947 Generation 24: max 982.0 min 989.0 mean 984.31 median 985.5 variance 2.0139000000000076 stddev 1.4191194452899332 kurtosis 6.01650999114932 skew 1.26918364749434 Generation 25: max 984.0 min 990.0 mean 985.39 median 987.0 variance 2.437900000000001 stddev 1.561377596867587 kurtosis 4.244307261727915 skew 1.5285340433089585 Generation 26: max 985.0 min 990.0 mean 986.64 median 987.5 variance 3.1503999999999945 stddev 1.7749366185867017 kurtosis 1.4379154188035574 skew 0.4344048849740332 Generation 27: max 986.0 min 990.0 mean 988.23 median 988.0 variance 1.5371000000000004 stddev 1.239798370703882 kurtosis 2.4959282384336783 skew −0.820050825576884 Generation 28: max 989.0 min 990.0 mean 989.17 median 989.5 variance 0.14109999999999986 stddev 0.3756327994198588 kurtosis 4.087172218285711 skew 1.7570350646148336 Generation 29: max 989.0 min 990.0 mean 989.35 median 989.5 variance 0.22750000000000042 stddev 0.4769696007084733 kurtosis 1.3956043956042758 skew 0.6289709020330089 Generation 30: max 989.0 min 990.0 mean 989.68 median 989.5 variance 0.21759999999999993 stddev 0.46647615158762396 kurtosis 1.595588235293787 skew −0.7717436331409684 Generation 31: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 32: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 33: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 34: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 35: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 36: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 37: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 38: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 39: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 40: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 41: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 42: max 990.0 min 990.0 mean 990.0 median 990.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN Generation 43: max 990.0 min 991.0 mean 990.01 median 990.5 variance 0.009899999999999949 stddev 0.09949874371066174 kurtosis 98.01010101010613 skew 9.849370589540596 Generation 44: max 990.0 min 991.0 mean 990.03 median 990.5 variance 0.029099999999999984 stddev 0.17058722109231975 kurtosis 31.364261168388403 skew 5.510377588549676 Generation 45: max 990.0 min 991.0 mean 990.07 median 990.5 variance 0.06510000000000021 stddev 0.2551470164434619 kurtosis 12.360983102915787 skew 3.370605747178756 Generation 46: max 990.0 min 991.0 mean 990.12 median 990.5 variance 0.10560000000000076 stddev 0.3249615361854396 kurtosis 6.469696969696751 skew 2.338738328607261 Generation 47: max 990.0 min 991.0 mean 990.2 median 990.5 variance 0.16000000000000048 stddev 0.4000000000000006 kurtosis 3.2499999999993037 skew 1.4999999999996432 Generation 48: max 990.0 min 991.0 mean 990.39 median 990.5 variance 0.23790000000000058 stddev 0.48774993593028854 kurtosis 1.2034468263976872 skew 0.451050802457683 Generation 49: max 990.0 min 991.0 mean 990.73 median 990.5 variance 0.19709999999999986 stddev 0.4439594576084621 kurtosis 2.073566717402508 skew −1.0361306468793359 Generation 50: max 991.0 min 991.0 mean 991.0 median 991.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN ====================================== Goal: 86 39 19 36 12 95 84 18 17 8 Solution: 86 39 21 39 11 94 84 18 16 9 Stats: max 991.0 min 991.0 mean 991.0 median 991.0 variance 0.0 stddev 0.0 kurtosis −NaN skew −NaN |
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 17 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
|||
991.0 |
86 39 21 39 11 94 84 18 16 9 |
Alexandros Stergiakis <sterg@kth.se> |
Copyright (C) 2008 Alexandros Stergiakis This program is free software: you can redistribute it
and/or This program is distributed in the hope that it will be
useful, You should have received a copy of the GNU General Public
License |