function [x,fval] = gabat_algo

% Fitness function and numver of variables
%fitnessFcn = @(x)((2.4086+0.66827*x(1)+0.34454*x(2)-0.13647*x(3)-0.055166*x(4)+0.2008*x(5)+0.096534*x(6)-0.00068195*x(7)+0.019856*x(8)+0.064637*x(1)^2-0.19545*x(1)*x(2)-0.036925*x(1)*x(3)-0.0011845*x(1)*x(4)+0.010788*x(1)*x(5)+0.016573*x(1)*x(6)-0.016368*x(1)*x(7)+0.013489*x(1)*x(8)-0.0010713*x(2)^2-0.047758*x(2)*x(3)-0.057352*x(2)*x(4)+0.06803*x(2)*x(5)+0.091153*x(2)*x(6)-0.074321*x(2)*x(7)+0.050554*x(2)*x(8)-0.021366*x(3)^2+0.005159*x(3)*x(4)-0.24365*x(3)*x(5)+0.0056499*x(3)*x(6)-0.018049*x(3)*x(7)+0.0018549*x(3)*x(8)+0.036388*x(4)^2+0.016773*x(4)*x(5)-0.1207*x(4)*x(6)+0.009459*x(4)*x(7)-0.0035235*x(4)*x(8)-0.41697*x(5)^2-0.0027295*x(5)*x(6)-0.0028339*x(5)*x(7)-0.0075612*x(5)*x(8)-0.082822*x(6)^2-0.008507*x(6)*x(7)+0.0043193*x(6)*x(8)+0.039955*x(7)^2-0.21693*x(7)*x(8)-0.3555*x(8)^2-0.063565*x(1)^3+0.081542*x(1)^2*x(2)+0.0079381*x(1)^2*x(3)+0.014436*x(1)^2*x(4)+0.029956*x(1)^2*x(5)-0.013527*x(1)^2*x(6)+0.019093*x(1)^2*x(7)+0.054795*x(1)^2*x(8)+0.013946*x(1)*x(2)^2+0.027791*x(1)*x(2)*x(3)+0.05592*x(1)*x(2)*x(4)-0.041715*x(1)*x(2)*x(5)-0.066771*x(1)*x(2)*x(6)+0.062442*x(1)*x(2)*x(7)-0.0395*x(1)*x(2)*x(8)+0.020873*x(1)*x(3)^2+0.0011555*x(1)*x(3)*x(4)+0.035324*x(1)*x(3)*x(5)+0.02103*x(1)*x(3)*x(6)-0.0090797*x(1)*x(3)*x(7)+0.0023824*x(1)*x(3)*x(8)-0.013572*x(1)*x(4)^2-0.0066141*x(1)*x(4)*x(5)+0.025993*x(1)*x(4)*x(6)+0.0051252*x(1)*x(4)*x(7)+0.0057658*x(1)*x(4)*x(8)-0.00060671*x(1)*x(5)^2+0.011727*x(1)*x(5)*x(6)-0.0027687*x(1)*x(5)*x(7)+0.008652*x(1)*x(5)*x(8)+0.029861*x(1)*x(6)^2+0.0024512*x(1)*x(6)*x(7)-0.031939*x(1)*x(6)*x(8)-0.038375*x(1)*x(7)^2+0.020942*x(1)*x(7)*x(8)-0.039418*x(1)*x(8)^2-0.0088683*x(2)^3+0.0066961*x(2)^2*x(3)+0.051482*x(2)^2*x(4)-0.026302*x(2)^2*x(5)+0.025826*x(2)^2*x(6)+0.027358*x(2)^2*x(7)-0.0011412*x(2)^2*x(8)-0.0093649*x(2)*x(3)^2+0.0057396*x(2)*x(3)*x(4)+0.066134*x(2)*x(3)*x(5)+0.0085411*x(2)*x(3)*x(6)+0.012005*x(2)*x(3)*x(7)-0.01458*x(2)*x(3)*x(8)+0.055797*x(2)*x(4)^2-0.014575*x(2)*x(4)*x(5)+0.08457*x(2)*x(4)*x(6)+0.021397*x(2)*x(4)*x(7)+0.0018287*x(2)*x(4)*x(8)-0.089903*x(2)*x(5)^2+0.031304*x(2)*x(5)*x(6)-0.012051*x(2)*x(5)*x(7)-0.0035777*x(2)*x(5)*x(8)-0.10618*x(2)*x(6)^2-0.021668*x(2)*x(6)*x(7)-0.0022077*x(2)*x(6)*x(8)+0.035252*x(2)*x(7)^2+0.050071*x(2)*x(7)*x(8)-0.01557*x(2)*x(8)^2+0.07288*x(3)^3+0.013543*x(3)^2*x(4)+0.010653*x(3)^2*x(5)-0.043954*x(3)^2*x(6)-0.029893*x(3)^2*x(7)-0.0043812*x(3)^2*x(8)+0.00061206*x(3)*x(4)^2-0.01905*x(3)*x(4)*x(5)+0.020107*x(3)*x(4)*x(6)-0.0036447*x(3)*x(4)*x(7)+0.0086988*x(3)*x(4)*x(8)+0.34592*x(3)*x(5)^2+0.019907*x(3)*x(5)*x(6)+0.028186*x(3)*x(5)*x(7)-0.023011*x(3)*x(5)*x(8)-0.0090357*x(3)*x(6)^2+0.0061024*x(3)*x(6)*x(7)+0.011772*x(3)*x(6)*x(8)+0.0092044*x(3)*x(7)^2+0.0093733*x(3)*x(7)*x(8)+0.0014965*x(3)*x(8)^2-0.041495*x(4)^3+0.022959*x(4)^2*x(5)+0.072715*x(4)^2*x(6)+0.025785*x(4)^2*x(7)+0.011832*x(4)^2*x(8)-0.015679*x(4)*x(5)^2-0.026233*x(4)*x(5)*x(6)-0.0036978*x(4)*x(5)*x(7)+0.027244*x(4)*x(5)*x(8)+0.19389*x(4)*x(6)^2-0.022284*x(4)*x(6)*x(7)+0.00095422*x(4)*x(6)*x(8)+0.0040384*x(4)*x(7)^2+0.015222*x(4)*x(7)*x(8)+0.027836*x(4)*x(8)^2-0.47556*x(5)^3+0.002219*x(5)^2*x(6)-0.045971*x(5)^2*x(7)+0.014662*x(5)^2*x(8)+0.00054186*x(5)*x(6)^2-0.009189*x(5)*x(6)*x(7)-0.016089*x(5)*x(6)*x(8)-0.080154*x(5)*x(7)^2-0.0062523*x(5)*x(7)*x(8)-0.0062926*x(5)*x(8)^2-0.27842*x(6)^3-0.0088381*x(6)^2*x(7)+0.043002*x(6)^2*x(8)-0.0038757*x(6)*x(7)^2-0.0085079*x(6)*x(7)*x(8)-0.029524*x(6)*x(8)^2+0.0048156*x(7)^3+0.0016265*x(7)^2*x(8)+0.29216*x(7)*x(8)^2-0.3444*x(8)^3-0.072706*x(1)^4+0.072152*x(2)^4-0.0081207*x(3)^4-0.062925*x(4)^4+0.70542*x(5)^4+0.23363*x(6)^4-0.021055*x(7)^4+0.56563*x(8)^4)^0.5);
fitnessFcn=@(x)(2.4086+0.66827*x(1)+0.34454*x(2)-0.13647*x(3)-0.055166*x(4)+0.2008*x(5)+0.096534*x(6)-0.00068195*x(7)+0.019856*x(8)+0.064637*x(1)^2-0.19545*x(1)*x(2)-0.036925*x(1)*x(3)-0.0011845*x(1)*x(4)+0.010788*x(1)*x(5)+0.016573*x(1)*x(6)-0.016368*x(1)*x(7)+0.013489*x(1)*x(8)-0.0010713*x(2)^2-0.047758*x(2)*x(3)-0.057352*x(2)*x(4)+0.06803*x(2)*x(5)+0.091153*x(2)*x(6)-0.074321*x(2)*x(7)+0.050554*x(2)*x(8)-0.021366*x(3)^2+0.005159*x(3)*x(4)-0.24365*x(3)*x(5)+0.0056499*x(3)*x(6)-0.018049*x(3)*x(7)+0.0018549*x(3)*x(8)+0.036388*x(4)^2+0.016773*x(4)*x(5)-0.1207*x(4)*x(6)+0.009459*x(4)*x(7)-0.0035235*x(4)*x(8)-0.41697*x(5)^2-0.0027295*x(5)*x(6)-0.0028339*x(5)*x(7)-0.0075612*x(5)*x(8)-0.082822*x(6)^2-0.008507*x(6)*x(7)+0.0043193*x(6)*x(8)+0.039955*x(7)^2-0.21693*x(7)*x(8)-0.3555*x(8)^2-0.063565*x(1)^3+0.081542*x(1)^2*x(2)+0.0079381*x(1)^2*x(3)+0.014436*x(1)^2*x(4)+0.029956*x(1)^2*x(5)-0.013527*x(1)^2*x(6)+0.019093*x(1)^2*x(7)+0.054795*x(1)^2*x(8)+0.013946*x(1)*x(2)^2+0.027791*x(1)*x(2)*x(3)+0.05592*x(1)*x(2)*x(4)-0.041715*x(1)*x(2)*x(5)-0.066771*x(1)*x(2)*x(6)+0.062442*x(1)*x(2)*x(7)-0.0395*x(1)*x(2)*x(8)+0.020873*x(1)*x(3)^2+0.0011555*x(1)*x(3)*x(4)+0.035324*x(1)*x(3)*x(5)+0.02103*x(1)*x(3)*x(6)-0.0090797*x(1)*x(3)*x(7)+0.0023824*x(1)*x(3)*x(8)-0.013572*x(1)*x(4)^2-0.0066141*x(1)*x(4)*x(5)+0.025993*x(1)*x(4)*x(6)+0.0051252*x(1)*x(4)*x(7)+0.0057658*x(1)*x(4)*x(8)-0.00060671*x(1)*x(5)^2+0.011727*x(1)*x(5)*x(6)-0.0027687*x(1)*x(5)*x(7)+0.008652*x(1)*x(5)*x(8)+0.029861*x(1)*x(6)^2+0.0024512*x(1)*x(6)*x(7)-0.031939*x(1)*x(6)*x(8)-0.038375*x(1)*x(7)^2+0.020942*x(1)*x(7)*x(8)-0.039418*x(1)*x(8)^2-0.0088683*x(2)^3+0.0066961*x(2)^2*x(3)+0.051482*x(2)^2*x(4)-0.026302*x(2)^2*x(5)+0.025826*x(2)^2*x(6)+0.027358*x(2)^2*x(7)-0.0011412*x(2)^2*x(8)-0.0093649*x(2)*x(3)^2+0.0057396*x(2)*x(3)*x(4)+0.066134*x(2)*x(3)*x(5)+0.0085411*x(2)*x(3)*x(6)+0.012005*x(2)*x(3)*x(7)-0.01458*x(2)*x(3)*x(8)+0.055797*x(2)*x(4)^2-0.014575*x(2)*x(4)*x(5)+0.08457*x(2)*x(4)*x(6)+0.021397*x(2)*x(4)*x(7)+0.0018287*x(2)*x(4)*x(8)-0.089903*x(2)*x(5)^2+0.031304*x(2)*x(5)*x(6)-0.012051*x(2)*x(5)*x(7)-0.0035777*x(2)*x(5)*x(8)-0.10618*x(2)*x(6)^2-0.021668*x(2)*x(6)*x(7)-0.0022077*x(2)*x(6)*x(8)+0.035252*x(2)*x(7)^2+0.050071*x(2)*x(7)*x(8)-0.01557*x(2)*x(8)^2+0.07288*x(3)^3+0.013543*x(3)^2*x(4)+0.010653*x(3)^2*x(5)-0.043954*x(3)^2*x(6)-0.029893*x(3)^2*x(7)-0.0043812*x(3)^2*x(8)+0.00061206*x(3)*x(4)^2-0.01905*x(3)*x(4)*x(5)+0.020107*x(3)*x(4)*x(6)-0.0036447*x(3)*x(4)*x(7)+0.0086988*x(3)*x(4)*x(8)+0.34592*x(3)*x(5)^2+0.019907*x(3)*x(5)*x(6)+0.028186*x(3)*x(5)*x(7)-0.023011*x(3)*x(5)*x(8)-0.0090357*x(3)*x(6)^2+0.0061024*x(3)*x(6)*x(7)+0.011772*x(3)*x(6)*x(8)+0.0092044*x(3)*x(7)^2+0.0093733*x(3)*x(7)*x(8)+0.0014965*x(3)*x(8)^2-0.041495*x(4)^3+0.022959*x(4)^2*x(5)+0.072715*x(4)^2*x(6)+0.025785*x(4)^2*x(7)+0.011832*x(4)^2*x(8)-0.015679*x(4)*x(5)^2-0.026233*x(4)*x(5)*x(6)-0.0036978*x(4)*x(5)*x(7)+0.027244*x(4)*x(5)*x(8)+0.19389*x(4)*x(6)^2-0.022284*x(4)*x(6)*x(7)+0.00095422*x(4)*x(6)*x(8)+0.0040384*x(4)*x(7)^2+0.015222*x(4)*x(7)*x(8)+0.027836*x(4)*x(8)^2-0.47556*x(5)^3+0.002219*x(5)^2*x(6)-0.045971*x(5)^2*x(7)+0.014662*x(5)^2*x(8)+0.00054186*x(5)*x(6)^2-0.009189*x(5)*x(6)*x(7)-0.016089*x(5)*x(6)*x(8)-0.080154*x(5)*x(7)^2-0.0062523*x(5)*x(7)*x(8)-0.0062926*x(5)*x(8)^2-0.27842*x(6)^3-0.0088381*x(6)^2*x(7)+0.043002*x(6)^2*x(8)-0.0038757*x(6)*x(7)^2-0.0085079*x(6)*x(7)*x(8)-0.029524*x(6)*x(8)^2+0.0048156*x(7)^3+0.0016265*x(7)^2*x(8)+0.29216*x(7)*x(8)^2-0.3444*x(8)^3-0.072706*x(1)^4+0.072152*x(2)^4-0.0081207*x(3)^4-0.062925*x(4)^4+0.70542*x(5)^4+0.23363*x(6)^4-0.021055*x(7)^4+0.56563*x(8)^4)^(1/0.5);

numberOfVariables = 8;

% If decision variables are bounded provide a bound e.g, LB and UB. 
LB=[-1 -1 -1 -1 -1 -1 -1 -1];
UB=[1 1 1 1 1 1 1 1]; 
Bound = [LB;UB]; % If unbounded then Bound = []

% Create an options structure to be passed to GA
% Three options namely 'CreationFcn', 'MutationFcn', and
% 'PopInitRange' are required part of the problem.
options = gaoptimset('CreationFcn',@int_pop,'MutationFcn',@int_mutation, ...
    'PopInitRange',Bound,'Display','iter','StallGenL',2,'Generations',3, ...
    'PopulationSize',400);%,'PlotFcns',{@gaplotbestf,@gaplotbestindiv}

[x,fval] = ga(fitnessFcn,numberOfVariables,options);

%---------------------------------------------------
% Mutation function to generate childrens satisfying the range and integer
% constraints on decision variables.
function mutationChildren = int_mutation(parents,options,GenomeLength, ...
    FitnessFcn,state,thisScore,thisPopulation)
shrink = 0.01; 
scale = 1;
scale = scale - shrink * scale * state.Generation/options.Generations;
range = options.PopInitRange;
lower = range(1,:);
upper = range(2,:);
scale = scale * (upper - lower);
mutationPop =  length(parents);
% The use of ROUND function will make sure that childrens are integers.
mutationChildren =  repmat(lower,mutationPop,1) +  ...
   (repmat(scale,mutationPop,1) .* rand(mutationPop,GenomeLength));
(repmat(scale,mutationPop,1) .* rand(mutationPop,GenomeLength))

% End of mutation function
%---------------------------------------------------

function Population = int_pop(GenomeLength,FitnessFcn,options)

% totalpopulation = sum(options.PopulationSize);
% range = options.PopInitRange;
% lower= range(1,:);
% span = range(2,:) - lower;
% The use of ROUND function will make sure that individuals are integers.
% [num, txt1]= xlsread('batterie_variation_400_ohnenull.xls');
%  [num, txt1]= xlsread('batterie_variation_400_ohnenull_patternsearch.xls');
[num,txt1]= xlsread('batterie_variation_400_ohnenull_test1.xls');

 Population =[num(:,17),num(:,18),num(:,19),num(:,20),num(:,21),num(:,22),num(:,23),num(:,24)];

% End of creation function

