# Genetic Algorithm code in ns2

Genetic Algorithm code in ns2 – Genetic algorithm is as also a special kind of stochastic search algorithms, genetic algorithm is also a problem solving method which is based on the concept of natural selection and genetics.

What is genetic algorithm?

## Functionalities of genetic algorithm:

• Population generation.
• Fitness function evaluation.
• Selection.
• Repair.
• Mutation.
• And also in Cross over.

### Fields of genetic algorithm:

• For routing.
• Also For providing network security.
• In neural network.
• Also In networking communication.
• Applications also in sensor network.
• Biological in also process etc.

#### Sample Genetic algorithm code in ns2

```puts [exec ps -C tclsh -orss,size] ;# XXX
package require gaul
puts "GAUL Library: [gaul version]\n"
puts [exec ps -C tclsh -orss,size] ;# XXX
proc genrand {max num} {
set result
for {set i 0} {\$i < \$num} {incr i} {
lappend result [expr { int(\$max * rand()) }]
}
return \$result
}
proc generation {name gen} {
puts "\nGeneration: \$gen\n"
# XXX puts [pop list]
}
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])]
}
#puts "Evaluate: \$result"
return \$result
}
proc seed {name entity} {
set seed [genrand 100 10]
#puts "Seed: \$seed"
return \$seed
}
proc adapt {name entity} { ;# XXX
return \$entity
}
proc mutate {name entity} {
#puts "Mutate: original: \$entity"
lset entity [genrand 10 1] [genrand 100 1]
#puts "Mutate: mutated:  \$entity"
return \$entity
}
proc crossover {name entity1 entity2} {
#puts "Crossover: Father: \$entity1"
#puts "Crossover: Mother: \$entity2"
set cross [genrand 10 1]
#puts "Crossover: cross: \$cross"
set child1 [concat [lrange \$entity1 0 \$cross-1] [lrange \$entity2 \$cross end]]
set child2 [concat [lrange \$entity2 0 \$cross-1] [lrange \$entity1 \$cross end]]
#puts "Crossover: Child1: \$child1"
#puts "Crossover: Child2: \$child2"
return
}
set goal [genrand 100 10]
puts [exec ps -C tclsh -orss,size] ;# XXX
gaul create pop 100 \
-generation_hook generation \
-evaluate evaluate \
-seed seed \
-mutate mutate \
-crossover crossover \
-select_one SUS \
-select_two SUS
puts [exec ps -C tclsh -orss,size] ;# XXX
pop params {*}[pop params]
pop seed
puts [pop evolve 50]
puts "Goal:     \$goal"
puts "Solution: [pop solution]"
# stats
# list
# rank
puts [exec ps -C tclsh -orss,size] ;# XXX
pop destroy
puts [exec ps -C tclsh -orss,size] ;# XXX
gaul create pop 100 \
-generation_hook generation \
-evaluate evaluate \
-seed seed \