Reaching movements with robust or stochastic optimal control models (Crevecoeur et al 2019)

 Download zip file 
Help downloading and running models
Accession:258846
"We explored the hypothesis that compensation for unmodelled disturbances was supported by a robust neural control strategy. We studied the predictions of stochastic optimal control (LQG) (Linear Quadratic Gaussian) (Todorov, 2005) and a robust control design that can equivalently be described as a “min-max” or worst-case strategy (Basar and Bernhard, 1991) applied to linear models of planar reaching movements. The robust controller displayed an increase in control gains, resulting in faster movements towards the target and more vigorous responses to perturbations. Our experimental results supported these predictions: the occurrence of unexpected force field disturbances evoked both faster movements and more vigorous responses to perturbations. Thus, the neural controller was more robust in the sense that the feedback responses reduced the impact of the perturbations (step and force field). Thus the compensation for disturbances involved a “model-free” component. ..."
Reference:
1 . Crevecoeur F, Scott SH, Cluff T (2019) Robust control in human reaching movements: a model-free strategy to compensate for unpredictable disturbances. J Neurosci [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type:
Brain Region(s)/Organism:
Cell Type(s):
Channel(s):
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: MATLAB;
Model Concept(s): Motor control;
Implementer(s): Crevecoeur, Frédéric ;
function [L,Sx,Se,s] = computeOFC(A,B,C,D,H,Q,R,K,oXi,oOmega,oEta)

%   Writtent by F. Crevecoeur - Spet. 6, 2019
%   Used in: Robust control in human reaching movements: a model free
%   strategy to compensate for unpredictable disturbances. 
%   Crevecoeur F., Scott S. H., Cluff T. 
%   DOI: https://doi.org/10.1523/JNEUROSCI.0770-19.2019

n = size(A,1);
m = size(B,2);
c = size(C,3);
d = size(D,3);
step = size(R,3);
L = zeros(m,n,step);

currSx = Q(:,:,end);
currSe = 0;
currs = 0;

for i = step:-1:1
    
    sdn = 0;
    
    for j = 1:c
        
        sdn = sdn + C(:,:,j)'*(currSx + currSe)*C(:,:,j);
        
    end
    
    statedn = 0;
    
    for j = 1:d
        
        statedn = statedn + D(:,:,j)'*K(:,:,i)'*currSe*K(:,:,i)*D(:,:,j);
        
    end

    L(:,:,i) = (R(:,:,step) + B'*currSx*B + sdn)\(B'*currSx*A);
    currSxTemp = currSx;
    currSx = Q(:,:,i) + A'*currSx*(A-B*L(:,:,i)) + statedn;
    currSeTemp = currSe;
    currSe = A'*currSxTemp*B*L(:,:,i)+...
        (A-K(:,:,i)*H)'*currSeTemp*(A-K(:,:,i)*H);
    currs = trace(currSxTemp*oXi+currSeTemp*(...
        oXi+oEta+K(:,:,i)*oOmega*K(:,:,i)'))+currs;
    
end

Sx = currSx;
Se = currSe;
s = currs;

Loading data, please wait...