graphics - How to optimize the code to make the setup faster -


i facing problem in terms of setup time. have created model patches highlighted using following code:

ask patches [set pcolor scale-color gray proportion 0 max-value ]  

i have switch purpose when true following:

ask patches [ if switch? [set pcolor [color] of closest-turtle ]] 

every time press setup/go buttons in interface slow. thought might due complexity of model , checked doesn't seem case. it's being more due switch , removed switch , went below setup still causing delay

ask patches [ set pcolor [color] of closest-turtle ] 

is there way around this. have save model, close , open again every-time make change.

thanks in advance, appreciate help!!

below complete code:

breed [ parties party ]  globals [   total-votes   max-voteshare   largest-party   ]  parties-own [   my-size   my-old-size   my-rule   my-benefit   my-benefit-chen   ]  patches-own [   votes     vote-share   closest-party   closest-party-dist   nearest-neighbors   nearest-neighbors-dist   b   farthest-party   farthest-party-dist   b-c   f   h   votes-with-benefit   ]  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  setup   clear-all   reset-ticks   create-voters   setup-parties   update-support   ;update-voter-totals   setup-plot  end  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  create-voters   ask patches [              let x1 (pxcor - pop1-econ-mean) / sd-pop1       let y1 (pycor - pop1-soc-mean) / sd-pop1            ;;set votes (voter-population / 2) * (red-size) * exp (-0.5 * ( x1 ^ 2 + y1 ^ 2)) / (2 * pi * sd-red ^ 2)       set votes ( (pop1) * exp (-0.5 * ( x1 ^ 2 + y1 ^ 2)) / (2 * pi * sd-pop1 ^ 2) )        let x2 (pxcor - pop2-econ-mean) / sd-pop2       let y2 (pycor - pop2-soc-mean) / sd-pop2            ;set votes (votes) + (voter-population / 2) * (blue-size) * exp (-0.5 * ( x2 ^ 2 + y2 ^ 2)) / (2 * pi * sd-blue ^ 2) ]       set votes ((votes) + ( (pop2) * exp (-0.5 * ( x2 ^ 2 + y2 ^ 2)) / (2 * pi * sd-pop2 ^ 2) ))        set votes-with-benefit votes   ]    set total-votes sum [ votes-with-benefit ] of patches    print (word "max votes @ 1 point = " precision (max[votes] of patches) 2)   print (word "min vote @ 1 point = " precision (min[votes] of patches) 2)   print (word "max votes @ 1 point = " precision (max[votes-with-benefit] of patches) 2)   print (word "min vote @ 1 point = " precision (min[votes-with-benefit] of patches) 2)   print (word "total votes = " round(total-votes))         ask patches [set vote-share (votes-with-benefit / total-votes)]    set max-voteshare (max[vote-share] of patches)    ask patches [set pcolor scale-color gray vote-share 0 max-voteshare ]   end  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  setup-parties   create-parties 1 [set color red set label-color red set label + 1 set size 3 setxy party1-left-right party1-lib-con ]   create-parties 1 [set color green set label-color red set label + 1 set size 3 setxy party2-left-right party2-lib-con ]   if num-of-parties >= 3   [ create-parties 1 [set color blue set label-color red set label + 1 set size 3 setxy party3-left-right party3-lib-con ] ]   if num-of-parties >= 4   [ create-parties 1 [set color orange set label-color red set label + 1 set size 3 setxy party4-left-right party4-lib-con ] ]   if num-of-parties >= 5   [  create-parties 1 [set color brown set label-color red set label + 1 set size 3 setxy party5-left-right party5-lib-con ] ]   if num-of-parties >= 6   [ create-parties 1 [set color yellow set label-color red set label + 1 set size 3 setxy party6-left-right party6-lib-con ] ]   if num-of-parties >= 7   [ create-parties 1 [set color lime set label-color red set label + 1 set size 3 setxy party7-left-right party7-lib-con ] ]   if num-of-parties >= 8   [ create-parties 1 [set color turquoise set label-color red set label "8" set size 3 setxy party8-left-right party8-lib-con ] ]   if num-of-parties >= 9   [ create-parties 1 [set color cyan set label-color red set label + 1 set size 3 setxy party9-left-right party9-lib-con ] ]   if num-of-parties >= 10   [ create-parties 1 [set color magenta set label-color red set label + 1 set size 3 setxy party10-left-right party10-lib-con ] ]    ask parties [ update-rule set my-old-size 1 set shape "default" set heading random-float 360]  end  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  update-support    ask patches [ set closest-party min-one-of parties [distance myself]                 set closest-party-dist [distance myself] of closest-party                 set farthest-party max-one-of parties [distance myself]                 set farthest-party-dist [distance myself] of farthest-party     set f ( -1 / ([my-old-size] of closest-party / total-votes) ) * (closest-party-dist + 0.0000000001)   set h ([my-old-size] of farthest-party / total-votes) * (farthest-party-dist ^ 2)    set b-c (f + h)    ]    ask parties [set my-size sum [votes-with-benefit] of patches [closest-party = myself]     set my-benefit mean[b] of patches [closest-party = myself]     set my-benefit-chen mean[b-c] of patches [closest-party = myself]   ]    ask patches [votes-with-benefit > 0.001] [ ifelse (b-c <= threshold)      [ set votes-with-benefit 0 set pcolor black ]     [set votes-with-benefit votes        set pcolor [color] of min-one-of parties [distance myself]       ]      ]      set largest-party max-one-of parties [my-size]    ;ask patches [votes-with-benefit >= 0.001] [ set pcolor [color] of closest-party ]    ;ask patches [ set pcolor [color] of closest-party ]    ;ask patches [set pcolor [color] of min-one-of turtles [distance myself]]  end   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; update-rule   ask turtle 0 [set my-rule party1-rule ]   ask turtle 1 [set my-rule party2-rule ]   if num-of-parties >= 3     [ ask turtle 2 [set my-rule party3-rule ] ]     if num-of-parties >= 4     [ ask turtle 3 [set my-rule party4-rule ] ]     if num-of-parties >= 5     [ ask turtle 4 [set my-rule party5-rule ] ]     if num-of-parties >= 6     [ ask turtle 5 [set my-rule party6-rule ] ]     if num-of-parties >= 7     [ ask turtle 6 [set my-rule party7-rule ] ]     if num-of-parties >= 8     [ ask turtle 7 [set my-rule party8-rule ] ]     if num-of-parties >= 9     [ ask turtle 8 [set my-rule party9-rule ] ]     if num-of-parties >= 10     [ ask turtle 9 [set my-rule party10-rule ] ]  end   ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  adapt   if (my-rule = "hunter") [hunt]   if (my-rule = "aggregator") [aggregate]   if (my-rule = "predator") [prey]  end   hunt                    ifelse (my-size > my-old-size) [jump 1] [set heading heading + 90 + random-float 180 jump 1]   ;set my-old-size my-size   end  aggregate    if (my-size > 0)     [      set xcor (sum [votes * pxcor] of patches [closest-party = myself] / my-size)      set ycor (sum [votes * pycor] of patches [closest-party = myself] / my-size)    ] end  prey   if (my-size < [my-size] of largest-party) [face largest-party jump 1] end  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  intermediate-steps   ask parties [adapt]    update-support   ask turtles [ set my-old-size my-size]  end  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  setup-plot     set-current-plot "voter turnout"     ;set-current-plot "voter benefit"     set-current-plot "distribution of benefit across voters" end  update-turnout-plot   set-current-plot "voter turnout"   set-current-plot-pen "party1"    plot 100 * [my-size] of turtle 0 / total-votes   set-current-plot-pen "party2"   plot 100 * [my-size] of turtle 1 / total-votes   if num-of-parties >= 3 [ set-current-plot-pen "party3"   plot 100 * [my-size] of turtle 2 / total-votes ]   if num-of-parties >= 4 [ set-current-plot-pen "party4"   plot 100 * [my-size] of turtle 3 / total-votes ]   if num-of-parties >= 5 [set-current-plot-pen "party5"   plot 100 * [my-size] of turtle 4 / total-votes]   if num-of-parties >= 6 [set-current-plot-pen "party6"   plot 100 * [my-size] of turtle 5 / total-votes]   if num-of-parties >= 7 [set-current-plot-pen "party7"   plot 100 * [my-size] of turtle 6 / total-votes]   if num-of-parties >= 8 [set-current-plot-pen "party8"   plot 100 * [my-size] of turtle 7 / total-votes]   if num-of-parties >= 9 [set-current-plot-pen "party9"   plot 100 * [my-size] of turtle 8 / total-votes]   if num-of-parties >= 10 [set-current-plot-pen "party10"   plot 100 * [my-size] of turtle 9 / total-votes]  end  update-b-chen   set-current-plot "distribution of benefit across voters"   set-current-plot-pen "patches"   histogram [b-c] of patches end   go   intermediate-steps   update-turnout-plot   update-b-chen    tick  end 

this bit after fact but, in addition comments posted, switch code bit inefficient , optimized.

ask patches [ if switch? [set pcolor [color] of closest-turtle ]] 

this tells every patch check if switch on, make decision. more efficient way code be:

if switch? true [ask patches[set pcolor [color] of closest-turtle]] 

this tells observer check switch once (instead of once per patch) tell patches stuff. not full efficiency issue, part of it


Comments

Popular posts from this blog

authentication - Mongodb revoke acccess to connect test database -

r - Update two sets of radiobuttons reactively - shiny -

ios - Realm over CoreData should I use NSFetchedResultController or a Dictionary? -