Content-Type: text/enriched
Text-Width: 70

/**


A hybrid generative and predictive model of the motor cortex
Cornelius Weber, Stefan Wermter and Mark Elshaw

Neural Networks, 19 (4), 339-353 (2006)



Usage:

- Create a directory for the files:

  mkdir /tmp/coco

- Run the program:

  ./cococo -file v/CortexDocking

- View the resulting files:

  ./look a w 4 5 6 7

  (In look.tcl, the variable UNAME must be: /tmp/coco

   Note that "look.tcl" only works after the files have been created, i.e. after start of "cococo"!)

**/


global {

 iter         0

 areas        10

 mult         1


 <x-color><param>blue</param>d           "/tmp/coco"</x-color>

}



all {

 d_a          0

 d_b          0

}



<x-color><param>DimGrey</param>/**area 4: place cells**/</x-color>

area 4 {

set numang    <x-color><param>firebrick</param>7</x-color>          <x-color><param>DimGrey</param>/**num_angle (don't put a space before the "set"!)**/</x-color>

 d_a          <x-color><param>firebrick</param>112</x-color>        <x-color><param>DimGrey</param>/**16 * num_angle**/</x-color>

 d_b          24

}


<x-color><param>DimGrey</param>/**area 5: critic -- holds value function**/</x-color>

area 5 {

 d_a          1
 d_b          1
}


<x-color><param>DimGrey</param>/**area 7: real world coordinates -- x,y,phi**/</x-color>

area 7 {

 d_a          3
 d_b          1
}


<x-color><param>DimGrey</param>/**area 6: actor -- steers the agent into N E S W**/</x-color>

area 6 {

 d_a          1
 d_b          4
}


<x-color><param>DimGrey</param>/**area 3: the perceived Gaussian in NON-blown-up coordinates**/</x-color>

area 3 {

 d_a          16

 d_b          24

}


<x-color><param>DimGrey</param>/**area 8: phi as Gaussian -- HD cells -- angle input for the cortex**/</x-color>

area 8 {

 d_a          7

 d_b          1

}


<x-color><param>DimGrey</param>/**area 9: motor cortex -- its input is (i) the perceived location from area 3, (ii) the angle from area 9 and (iii) the motor output from area 6**/</x-color>

area 9 {

 d_a          16

 d_b          16

}




<x-color><param>DimGrey</param>/**Actor-Critic**/</x-color>

set iterWreinforce   1000000       <x-color><param>DimGrey</param>/**1000000**/</x-color>

<x-color><param>DarkGreen</param>set importWreinforce 0


</x-color><x-color><param>DimGrey</param>/**Helmholtz Machine**/</x-color>

set iterWbu          200000        <x-color><param>DimGrey</param>/**200000**/</x-color><x-color><param>DarkGreen</param>

set importWbu        0</x-color>

<x-color><param>DarkGreen</param>set epsWbu           0.01

set dectimesepsWbu   0.00015


</x-color><x-color><param>DimGrey</param>/**Lateral Predictive Weights**/</x-color>

set iterV            100000       <x-color><param>DimGrey</param>/**100000**/</x-color>

<x-color><param>DarkGreen</param>set importV          0</x-color>

<x-color><param>DarkGreen</param>set epsV             0.01

set dectimesepsV     0.00001

</x-color>


series (1) {

 if (<x-color><param>DarkGreen</param>$importWreinforce</x-color> = 0)

 sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; alltime) {

  <x-color><param>DarkGreen</param>5(n) {N,w; weight_list_alloc_full; 4    ;   ; -0.01+0.01}</x-color> <x-color><param>DimGrey</param>/**critic weights**/</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,w; weight_list_alloc_full; 4    ;   ; -0.01+0.01}</x-color> <x-color><param>DimGrey</param>/**actor weights**/</x-color>

 }

 if (<x-color><param>DarkGreen</param>$importWreinforce</x-color> = 1)

 sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; alltime) {

  <x-color><param>DarkGreen</param>5(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 4;   ;    }</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 4;   ;    }</x-color>

 }


 sw (0; 1; order) {

  5(o){R; local_const       ; ,   ; ,   ; 1.0 } <x-color><param>DimGrey</param>/**so that total_init_coord chooses a new position**/</x-color>


  9(o){O; local_const       ; ,   ; ,   ; 0.0 }              <x-color><param>DimGrey</param>/**    init   **/</x-color>

  3(o){O; local_const       ; ,   ; ,   ; 0.0 }              <x-color><param>DimGrey</param>/**    the    **/</x-color>

  6(o){O; local_const       ; ,   ; ,   ; 0.0 }              <x-color><param>DimGrey</param>/**    old    **/</x-color>

  8(o){O; local_const       ; ,   ; ,   ; 0.0 }              <x-color><param>DimGrey</param>/**activations**/</x-color>

 }

}



set sigma  1.5

set sigang 0.5

set maxang 0.78539816  <x-color><param>DimGrey</param>/**PI/4**/</x-color>

set gamma  0.9



<x-color><param>DimGrey</param>/**training of the reinforcement module to perform the docking**/</x-color>

<x-color><param>DimGrey</param>/**</x-color><x-color><param>saddle brown</param>total_init_coord</x-color><x-color><param>DimGrey</param> places the agent to a new starting position whenever R!=0, i.e. when a reward is given or when agent out of boundaries (set by </x-color><x-color><param>saddle brown</param>feed_dock_reward</x-color><x-color><param>DimGrey</param>).**/</x-color>

<x-color><param>DimGrey</param>/**The agent coordinates are traced on area 7, from which the input on other areas can be computed.**/</x-color>

series ($iterWreinforce) {


 sw (0; 1; order) {

  7(o){P  ; local_copy      ; ,   ; Q,  ;      } <x-color><param>DimGrey</param>/****/</x-color>

  7(t){P  ; <x-color><param>saddle brown</param>total_init_coord</x-color>; 5   ; R   ;16+24, <x-color><param>red</param>50</x-color>, 0.0} <x-color><param>DimGrey</param>/**init random new (x,y,phi), if R != 0, else leave as is <<- make sure orange visible; set phi = 0 for simplicity!**/</x-color>

  4(t){P  ; <x-color><param>saddle brown</param>total_angl_coord</x-color>; 7   ;     ;$sigma+$sigang,$numang+$maxang} <x-color><param>DimGrey</param>/**compute the perceived orange**/</x-color>

  5(o){K,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed; 4   ; P   ;      } <x-color><param>DimGrey</param>/**Eq.2:  critic activation at time t**/</x-color>

        

  6(o){N,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed; 4   ; P   ;      } <x-color><param>DimGrey</param>/**Eq. before 9: actor inner activation**/</x-color>
  6(t){M  ; <x-color><param>saddle brown</param>total_rand_winner</x-color>;    ; N   ;      } <x-color><param>DimGrey</param>/**Eq.9:  choose action stochastically**/</x-color>
  <x-color><param>DeepSkyBlue2</param>6(t){M  ; total_winner    ;     ; N   ; 1, 1.0}</x-color>


  7(t){Q  ; <x-color><param>saddle brown</param>total_move_coord</x-color>; 6+7 ; M+P ; 0.9+0.1} <x-color><param>DimGrey</param>/**old position P and action M (q_00~velocity,q_01~angularvelocity) -> new position Q**/</x-color>
  4(t){Q  ; <x-color><param>saddle brown</param>total_angl_coord</x-color>; 7   ;     ;$sigma+$sigang,$numang+$maxang} <x-color><param>DimGrey</param>/**compute the perceived orange**/</x-color>

  5(o){R  ; <x-color><param>saddle brown</param>feed_dock_reward</x-color>; 4,7 ; Q,Q ;15+11,$numang+16+24,2+0,-0.3,<underline>8.0</underline>} <x-color><param>DimGrey</param>/**set reward R=1 at target pos q_00+q_01, and R = q_30 at boundary; </x-color><underline>0.0</underline><x-color><param>DimGrey</param> for nicer presentation**/</x-color>


  5(o){L,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed; 4   ; Q   ;      } <x-color><param>DimGrey</param>/**Eq.2:  critic activation at time t+1             **/</x-color>
  5(o){L  ; local_mult_const; ,   ; ,   ;$gamma} <x-color><param>DimGrey</param>/**Eq.7:  discount factor gamma                     \    compute **/</x-color>
  5(o){T  ; local_sub       ; ,   ; L, K;      } <x-color><param>DimGrey</param>/**Eq.7:  difference critic act at t+1 minus at t    |   delta   **/</x-color>
  5(o){T  ; local_sum       ; ,   ; R,  ;      } <x-color><param>DimGrey</param>/**Eq.7:  add reward                                /            **/</x-color>

  6(t){T  ; total_spread_xy ; 5   ;     ; 2    } <x-color><param>DimGrey</param>/**                      delta on all action units  **/</x-color>
  6(o){O  ; local_mult      ; ,   ; T, M;      } <x-color><param>DimGrey</param>/**Eq.10: delta * g_j    delta on active action unit**/</x-color>

  <x-color><param>DarkGreen</param>5(o){N,w; weight_list_hebb; 5, 4; T, P; 0.1  }</x-color> <x-color><param>DimGrey</param>/**Eq.8:  delta * f_i(p_t)                          **/</x-color><x-color><param>DarkGreen</param>
  6(o){N,w; weight_list_hebb; 6, 4; O, P; 0.1  }</x-color> <x-color><param>DimGrey</param>/**Eq.10: (delta*g_j) * f_i(p_t)                    **/</x-color>


  <x-color><param>red</param>4(t){R; total_pause     ;     ;     ;  0  } /**in ms**/</x-color>

 }


 if (iter % 100)

 sw (0; 1; alltime) {

  4(o){P,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  4(o){Q,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  5(o){R,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  5(o){L,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  6(o){N,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  6(o){M,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  7(o){P,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  7(o){Q,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  <x-color><param>DarkGreen</param>6(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 4;    ;      }</x-color>

  <x-color><param>DarkGreen</param>5(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 4;    ;      }</x-color>

 }

}






series (1) {

 if (<x-color><param>DarkGreen</param>$importWbu</x-color> = 0)

 sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; alltime) {

  <x-color><param>DarkGreen</param>3(n) {N,w; weight_list_alloc_full; 9    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,w; weight_list_alloc_full; 9    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>8(n) {N,w; weight_list_alloc_full; 9    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,w; weight_list_alloc_full; 3    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,w; weight_list_alloc_full; 6    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,w; weight_list_alloc_full; 8    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

 }

 if (<x-color><param>DarkGreen</param>$importWbu</x-color> = 1)

 sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; alltime) {

  <x-color><param>DarkGreen</param>3(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 9;   ;    }</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 9;   ;    }</x-color>

  <x-color><param>DarkGreen</param>8(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 9;   ;    }</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 3;   ;    }</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 6;   ;    }</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 8;   ;    }</x-color>

 }

}


<x-color><param>DimGrey</param>/**training of the motor cortex (only HM, i.e. BU/TD, not lateral yet)**/</x-color>


set scale3 1.0    /**was 1.0**/

set scale6 1.0    /**was 2.0**/

set scale8 2.0    /**was 1.5**/


series ($iterWbu) {


 sw (0; 1; order) {

  <x-color><param>DarkGreen</param>3(o){N,w; weight_list_rectify;  9  ;      ; 0.0, 1}</x-color>  <x-color><param>DimGrey</param>/** all weights W **/</x-color>

  <x-color><param>DarkGreen</param>6(o){N,w; weight_list_rectify;  9  ;      ; 0.0, 1}</x-color>  <x-color><param>DimGrey</param>/**     are       **/</x-color>

  <x-color><param>DarkGreen</param>8(o){N,w; weight_list_rectify;  9  ;      ; 0.0, 1}</x-color>  <x-color><param>DimGrey</param>/**   positive    **/</x-color>

  <x-color><param>DarkGreen</param>9(o){N,w; weight_list_rectify;3+6+8; ++   ; 0.0, 1}</x-color>  <x-color><param>DimGrey</param>/**     only      **/</x-color>

<x-color><param>DarkGreen</param> }</x-color>


 sw (0; 1; order) {

  7(o){P  ; local_copy      ; ,   ; Q,  ;      } <x-color><param>DimGrey</param>/****/</x-color>

  7(t){P  ; <x-color><param>saddle brown</param>total_init_coord</x-color>; 5   ; R   ;16+24, <x-color><param>red</param>50</x-color>, 0.0} <x-color><param>DimGrey</param>/**init random new (x,y,phi), if R != 0, else leave as is <<- make sure orange visible; set phi = 0 for simplicity!**/</x-color>

  4(t){P  ; <x-color><param>saddle brown</param>total_angl_coord</x-color>; 7   ;     ;$sigma+$sigang,$numang+$maxang} <x-color><param>DimGrey</param>/**compute the perceived orange**/</x-color>

  5(o){K,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed; 4   ; P   ;      } <x-color><param>DimGrey</param>/**Eq.2:  critic activation at time t**/</x-color>

        

  6(o){N,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed; 4   ; P   ;      } <x-color><param>DimGrey</param>/**Eq. before 9: actor inner activation**/</x-color>
  6(t){M  ; <x-color><param>saddle brown</param>total_rand_winner</x-color>;    ; N   ;      } <x-color><param>DimGrey</param>/**Eq.9:  choose action stochastically**/</x-color>
  <x-color><param>DeepSkyBlue2</param>6(t){M  ; total_winner    ;     ; N   ; 1, 1.0}</x-color>


  7(t){Q  ; <x-color><param>saddle brown</param>total_move_coord</x-color>; 6+7 ; M+P ; 0.9+0.1} <x-color><param>DimGrey</param>/**old position P and action M (q_00~velocity,q_01~angularvelocity) -> new position Q**/</x-color>
  4(t){Q  ; <x-color><param>saddle brown</param>total_angl_coord</x-color>; 7   ;     ;$sigma+$sigang,$numang+$maxang} <x-color><param>DimGrey</param>/**compute the perceived orange**/</x-color>

  5(o){R  ; <x-color><param>saddle brown</param>feed_dock_reward</x-color>; 4,7 ; Q,Q ;15+11,$numang+16+24,2+0,-0.3,<underline>8.0</underline>} <x-color><param>DimGrey</param>/**set reward R=1 at target pos q_00+q_01, and R = q_30 at boundary; </x-color><underline>0.0</underline><x-color><param>DimGrey</param> for nicer presentation**/</x-color>

 }


 <x-color><param>DimGrey</param>/**WAKE: TD weights W_(368)9 learn**/</x-color>

 sw (0; 1; order) {
  3(t){T; <x-color><param>saddle brown</param>total_imag_coord  </x-color>; 7   ; P   ;1, $sigma}                     <x-color><param>DimGrey</param>/**compute the perceived orange (on the original "where" area, NOT on the angle-blown-up input)**/</x-color>
  3(o){T; local_mult_const  ; ,   ; ,   ; $scale3 }                     <x-color><param>DimGrey</param>/**</x-color><x-color><param>red</param>!!!</x-color><x-color><param>DimGrey</param>**/</x-color>
  6(o){T; local_copy        ; ,   ; M,  ;         }                     <x-color><param>DimGrey</param>/**the action**/</x-color>
  6(o){T; local_mult_const  ; ,   ; ,   ; $scale6 }                     <x-color><param>DimGrey</param>/**</x-color><x-color><param>red</param>!!!</x-color><x-color><param>DimGrey</param>**/</x-color>
  8(t){T; <x-color><param>saddle brown</param>total_imag_coord</x-color>  ; 7   ; P   ;2, $sigang, $numang+$maxang}   <x-color><param>DimGrey</param>/**the heading direction cells**/</x-color>
  8(o){T; local_mult_const  ; ,   ; ,   ; $scale8 }                     <x-color><param>DimGrey</param>/**</x-color><x-color><param>red</param>!!!</x-color><x-color><param>DimGrey</param>**/</x-color>
 }


 sw (0; 1; order) {

  9(o){T,w; weight_list_feed;3+6+8;T+T+T;     }


  9(o){Q,w; weight_list_feed; 3   ; T   ;     }                         <x-color><param>DimGrey</param>/** only  **/</x-color>

  9(o){R,w; weight_list_feed; 6   ; T   ;     }                         <x-color><param>DimGrey</param>/**  for  **/</x-color>

  9(o){S,w; weight_list_feed; 8   ; T   ;     }                         <x-color><param>DimGrey</param>/**observe**/</x-color>


  <x-color><param>medium violet red</param>9(o){T; local_mean_01     ; ,   ; ,   ; 64+2.0+0+0+1}</x-color>


  3(o){S,w; weight_list_feed; 9   ; T   ;     }

  3(o){R; local_sub         ; ,   ; T, S;     }

  <x-color><param>DarkGreen</param>3(o){N,w; weight_list_hebb; 3, 9; R, T; $epsWbu}</x-color>

  6(o){S,w; weight_list_feed; 9   ; T   ;     }

  6(o){R; local_sub <x-bg-color><param>cyan</param>       </x-bg-color> ; ,   ; T, S;     }      <x-bg-color><param>cyan</param>/**to plot the TD errors R (continuous) with init on area 6**/</x-bg-color>

  <x-color><param>DarkGreen</param>6(o){N,w; weight_list_hebb; 6, 9; R, T; $epsWbu}</x-color>

  8(o){S,w; weight_list_feed; 9   ; T   ;     }

  8(o){R; local_sub         ; ,   ; T, S;     }

  <x-color><param>DarkGreen</param>8(o){N,w; weight_list_hebb; 8, 9; R, T; $epsWbu}</x-color>


  <x-color><param>medium violet red</param>3(o){N,</x-color><x-color><param>DarkGreen</param>w</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ; 9   ;     ; </x-color><x-color><param>DarkGreen</param>$dectimesepsWbu</x-color><x-color><param>medium violet red</param> }</x-color>

  <x-color><param>medium violet red</param>6(o){N,</x-color><x-color><param>DarkGreen</param>w</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ; 9   ;     ; </x-color><x-color><param>DarkGreen</param>$dectimesepsWbu</x-color><x-color><param>medium violet red</param> }</x-color>

  <x-color><param>medium violet red</param>8(o){N,</x-color><x-color><param>DarkGreen</param>w</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ; 9   ;     ; </x-color><x-color><param>DarkGreen</param>$dectimesepsWbu</x-color><x-color><param>medium violet red</param> }</x-color>

 }



<x-bg-color><param>cyan</param> /**to plot the TD errors S (continuous) if NO init on area 6, but during testing -- comment this out to plot the training errors, i.e. with correct area 6 init**/

 sw (0; 1; order) {

  9(o){L,w; weight_list_feed    ;3+8;T+T;     }

  9(o){L; local_mean_01     ; ,   ; ,   ; 64+2.0+0+0+1}

  6(o){S,w; weight_list_feed    ; 9   ; L   ;     }

  6(o){S; local_sub</x-bg-color> <x-bg-color><param>cyan</param>       </x-bg-color> <x-bg-color><param>cyan</param>; ,   ; T, S;     }

 }

</x-bg-color>


<x-color><param>DimGrey</param>/**SLEEP: BU weights W_9(368) learn**/</x-color>

 sw (0; 1; order) {

  9(t){N; total_topo_gibbs_01;,   ; ,   ; 10+0.75, 1.0+1.0, 1}    <x-color><param>DimGrey</param>/**init sleep phantasy**/</x-color>

  3(o){N,w; weight_list_feed; 9   ;     ;     }

  6(o){N,w; weight_list_feed; 9   ;     ;     }

  8(o){N,w; weight_list_feed; 9   ;     ;     }

  9(o){M,w; weight_list_feed;3+6+8;N+N+N;     }

  <x-color><param>medium violet red</param>9(o){M; local_mean_01     ; ,   ; ,   ; 64+2.0+0+0+1}</x-color>

  9(o){N; local_sub         ; ,   ; N, M;     }

  <x-color><param>DarkGreen</param>9(o){N,w; weight_list_hebb;9,3+6+8;N,N+N+N; $epsWbu}</x-color>

  <x-color><param>medium violet red</param>9(o){N,</x-color><x-color><param>DarkGreen</param>w</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ;3+6+8; ,   ; </x-color><x-color><param>DarkGreen</param>$dectimesepsWbu</x-color><x-color><param>medium violet red</param>}</x-color>

 }



 if (iter % 100)

 sw (0; 1; alltime) {

  3(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  6(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  8(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  3(o){N,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  6(o){N,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  8(o){N,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){N,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){M,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){Q,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){R,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){S,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

 }

 if (iter % 500)

 sw (0; 1; alltime) {

  <x-color><param>DarkGreen</param>9(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 3;    ;      }</x-color>

  <x-color><param>DarkGreen</param>9(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 6;    ;      }</x-color>

  <x-color><param>DarkGreen</param>9(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 8;    ;      }</x-color>

  <x-color><param>DarkGreen</param>3(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 9;    ;      }</x-color>

  <x-color><param>DarkGreen</param>6(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 9;    ;      }</x-color>

  <x-color><param>DarkGreen</param>8(n){N,w+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 9;    ;      }</x-color>

 }


}





 <x-color><param>DimGrey</param>/**lateral attractor weights V (separate relaxation with WAKE data)**/</x-color>

 <x-color><param>DimGrey</param>/**the relaxation dynamics might solve the problem of conflicting BU inputs from motor, angle and location ... !**/

 /**might relax together with motor output area 6, because the classification is relevant w.r.t. the motor output anyway ... !**/</x-color>


series (1) {

 if (<x-color><param>DarkGreen</param>$importV</x-color> = 0)

 sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; alltime) {

  <x-color><param>DarkGreen</param>3(n) {N,v; weight_list_alloc_full; 9    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,v; weight_list_alloc_full; 9    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>8(n) {N,v; weight_list_alloc_full; 9    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v; weight_list_alloc_full; 3    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v; weight_list_alloc_full; 6    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v; weight_list_alloc_full; 8    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>


  <x-color><param>DarkGreen</param>3(n) {N,v; weight_list_alloc_full; 3    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,v; weight_list_alloc_full; 6    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>8(n) {N,v; weight_list_alloc_full; 8    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v; weight_list_alloc_full; 9    ;   ; -0.01+0.01}</x-color>   <x-color><param>DimGrey</param>/****/</x-color>

 }

 if (<x-color><param>DarkGreen</param>$importV</x-color> = 0)

 sw (0; 1; order) {

<x-color><param>DarkGreen</param>  3(o){N,v; weight_list_cutself;     ;      ;     }

  6(o){N,v; weight_list_cutself;     ;      ;     }

  8(o){N,v; weight_list_cutself;     ;      ;     }

  9(o){N,v; weight_list_cutself;     ;      ;     }

 }</x-color>


 if (<x-color><param>DarkGreen</param>$importV</x-color> = 1)

 sw (<x-color><param>red</param>0</x-color>; <x-color><param>red</param>1</x-color>; alltime) {

  <x-color><param>DarkGreen</param>3(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 9;   ;    }</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 9;   ;    }</x-color>

  <x-color><param>DarkGreen</param>8(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 9;   ;    }</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 3;   ;    }</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 6;   ;    }</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 8;   ;    }</x-color>


  <x-color><param>DarkGreen</param>3(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 3;   ;    }</x-color>

  <x-color><param>DarkGreen</param>6(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 6;   ;    }</x-color>

  <x-color><param>DarkGreen</param>8(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 8;   ;    }</x-color>

  <x-color><param>DarkGreen</param>9(n) {N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_alloc_import; 9;   ;    }</x-color>

 }

}



series ($iterV) {


 /**begin of copy&paste from above**/

 sw (0; 1; order) {

  7(o){P  ; local_copy      ; ,   ; Q,  ;      } <x-color><param>DimGrey</param>/****/</x-color>

  7(t){P  ; <x-color><param>saddle brown</param>total_init_coord</x-color>; 5   ; R   ;16+24, <x-color><param>red</param>50</x-color>, 0.0} <x-color><param>DimGrey</param>/**init random new (x,y,phi), if R != 0, else leave as is <<- make sure orange visible; set phi = 0 for simplicity!**/</x-color>

  4(t){P  ; <x-color><param>saddle brown</param>total_angl_coord</x-color>; 7   ;     ;$sigma+$sigang,$numang+$maxang} <x-color><param>DimGrey</param>/**compute the perceived orange**/</x-color>

  5(o){K,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed; 4   ; P   ;      } <x-color><param>DimGrey</param>/**Eq.2:  critic activation at time t**/</x-color>

        

  6(o){N,<x-color><param>DarkGreen</param>w</x-color>; weight_list_feed; 4   ; P   ;      } <x-color><param>DimGrey</param>/**Eq. before 9: actor inner activation**/</x-color>
  6(t){M  ; <x-color><param>saddle brown</param>total_rand_winner</x-color>;    ; N   ;      } <x-color><param>DimGrey</param>/**Eq.9:  choose action stochastically**/</x-color>
  <x-color><param>DeepSkyBlue2</param>6(t){M  ; total_winner    ;     ; N   ; 1, 1.0}</x-color>


  7(t){Q  ; <x-color><param>saddle brown</param>total_move_coord</x-color>; 6+7 ; M+P ; 0.9+0.1} <x-color><param>DimGrey</param>/**old position P and action M (q_00~velocity,q_01~angularvelocity) -> new position Q**/</x-color>
  4(t){Q  ; <x-color><param>saddle brown</param>total_angl_coord</x-color>; 7   ;     ;$sigma+$sigang,$numang+$maxang} <x-color><param>DimGrey</param>/**compute the perceived orange**/</x-color>

  5(o){R  ; <x-color><param>saddle brown</param>feed_dock_reward</x-color>; 4,7 ; Q,Q ;15+11,$numang+16+24,2+0,-0.3,<underline>8.0</underline>} <x-color><param>DimGrey</param>/**set reward R=1 at target pos q_00+q_01, and R = q_30 at boundary; </x-color><underline>0.0</underline><x-color><param>DimGrey</param> for nicer presentation**/</x-color>

 }


 <x-color><param>DimGrey</param>/**WAKE: TD weights W_(368)9 learn**/</x-color>

 sw (0; 1; order) {
  3(t){T; <x-color><param>saddle brown</param>total_imag_coord  </x-color>; 7   ; P   ;1, $sigma}                     <x-color><param>DimGrey</param>/**compute the perceived orange (on the original "where" area, NOT on the angle-blown-up input)**/</x-color>
  3(o){T; local_mult_const  ; ,   ; ,   ; $scale3 }                     <x-color><param>DimGrey</param>/**</x-color><x-color><param>red</param>!!!</x-color><x-color><param>DimGrey</param>**/</x-color>
  6(o){T; local_copy        ; ,   ; M,  ;         }                     <x-color><param>DimGrey</param>/**the action**/</x-color>
  6(o){T; local_mult_const  ; ,   ; ,   ; $scale6 }                     <x-color><param>DimGrey</param>/**</x-color><x-color><param>red</param>!!!</x-color><x-color><param>DimGrey</param>**/</x-color>
  8(t){T; <x-color><param>saddle brown</param>total_imag_coord</x-color>  ; 7   ; P   ;2, $sigang, $numang+$maxang}   <x-color><param>DimGrey</param>/**the heading direction cells**/</x-color>
  8(o){T; local_mult_const  ; ,   ; ,   ; $scale8 }                     <x-color><param>DimGrey</param>/**</x-color><x-color><param>red</param>!!!</x-color><x-color><param>DimGrey</param>**/</x-color>
 }


 sw (0; 1; order) {

  9(o){T,w; weight_list_feed;3+6+8;T+T+T;     }


  <x-color><param>medium violet red</param>9(o){T; local_mean_01     ; ,   ; ,   ; 64+2.0+0+0+1}</x-color>

 }

 /**end of copy&paste from above**/


 sw (0; 1; order) {

  3(o){T; local_rectify     ; ,   ; ,   ; 0.8+-1}   /**just for consistency with the 2 lines below**/
  6(o){T; local_rectify     ; ,   ; ,   ; 0.8+-1}   /**because value was previously multiplied by scale6>1**/
  8(o){T; local_rectify     ; ,   ; ,   ; 0.8+-1}   /**because value was previously multiplied by scale8>1**/
 }


 sw (0; 1; <underline>order) {</underline>

  9(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed;3+6+8+9;O+O+O+O; }    <x-color><param>DimGrey</param>/**see 06.gaussequence.enr for average between BU & lateral input -- related to prediction !**/</x-color>

      {<x-color><param>medium violet red</param>P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>    <x-color><param>DimGrey</param>/**works more robustly with kurt=8 instead of 64 as for BU cells -- 0.7 trick to keep act's high!**/</x-color>
  3(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed; 9+3 ; O+O ;     }    <x-color><param>DimGrey</param>/**see 06.gaussequence.enr for average between BU & lateral input -- related to prediction !**/</x-color>

     <x-color><param>medium violet red</param> {P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>    <x-color><param>DimGrey</param>/**works more robustly with kurt=8 instead of 64 as for BU cells -- 0.7 trick to keep act's high!**/</x-color>
  6(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed; 9+6 ; O+O ;     }    <x-color><param>DimGrey</param>/**see 06.gaussequence.enr for average between BU & lateral input -- related to prediction !**/</x-color>

     <x-color><param>medium violet red</param> {P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>    <x-color><param>DimGrey</param>/**works more robustly with kurt=8 instead of 64 as for BU cells -- 0.7 trick to keep act's high!**/</x-color>
  8(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed; 9+8 ; O+O ;     }    <x-color><param>DimGrey</param>/**see 06.gaussequence.enr for average between BU & lateral input -- related to prediction !**/</x-color>

     <x-color><param>medium violet red</param> {P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>    <x-color><param>DimGrey</param>/**works more robustly with kurt=8 instead of 64 as for BU cells -- 0.7 trick to keep act's high!**/</x-color>
 }


 sw (0; 1; order) { /**attention: it may not work to learn only at the last step, because the pre-synaptic value might be too small!!!**/

  <x-color><param>medium violet red</param>9(o){N,</x-color><x-color><param>DarkGreen</param>v</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ; 3+6+8+9;     ; </x-color><x-color><param>DarkGreen</param>$dectimesepsV</x-color><x-color><param>medium violet red</param> }</x-color>

  <x-color><param>medium violet red</param>3(o){N,</x-color><x-color><param>DarkGreen</param>v</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ; 3+9    ;     ; </x-color><x-color><param>DarkGreen</param>$dectimesepsV</x-color><x-color><param>medium violet red</param> }</x-color>

  <x-color><param>medium violet red</param>6(o){N,</x-color><x-color><param>DarkGreen</param>v</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ; 6+9    ;     ; </x-color><x-color><param>DarkGreen</param>$dectimesepsV</x-color><x-color><param>medium violet red</param> }</x-color>

  <x-color><param>medium violet red</param>8(o){N,</x-color><x-color><param>DarkGreen</param>v</x-color><x-color><param>medium violet red</param>; weight</x-color><x-color><param>DarkGreen</param>_list</x-color><x-color><param>medium violet red</param>_decay ; 8+9    ;     ; </x-color><x-color><param>DarkGreen</param>$dectimesepsV</x-color><x-color><param>medium violet red</param> }</x-color>


  9(o){K; local_sub         ; ,   ; T, P;     }

  3(o){K; local_sub         ; ,   ; T, P;     }

  6(o){K; local_sub <x-bg-color><param>cyan</param>       </x-bg-color> ; ,   ; T, P;     }      <x-bg-color><param>cyan</param>/**to plot the lat errors K (continuous) with init on area 6**/</x-bg-color>

  8(o){K; local_sub         ; ,   ; T, P;     }

<x-color><param>DarkGreen</param>  9(o){N,v; weight_list_hebb;,3+6+8+9;K,O+O+O+O; $epsV}

  3(o){N,v; weight_list_hebb; ,9+3;K,O+O; $epsV}

  6(o){N,v; weight_list_hebb; ,9+6;K,O+O; $epsV}

  8(o){N,v; weight_list_hebb; ,9+8;K,O+O; $epsV}

</x-color>

  9(o){Q,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed ; 3   ; P   ;     }                         <x-color><param>DimGrey</param>/** only  **/    /**here  at**/</x-color>

  9(o){R,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed ; 6   ; P   ;     }                         <x-color><param>DimGrey</param>/**  for  **/    /**separate time**/</x-color>

  9(o){S,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed ; 8   ; P   ;     }                         <x-color><param>DimGrey</param>/**observe**/    /**from above**/</x-color>

 }


 sw (0; 1; order) {

  9(o){O; local_copy        ; ,   ; T,  ;     }                         <x-color><param>DimGrey</param>/**      the       **/</x-color>

  3(o){O; local_copy        ; ,   ; T,  ;     }                         <x-color><param>DimGrey</param>/**      old       **/</x-color>

  6(o){O; local_copy        ; ,   ; T,  ;     }                         <x-color><param>DimGrey</param>/**  activations   **/</x-color>

  8(o){O; local_copy        ; ,   ; T,  ;     }                         <x-color><param>DimGrey</param>/**for earlier init**/</x-color>

 }


set rset 9

set rlen 10


 /**only for observe**/

 sw (1; $rlen; <underline>order</underline>) {

  9(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed;3+6+8+9;+++; -1 }

     <x-color><param>medium violet red</param> {P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>
  3(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed; 9+3 ; +   ; -1 }

     <x-color><param>medium violet red</param> {P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>
  6(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed; 9+6 ; +   ; -1 }

     <x-color><param>medium violet red</param> {P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>
  8(o){P,<x-color><param>DarkGreen</param>v</x-color>; weight_list_feed; 9+8 ; +   ; -1 }

     <x-color><param>medium violet red</param> {P; local_mean_01     ; ,   ; ,   ; 8+2.0+0+0+0.7}</x-color>
 }




 if (iter % 100)

 sw (0; $rlen; alltime) {

  9(o){O,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  6(o){O,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  3(o){P,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  6(o){P,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  8(o){P,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){P,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

 }

 if (iter % 100)

 sw (0; 1; alltime) {

  3(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  6(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  8(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

  9(o){T,<x-color><param>DarkGreen</param><x-color><param>blue</param>d</x-color></x-color>; observe_act     ;     ;     ;      }

 }


 if (iter % 500)

 sw (0; 1; alltime) {

  <x-color><param>DarkGreen</param>9(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 3;    ;      }</x-color>

  <x-color><param>DarkGreen</param>9(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 6;    ;      }</x-color>

  <x-color><param>DarkGreen</param>9(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 8;    ;      }</x-color>

  <x-color><param>DarkGreen</param>3(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 9;    ;      }</x-color>

  <x-color><param>DarkGreen</param>6(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 9;    ;      }</x-color>

  <x-color><param>DarkGreen</param>8(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 9;    ;      }</x-color>


  <x-color><param>DarkGreen</param>3(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 3;    ;      }</x-color>

  <x-color><param>DarkGreen</param>6(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 6;    ;      }</x-color>

  <x-color><param>DarkGreen</param>8(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 8;    ;      }</x-color>

  <x-color><param>DarkGreen</param>9(n){N,v+</x-color><x-color><param>blue</param>d</x-color><x-color><param>DarkGreen</param>; weight_list_export; 9;    ;      }</x-color>

 }

}