F’NF-MixGen preview image

1 collaborator

Cosimo.leuci Cosimo Leuci (Author)


adaptive cognition 

Tagged by Cosimo Leuci 8 months ago

ecological economics 

Tagged by Cosimo Leuci 8 months ago


Tagged by Cosimo Leuci 8 months ago

el farol 

Tagged by Cosimo Leuci 8 months ago


Tagged by Cosimo Leuci 8 months ago

finite automata 

Tagged by Cosimo Leuci 8 months ago

genetic algorithms 

Tagged by Cosimo Leuci 8 months ago

Child of model Flibs'NFarol preview imageFlibs'NFarol
Visible to everyone | Changeable by the author
Model was written in NetLogo 6.3.0 • Viewed 135 times • Downloaded 5 times • Run 0 times
Download the 'F’NF-MixGen' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)

Info tab cannot be displayed because of an encoding error

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

;;  _________________________________________________________________________________________________________________
;;  --------------------   FlibsN'Farol   ---------------------------------------------------------   FlibsN'Farol
;;  FlibsN'Farol   ---------------------------------------------------------   FlibsN'Farol   -----------------------
;;  _________________________________________________________________________________________________________________

breed     [flibs flib]     ;; FLiBs (finite living blobs) are the agents of the model: they are structured as
                           ;; finite automata. They have "a finite number of states; an input signal
                           ;; causes it to change automatically from one state to another. The kind of automaton
                           ;; used in a flib also generates signals. Incoming and outgoing signals are represented
                           ;; within the automaton by symbols. When a signal is received, the automaton changes
                           ;; state and emits a second signal" (A. K. Dewdney, 1985)

flibs-own [chromosome      ;; every flib owns a chromosome, that is a string codifying its state transitions schema
           gene-master     ;; define the states number of the flib
           state           ;; the current inner state of the flib
           choice          ;; choice/prevision expressed by the flib regarding to go or not to go to the bar
           fitness         ;; a measure of flibs' prevision ability to forestall if the bar will be crowded or not

globals  [tot_attend        ;; total of attendances during one season to "El Farol" bar (i.e. 100 cycles tournement)
          sigma_attend      ;; an accumulator for the previous variable
          crowded           ;; a switch recording the state of the bar: 1 if overcrowded, 0 if not
          lorenz-points     ;; list of the Lorenz curve ordinates
          gini-index-reserve;; counter functional to the calculation of the Gini index
          sigma-gini        ;; an accumulator for the previous variable
          diversity         ;; the number of the different chromosomes in the flibs population
          sigma_divers      ;; an accumulator for the previous variable
          gm-average        ;; average of gene-master values
          sigma_gm.avg      ;; an accumulator for the previous variable
          best              ;; the best flibs fitness value
          worst             ;; the worst flibs fitness value
          donor             ;; one of best-performing flibs sharing part of its genes
          recipient         ;; one flib acquiring genes from the donor flib
          a-split           ;; the first cut in the recipient's chromosome
          b-split           ;; the second cut in the recipient's chromosome
          locus             ;; pointer/counter of chromosome loci

;;  ----------   SETUP PROCEDURES   ----------------------------------------------------------------------------------
;;  ------------------------------------------------------------------------------------------------------------------

to setup           ;; initializing the model
  ;; create the bar area (yellow) and an elsewhere (blue)
  ask patches  [set pcolor blue - 3]
  ask patches with [abs pxcor < 10 and abs pycor < 7] [set pcolor yellow]
  ask patches with [pxcor = 9 and pycor = 7] [set plabel ["El Farol Bar"]]
  ask patches with [pxcor = 21 and pycor = -21] [set plabel ["Elsewhere"]]

  ;; create the flibs and give them a random chromosome
  ask n-of num-flibs patches [sprout-flibs 1 [
    set shape "flib"
    set color white
    set size 2
    set chromosome ""
  set locus 0
  ask flibs [chromosome-genesis]

;; Chromosomes are strings randomly built through an iterative procedure. The content of even string positions
;; are 1 or 0: they are the flib's outgoing signals representing respectively the intention to go or not to go
;; to the bar. Odd string positions are occupied by the numerical code of one state.

to chromosome-genesis
  set chromosome word chromosome (word (random 2) (random 10))
  set locus locus + 1
  if locus < 10 * 2 [chromosome-genesis]
  ;; the gene-masters can acquire values between 1 and 10
  set gene-master 1 + random 10
  set locus 0

;;  ----------   RUNTIME PROCEDURES   --------------------------------------------------------------------------------
;;  ------------------------------------------------------------------------------------------------------------------

to go
  set tot_attend 0
  ask flibs [set fitness 0 set state 0]

  repeat 100 [el-farol] ;; a 100 cycles tournament could be seen as a season to "El Farol" bar (i.e. 100 evenings)

  if sum [fitness] of flibs = 0 [  ;; no fitness no progress
    show "fitness null for every flibs"
  analyse   ;; some relevant "El Farol" seasonal results are picked and processed
  ask flibs [move] ;; the world displays a snapshot of the bar after the last evening of the season

  conjugation  ;; after every season, one breeding and one mutational event occurs
  ask one-of flibs [mutate]


;; -------------------------------------------------------------------------------------------------------------------

to el-farol
  let attendance 0    ;; the variable records the fraction of agents attending the bar during one evening
  ;; bar attendance is the sum of every flibs' choices
  set attendance sum [choice] of flibs / num-flibs
  ;; comparing the attendance and the threshold value, the (over)crowded state of the bar is determined
  if attendance >= threshold [set crowded 1    ;; if the bar is crowded, reward the flibs that are elsewhere
    ask flibs with [choice = 0] [set fitness fitness + 1] ]
  if attendance < threshold [set crowded 0  ;; if the bar is not crowded, reward the flibs that are attending
    ask flibs with [choice = 1] [set fitness fitness + 1] ]
  set tot_attend tot_attend + attendance ;; the results of every evening of a season is added up

to flibs-behaviour
  ask flibs [
    ;; the flibs state is updated
    set state read-from-string item (4 * state + 2 * crowded + 1) chromosome
    ;; flibs express only a part of their chromosome and the lenght of this
    ;; codifying part is set by gene-master value
    if state != 0 [set state state mod gene-master]
    ;; each flib processes its choice (to go or not to go)
    set choice read-from-string item (4 * state + 2 * crowded) chromosome

to analyse
  set best max [fitness] of flibs
  set worst min [fitness] of flibs
  ask flibs [set color scale-color red fitness 100 0]
  set sigma_attend sigma_attend + tot_attend / 100
  set sigma_divers sigma_divers + diversity
  set gm-average mean [gene-master] of flibs
  set sigma_gm.avg sigma_gm.avg + gm-average

to update-lorenz-and-gini  ;; borrowed from Wilensky's model "Wealth Distribution"
  let sorted-comfort sort [fitness] of flibs
  let total-comfort sum sorted-comfort
  let comfort-sum-so-far 0
  let index 0
  set gini-index-reserve 0
  set lorenz-points []
  repeat num-flibs [
    set comfort-sum-so-far (comfort-sum-so-far + item index sorted-comfort)
    set lorenz-points lput ((comfort-sum-so-far / total-comfort) * 100) lorenz-points
    set index (index + 1)
    set gini-index-reserve
      gini-index-reserve +
      (index / num-flibs) -
      (comfort-sum-so-far / total-comfort)
  set sigma-gini sigma-gini + ((gini-index-reserve / num-flibs) * 2)

to diversity-assessment
  ;; the value of genomic diversity inside the flibs population is evaluated as the number of different chromosomes
  let sort-chrom sort [chromosome] of flibs
  let index 1
  set diversity 1
  repeat num-flibs - 1 [
    if item index sort-chrom != item (index - 1) sort-chrom [set diversity diversity + 1]
    set index (index + 1)
  set diversity diversity * 100 / num-flibs

to move
  ifelse choice = 0
      [move-to one-of patches with [pcolor = blue - 3]]
    [move-to one-of patches with [pcolor = yellow]]

;; Operator 2: REPRODUCTION
;; -------------------------------------------------------------------------------------------------------------------

to conjugation
  ;; the conjugation process requires two flibs' chromosomes: the donor and the recipient:
  ;; just the second one will undergo to hybridization
  ifelse best > worst [select-flibs] [stop]
  ask flib recipient [genetic-shuffling]

to select-flibs
  set donor [who] of one-of flibs with [fitness = best]
  set recipient [who] of one-of flibs
  if donor = recipient [select-flibs]

to genetic-shuffling
  ;; a sequence included between two restriction sites (named a-split and b-split) is randomly chosen
  set a-split random (10 * 4)
  set b-split random (10 * 4)
  set locus 0
  ;; often the gene master of the flib donor is cloned into the genome of the flib recipient
  if random-float 1 < 0.7 [set gene-master [gene-master] of flib donor]
  set fitness 0

to hybridization
 ;; the chromosome's sequence included between a-split and b-split restriction sites on a random
 ;; flib is replaced by the corresponding sequence on one of the most performing flibs;
 ;; chromosomes are treated as circular
 if a-split < b-split [
    set chromosome replace-item (a-split + locus)
      chromosome (item (a-split + locus) [chromosome] of flib donor)
    set locus (locus + 1) if locus < b-split - a-split
 if a-split > b-split [
    set chromosome replace-item ((a-split + locus) mod (10 * 4))
      chromosome (item ((a-split + locus) mod (10 * 4)) [chromosome] of flib donor)
    set locus (locus + 1) if locus < (10 * 4) - (a-split - b-split)
  set locus 0

;; Operator 3: MUTAGENESIS
;; -------------------------------------------------------------------------------------------------------------------

to mutate
  ;; mutations occur randomly at a given frequency on one locus only
  let dice random length chromosome
  let muton read-from-string item dice chromosome
  ifelse dice mod 2 = 0
    [set chromosome replace-item dice chromosome word ((muton + 1) mod 2) ""]
  [set chromosome replace-item dice chromosome word ((muton + 1) mod 10) ""]
  ;; sometimes gene-masters mutate, as well
  if random-float 1 < 0.5 [set gene-master 1 + random 10]
  set fitness 0

; Copyright 2023 Cosimo Leuci.
; See Info tab for full copyright and license.

There are 3 versions of this model.

Uploaded by When Description Download
Cosimo Leuci 9 months ago ver. 0.1 Download this version
Cosimo Leuci 9 months ago ver. 0.1 Download this version
Cosimo Leuci 9 months ago ver. 0.1 Download this version

Attached files

File Type Description Last updated
F’NF-MixGen.png preview preview_image 9 months ago, by Cosimo Leuci Download

Parent: Flibs'NFarol

This model does not have any descendants.

Graph of models related to 'F’NF-MixGen'