⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ga---binaryga.nlogo

📁 NETLOGO
💻 NLOGO
📖 第 1 页 / 共 2 页
字号:
globals [ target ;the target genome
          step 
          census 
          fitlist ;the fitness list made from the agents
          seed-genomes ;the genomes to be assigned to the next generation
          fledgling ;genome product of recombination
          chosen-size 
          best-fitness 
          match
          best-genome
          avg-fitness ]
turtles-own [genome
             fitness ]
to setup
    ca
    clear-output
    ask patch-at 0 0 [set pcolor blue] ;sets center 'target' patch
    set seed-genomes []
    set best-genome 0
    set match 0
    create-target
    ask turtles [die]
    crt population-size
    ask turtles [ ;create genomes of appropriate size
        set genome list (random 2) (random 2)
        repeat target-size - 2 [
            set genome lput (random 2) genome
        ]
    ]
end

to evolve
    compare-genomes ;calculates distance from target genome
    display
    ask turtles [
        jump fitness - target-size ;move distance from target
        
    ] 
    do-plots 
    no-display
    wait 0.05
    set fitlist sort fitlist ;puts fitnesses in order
    set seed-genomes []
    mate-recombine ;takes best animals and creates new genomes
    ask turtles [die]
    mutate ; adds mutations to new generation
    rebirth ; gives genomes to new generation
end

to mate-recombine
    locals [ fst ]
    set fst 0
    set best-fitness max fitlist 
    set avg-fitness mean values-from turtles [fitness]
    while [ length seed-genomes < population-size / 2 ] [ ;takes best 1/2 of genomes 
        ask turtles [
                if (fitness = max fitlist) ;finds best current genome
                [ if (length seed-genomes > population-size / 2) [stop] ;when half of population is full, then cull remainder
                ifelse (fst = 0 ) ; if your good, let'em know it
                  [ set seed-genomes lput genome seed-genomes 
                    set best-genome genome 
                    set fst 1] ; add genome to seed-genomes
                  [ set seed-genomes lput genome seed-genomes ]
                  die ] ]; die after adding genome, so it won't be chosen again
                set fitlist but-last fitlist ] ; go deeper away from high fitness if half of population-seed is not filled
    set chosen-size length seed-genomes ; will only allow mating between chosen ones of previous generation (not their offspring)
    while [length seed-genomes < population-size] ;fill genome pool with recombined products of chosen matings
       [ 
        make-fledgling ;recombine genomes of those who mate
        set seed-genomes lput fledgling seed-genomes ;add recombined genomes to pool
       ]      
end
        
to make-fledgling
    locals [husband
            wife
            choice 
            bit ]
    set fledgling []
    set husband item ( random chosen-size ) seed-genomes ;assigns random genome to husband
    set wife husband ;sets wife to husband, to get into while statement below
    ifelse (item 0 seed-genomes = item 1 seed-genomes) []
    [
    while [wife = husband ]
        [
        set wife item ( random length seed-genomes ) seed-genomes
        ] ;gives wife a new genome
    ]
    set bit 0
    repeat target-size [ ;randomly chooses each gene from parent's genomes
        set choice random 2 ;choose wife/husband gene to add
        ifelse (choice = 1) 
            [ set fledgling lput item bit wife fledgling ]  ;add wife's gene
            [ set fledgling lput item bit husband fledgling ]  ;add husband's gene
        set bit bit + 1
    ]
end


        

to mutate
    locals [genome-m
            bit-m 
            switch]
    set genome-m 0
    set bit-m 0
    repeat length seed-genomes [ ; scan all genomes
        set bit-m 0
        repeat target-size [ ; scan all genes
            if (random 1000 < mutation-rate * 1000 )  ; change bit if mutation rate threshold is met
            [ set switch item bit-m item genome-m seed-genomes
            ifelse (switch = 1)
            [ set seed-genomes (replace-item genome-m seed-genomes
                                    (replace-item bit-m (item genome-m seed-genomes) 0 )) ]
            [ set seed-genomes (replace-item genome-m seed-genomes
                                    (replace-item bit-m (item genome-m seed-genomes) 1 )) ]
            ]
        set bit-m bit-m + 1 ;moves to next bit
        ]
    set genome-m genome-m + 1 ; moves to next genome
    ]
end

to rebirth
    cct population-size [
      set genome item 0 seed-genomes
      set seed-genomes butfirst seed-genomes
    ]
   ; locals [next-contestant]
   ;; set next-contestant 0
;crt population-size
   ; repeat population-size [
    ;    ask turtle next-contestant [ ;assigns each new genome
    ;        set genome item next-contestant seed-genomes
    ;    ]
    ;    set next-contestant next-contestant + 1
   ; ]
end
    
to compare-genomes
    set census 0
    repeat population-size [
        ask turtle census [
            set step 0
            set fitness 0
            repeat target-size [ ;goes through genome 
                if ( step < target-size + 1 ) [
                    if ( item step genome = item step target) ;compares genomes
                        [set fitness fitness + 1 ]
                set step step + 1
                ]
            ]
        ]
    set census census + 1
    ]
    set fitlist values-from turtles [fitness] ;makes list of fitness values
    set step 0
end

to create-target ;generates target genome
     set target list (random 2) (random 2)
     repeat target-size - 2 [
         set target lput (random 2) target
         ]
end

to do-plots
    set-current-plot "Best-Fitness"
        plot best-fitness
    set-current-plot "Average Fitness"
        plot avg-fitness
end
@#$#@#$#@
GRAPHICS-WINDOW
365
10
769
414
50
50
4.0
1
10
0
0

CC-WINDOW
637
417
768
538
Command Center

BUTTON
6
126
105
174
NIL
setup
NIL
1
T
OBSERVER

BUTTON
109
126
214
174
NIL
evolve
T
1
T
OBSERVER

SLIDER
7
11
356
44
target-size
target-size
2
60
60
1
1
NIL

MONITOR
6
418
633
467
NIL
target
3
1

SLIDER
7
50
357
83
population-size
population-size
0
100
83
1
1
NIL

SLIDER
7
89
356
122
mutation-rate
mutation-rate
0
1
0.042
0.0010
1
NIL

MONITOR
217
126
287
175
NIL
best-fitness
0
1

MONITOR
6
479
632
528
best genome so far
best-genome
3
1

PLOT
5

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -