# ANN Simulator Sandbox

Model was written in NetLogo 6.1.1
•
Viewed 224 times
•
Downloaded 14 times
•
Run 0 times

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

## Comments and Questions

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

Click to Run Model

;; Artificial Neural Network Sandbox ;; ;; by L. F. Bencivengo, Jr. December 14, 2020 globals [OutputA OutputB OutputC OutputI OutputII OutputIII Output1 Output2 Output3 started? auto_Input_Pattern input#] breed [Input_Neurons Input_Neuron] breed [Hidden_Neurons Hidden_Neuron] breed [Output_Neurons Output_Neuron] turtles-own [threshold weight1 weight2 weight3 activation output] directed-link-breed [axons-AI axon-AI] directed-link-breed [axons-BII axon-BII] directed-link-breed [axons-CIII axon-CIII] ;; BUTTONS: This section defines the function of each Interface Button to setup clear-all ;; turn off auto_Input_Pattern set auto_Input_Pattern FALSE set input# 0 ;; create neurons with current output = 0 set-default-shape Input_Neurons "square 2" set-default-shape Hidden_Neurons "triangle 2" set-default-shape Output_Neurons "circle 2" setup-Input_Neurons setup-Hidden_Neurons setup-Output_Neurons ;; create axons that connect each neuron in the network set-default-shape axons-AI "axon-ai-0" set-default-shape axons-BII "axon-bii-0" set-default-shape axons-CIII "axon-ciii-0" setup-synapses ;; clear the ticks to disable Input Buttons set started? FALSE clear-ticks end to go ;; if just starting, reset ticks and enable Input Buttons if not started? [reset-ticks reset-timer] set started? TRUE ;; read values of weights and thresholds from sliders update-weights ;; update the activation and output of each neuron in the network update-Hidden_Outputs update-Output_Outputs ;; update the display to show any changes in neurons' output update-display tick end to auto-Input_Pattern ;; if auto-input is clicked, run through the auto-input sequence ;; through repeated calls of update-Input_Pattern ;; Forever Button, Disabled until ticks start end to Input_A ;; change the current state of Input Neuron A ifelse OutputA = 0 [set OutputA 1] [set OutputA 0] ifelse OutputA = 0 [ask turtle 0 [set output 0]] [ask turtle 0 [set output 1]] stop end to Input_B ;; change the current state of Input Neuron B ifelse OutputB = 0 [set OutputB 1] [set OutputB 0] ifelse OutputB = 0 [ask turtle 1 [set output 0]] [ask turtle 1 [set output 1]] end to Input_C ;; change the current state of Input Neuron C ifelse OutputC = 0 [set OutputC 1] [set OutputC 0] ifelse OutputC = 0 [ask turtle 2 [set output 0]] [ask turtle 2 [set output 1]] end to reset_weights ;; reset the sliders for every neuron's weights and thresholds to the default value of 1 set weightIA 1 set weightIB 1 set weightIC 1 set thresholdI 1 set weightIIA 1 set weightIIB 1 set weightIIC 1 set thresholdII 1 set weightIIIA 1 set weightIIIB 1 set weightIIIC 1 set thresholdIII 1 set weight1I 1 set weight1II 1 set weight1III 1 set threshold1 1 set weight2I 1 set weight2II 1 set weight2III 1 set threshold2 1 set weight3I 1 set weight3II 1 set weight3III 1 set threshold3 1 end ;; PROCEDURES: This section defines the Procedures which control the model to setup-Input_Neurons ;; turtle 0 is Input Neuron A create-Input_Neurons 1 [ set shape "input neuron a - 0" set size 3 set color grey set xcor -8 set ycor 12] ;; turtle 1 is Input Neuron B create-Input_Neurons 1 [ set shape "input neuron b - 0" set size 3 set color grey set xcor 0 set ycor 12] ;; turtle 2 is Input Neuron C create-Input_Neurons 1 [ set shape "input neuron c - 0" set size 3 set color grey set xcor 8 set ycor 12] end to setup-Hidden_Neurons ;; turtle 3 is Hidden Neuron I create-Hidden_Neurons 1 [ set shape "hidden neuron i - 0" set size 3 set color grey set xcor -8 set ycor 0] ;; turtle 4 is Hidden Neuron II create-Hidden_Neurons 1 [ set shape "hidden neuron ii - 0" set size 3 set color grey set xcor 0 set ycor 0] ;; turtle 5 is Hidden Neuron III create-Hidden_Neurons 1 [ set shape "hidden neuron iii - 0" set size 3 set color grey set xcor 8 set ycor 0] end to setup-Output_Neurons ;; turtle 6 is Output Neuron 1 create-Output_Neurons 1 [ set shape "output neuron 1 - 0" set size 3 set color grey set xcor -8 set ycor -12] ;; turtle 7 is Output Neuron 2 create-Output_Neurons 1 [ set shape "output neuron 2 - 0" set size 3 set color grey set xcor 0 set ycor -12] ;; turtle 8 is Output Neuron 3 create-Output_Neurons 1 [ set shape "output neuron 3 - 0" set size 3 set color grey set xcor 8 set ycor -12] end to setup-synapses ;; create axons from each Input Neuron to each Hidden Neuron ask turtle 0 [create-axons-AI-to Hidden_Neurons] ask turtle 1 [create-axons-BII-to Hidden_Neurons] ask turtle 2 [create-axons-CIII-to Hidden_Neurons];; [set thickness 0.25 set color white]] ;; create axons from each Hidden Neuron to each Output Neuron ask turtle 3 [create-axons-AI-to Output_Neurons] ask turtle 4 [create-axons-BII-to Output_Neurons] ask turtle 5 [create-axons-CIII-to Output_Neurons] end to update-Input_Pattern ;; when auto_Input_Pattern = TRUE, runs through a sequence of input patterns ;; changing the pattern at a rate that depends upon the auto-Input_Rate slider value ifelse input# = 8 [set input# 1] [set input# input# + 1] (ifelse input# = 1 [ask turtle 0 [set output 0] ask turtle 1 [set output 0] ask turtle 2 [set output 0] set OutputA 0 set OutputB 0 set OutputC 0] input# = 2 [ask turtle 0 [set output 1] ask turtle 1 [set output 0] ask turtle 2 [set output 0] set OutputA 1 set OutputB 0 set OutputC 0] input# = 3 [ask turtle 0 [set output 0] ask turtle 1 [set output 1] ask turtle 2 [set output 0] set OutputA 0 set OutputB 1 set OutputC 0] input# = 4 [ask turtle 0 [set output 0] ask turtle 1 [set output 0] ask turtle 2 [set output 1] set OutputA 0 set OutputB 0 set OutputC 1] input# = 5 [ask turtle 0 [set output 1] ask turtle 1 [set output 1] ask turtle 2 [set output 0] set OutputA 1 set OutputB 1 set OutputC 0] input# = 6 [ask turtle 0 [set output 1] ask turtle 1 [set output 0] ask turtle 2 [set output 1] set OutputA 1 set OutputB 0 set OutputC 1] input# = 7 [ask turtle 0 [set output 0] ask turtle 1 [set output 1] ask turtle 2 [set output 1] set OutputA 0 set OutputB 1 set OutputC 1] input# = 8 [ask turtle 0 [set output 1] ask turtle 1 [set output 1] ask turtle 2 [set output 1] set OutputA 1 set OutputB 1 set OutputC 1] []) reset-timer end to update-weights ;; read weights from slider values: ;; Ex. "weight1" is a neuron variable while "weightIA" is the value read from a slider ;; update Hidden Neuron weights ask turtle 3 [set weight1 weightIA set weight2 weightIB set weight3 weightIC set threshold thresholdI] ask turtle 4 [set weight1 weightIIA set weight2 weightIIB set weight3 weightIIC set threshold thresholdII] ask turtle 5 [set weight1 weightIIIA set weight2 weightIIIB set weight3 weightIIIC set threshold thresholdIII] ;; update Output Neuron weights ask turtle 6 [set weight1 weight1I set weight2 weight1II set weight3 weight1III set threshold threshold1] ask turtle 7 [set weight1 weight2I set weight2 weight2II set weight3 weight2III set threshold threshold2] ask turtle 8 [set weight1 weight3I set weight2 weight3II set weight3 weight3III set threshold threshold3] end to update-Hidden_Outputs ;; multiply the value of each input to a Hidden Neuron by the weight of its synapse ;; compare the weighted sum to the threshold to determine the neuron's output (0 or 1) ask turtle 3 [ set activation (weight1 * OutputA + weight2 * OutputB + weight3 * OutputC) ifelse activation > threshold [set output 1] [set output 0] ifelse output = 1 [set OutputI 1] [set OutputI 0] ] ask turtle 4 [ set activation (weight1 * OutputA + weight2 * OutputB + weight3 * OutputC) ifelse activation > threshold [set output 1] [set output 0] ifelse output = 1 [set OutputII 1] [set OutputII 0] ] ask turtle 5 [ set activation (weight1 * OutputA + weight2 * OutputB + weight3 * OutputC) ifelse activation > threshold [set output 1] [set output 0] ifelse output = 1 [set OutputIII 1] [set OutputIII 0] ] end to update-Output_Outputs ;; multiply the value of each input to an Ouput Neuron by the weight of its synapse ;; compare the weighted sum to the threshold to determine the neuron's output (0 or 1) ask turtle 6 [ set activation (weight1 * OutputI + weight2 * OutputII + weight3 * OutputIII) ifelse activation > threshold [set output 1] [set output 0] ifelse output = 1 [set Output1 1] [set Output1 0] ] ask turtle 7 [ set activation (weight1 * OutputI + weight2 * OutputII + weight3 * OutputIII) ifelse activation > threshold [set output 1] [set output 0] ifelse output = 1 [set Output2 1] [set Output2 0] ] ask turtle 8 [ set activation (weight1 * OutputI + weight2 * OutputII + weight3 * OutputIII) ifelse activation > threshold [set output 1] [set output 0] ifelse output = 1 [set Output2 1] [set Output2 0] ] end to update-display ;; changes each neuron's shape and color to display whether its output is 0 or 1 ask turtle 0 [ ifelse output = 1 [set shape "input neuron a - 1" set color white ask my-out-links [set color white]] [set shape "input neuron a - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 1 [ ifelse output = 1 [set shape "input neuron b - 1" set color white ask my-out-links [set color white]] [set shape "input neuron b - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 2 [ ifelse output = 1 [set shape "input neuron c - 1" set color white ask my-out-links [set color white]] [set shape "input neuron c - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 3 [ ifelse output = 1 [set shape "hidden neuron i - 1" set color white ask my-out-links [set color white]] [set shape "hidden neuron i - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 4 [ ifelse output = 1 [set shape "hidden neuron ii - 1" set color white ask my-out-links [set color white]] [set shape "hidden neuron ii - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 5 [ ifelse output = 1 [set shape "hidden neuron iii - 1" set color white ask my-out-links [set color white]] [set shape "hidden neuron iii - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 6 [ ifelse output = 1 [set shape "output neuron 1 - 1" set color white ask my-out-links [set color white]] [set shape "output neuron 1 - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 7 [ ifelse output = 1 [set shape "output neuron 2 - 1" set color white ask my-out-links [set color white]] [set shape "output neuron 2 - 0" set color grey ask my-out-links [set color grey]] ] ask turtle 8 [ ifelse output = 1 [set shape "output neuron 3 - 1" set color white ask my-out-links [set color white]] [set shape "output neuron 3 - 0" set color grey ask my-out-links [set color grey]] ] end

There are 3 versions of this model.

## Attached files

File | Type | Description | Last updated | |
---|---|---|---|---|

ANN Simulator Sandbox.png | preview | preview image | almost 3 years ago, by Larry Bencivengo | Download |

ANN Simulator Sandbox.png | preview | Preview for 'ANN Simulator Sandbox' | almost 3 years ago, by Larry Bencivengo | Download |

This model does not have any ancestors.

This model does not have any descendants.