www.gusucode.com > GAVPai_Book_MathworksCntrlFileEx_May2019 > GAVPai_Book_MathworksCntrlFileEx_May2019/compute_constrvioln_fn.m

    % compute constraint violation function represented by equation [4.20] 
% for a population

function  [G, psi]  = compute_constrvioln_fn(weight_mat, covar_mat, riskbudget, C_param, beta_param, alpha_param, gencount)
[row_mat, col_mat]= size(weight_mat);

for i=1:row_mat
        
        % select each individual from the population
        x_individual=weight_mat(i,:); 
        
        % compute portfolio risk 
        portfolio_risk = sqrt(x_individual * covar_mat * x_individual');
        
        % compute Marginal contribution to risk
        mcr =  (covar_mat * x_individual')/portfolio_risk ; 
        
        % compute function phi
        phi = (x_individual.*mcr')-(riskbudget/100)*portfolio_risk;
        
        % compute penalties g
        g = 1-(phi <=0);                                         
        G(i,:) = g ; 
        
        % compute penalty term
        penalty_term= power(C_param*gencount, alpha_param); 
        
        % compute  constraint violation function psi
        psi(i) = penalty_term *sum( g.*power(phi, beta_param));                         
end