A basal ganglia model of aberrant learning (Ursino et al. 2018)

 Download zip file 
Help downloading and running models
Accession:239530
A comprehensive, biologically inspired neurocomputational model of action selection in the Basal Ganglia allows simulation of dopamine induced aberrant learning in Parkinsonian subjects. In particular, the model simulates the Alternate Finger Tapping motor task as an indicator of bradykinesia.
Reference:
1 . Ursino M, Baston C (2018) Aberrant learning in Parkinson's disease: A neurocomputational study on bradykinesia. Eur J Neurosci 47:1563-1582 [PubMed]
Citations  Citation Browser
Model Information (Click on a link to find other models with that property)
Model Type: Connectionist Network;
Brain Region(s)/Organism: Basal ganglia;
Cell Type(s): Neostriatum medium spiny direct pathway GABA cell;
Channel(s):
Gap Junctions:
Receptor(s): D1; D2; Cholinergic Receptors;
Gene(s):
Transmitter(s): Dopamine; Acetylcholine;
Simulation Environment: MATLAB;
Model Concept(s): Parkinson's; Synaptic Plasticity; Long-term Synaptic Plasticity;
Implementer(s): Ursino, Mauro [mauro.ursino at unibo.it]; Baston, Chiara [chiara.baston at unibo.it];
Search NeuronDB for information about:  Neostriatum medium spiny direct pathway GABA cell; D1; D2; Cholinergic Receptors; Acetylcholine; Dopamine;

%% ADDESTRAMENTO

%% stimoli base

%Sn: stimolo, ipotesi di diversi stimoli applicati alla rete
Ns = 4;

%S1: stimolo 1
S1 = zeros(Ns,1);
S1(1) = 1.0;   %stimolo massimo in posizione 1
S1(2) = 0.;   %stimolo alto in posizione 2
S1(3) = 0;
S1(4) = 0;


Correct_winner_1 = 1;

%S2: stimolo 2
S2 = zeros(Ns,1);
S2(1) =  0.;   %stimolo alto in posizione 1
S2(2) = 1.0;   %stimolo massimo in posizione 2
S2(3) = 0;
S2(4) = 0;

Correct_winner_2 = 2;


%% %%%%%%%%%%%%%%%%%% SOGGETTO NORMALE %%%%%%%%%%%%%%%%%%%%%%%%%%

%% inizializzazione sinapsi

Nc = 4;
%     
%     
%     par = 1/10;
%     %pesi da corteccia a Go (sinapsi eccitatorie)
%     Wgc = 0.48*diag(ones(Nc,1))-par*0.48*diag(ones(Nc,1));
%     Wgc(3,3) = 0;
%     Wgc(4,4) = 0;
%     
%     
%     %pesi da stimolo a Go (sinapsi eccitatorie)
%     Wgs = 0.6*diag(ones(Nc,1))-par*0.6*diag(ones(Nc,1));
%     Wgs(1,2) = 0.2;
%     Wgs(2,1) = 0.2;
%     
%     %pesi da corteccia a NoGo (sinapsi eccitatorie)
%     Wnc = 1.08*diag(ones(Nc,1))-par*1.08*diag(ones(Nc,1));
%     
%     %pesi da stimolo a NoGo (sinapsi eccitatorie)
%     Wns = 0.4*diag(ones(Nc,1))-par*0.4*diag(ones(Nc,1));
%     Wns(1,2) = 0.2;
%     Wns(2,1) = 0.2;

%%

N_epoche = 50;  %PER NaN

j1_reward = 3;
j1_punishment = 5;
% S1_reward = 3:4:(3+4*100);
% S1_punishment = 5:4:(5+4*100);

j2_reward = 2;
j2_punishment = 4;
% S2_reward = 2:4:(2+4*100);
% S2_punishment = 4:4:(2+4*100);

Wgc_epocs = zeros(Nc,Nc,N_epoche);
Wgs_epocs= zeros(Nc,Nc,N_epoche);
Wnc_epocs = zeros(Nc,Nc,N_epoche);
Wns_epocs = zeros(Nc,Nc,N_epoche);

Wgc_epocs(:,:,1) = Wgc;
Wgs_epocs(:,:,1) = Wgs;
Wnc_epocs(:,:,1) = Wnc;
Wns_epocs(:,:,1) = Wns;

vett_reward = zeros(N_epoche,1);
vett_punishment = zeros(N_epoche,1);
vett_no_risposta = zeros(N_epoche,1);

S_vett = zeros(2,N_epoche);
S1_vett = zeros(2,N_epoche);
S2_vett = zeros(2,N_epoche);



%%
for i = 1:N_epoche
    
    i
    Wgc = squeeze(Wgc_epocs(:,:,i));
    Wgs = squeeze(Wgs_epocs(:,:,i));
    Wnc = squeeze(Wnc_epocs(:,:,i));
    Wns = squeeze(Wns_epocs(:,:,i));


    resto = rem(i,2);
    noise = 0.*randn(2,1);

    if resto == 1   %sono nel caso dispari
        S = S1;  
        S(1) = S(1)+noise(1);
        S(2) = S(2)+noise(2);
        Correct_winner = Correct_winner_1;
    elseif resto == 0   %sono nel caso pari
        S = S2;
        S(1) = S(1)+noise(1);
        S(2) = S(2)+noise(2);
        Correct_winner = Correct_winner_2;
    end
    
    S(find(S>1)) = 1;
    S(find(S<0)) = 0;
    S(3:4) = 0;
    
    
    
    [Uc,C,Ugo,Go,IGo_DA_Ach,Unogo,NoGo,INoGo_DA_Ach,Ugpe,Gpe,Ugpi,Gpi,Ut,T,Ustn,STN,E,tt,Wgc_post,Wgs_post,Wnc_post,Wns_post,r,k_reward,ChI] = BG_model_function_Ach(S,Wgc,Wgs,Wnc,Wns,Correct_winner,DA);


%     i 
%     r
    
    if r==1
        vett_reward(i) = 1;
    elseif r==-1
        vett_punishment(i) = 1;
    else
        vett_no_risposta(i) = 1;
    end
    
    S_vett(1,i) = S(1);
    S_vett(2,i) = S(2);
    
    if resto == 1
        S1_vett(1,i) = S(1);
        S1_vett(2,i) = S(2);

    elseif resto == 2
        S2_vett(1,i) = S(1);
        S2_vett(2,i) = S(2);
    end

    
    Wgc_epocs(:,:,i+1) = Wgc_post;
    Wgs_epocs(:,:,i+1) = Wgs_post;
    Wnc_epocs(:,:,i+1) = Wnc_post;
    Wns_epocs(:,:,i+1) = Wns_post;
    
    

    
    %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    
    
    clear Wgc Wgs Wnc Wns
    
end 

%premi
reward_tot = sum(vett_reward)
%punizioni
punishment_tot = sum(vett_punishment)
%no risposte
no_answer_tot = sum(vett_no_risposta)