load('LangesBeispiel');    

    %Solver
        IntCon = 1:dimension_pp;
        lb = zeros(dimension_pp,1);
        up = ones(dimension_pp,1);
        opts = optimoptions(@ga,'PopulationSize',100,'MaxGenerations',400,'MaxStallGenerations',100,'FunctionTolerance',1e-4);
        
        [x,fval,exitflag,output,population,scores] = ga(@(x)fitness(x,PP,b,punish), dimension_pp, Aineq, bineq, [], [], lb, up, [], IntCon, opts);
        
        
    %Auswertung
        fprintf('The number of generations was : %d\n', output.generations);
        fprintf('The number of function evaluations was : %d\n', output.funccount);
        fprintf('The best function value found was : %g\n', fval);
        FittestIndividuum = x';
        
        Fval_Matrix = 0.5 * ((PP * FittestIndividuum - b) + abs(PP * FittestIndividuum - b));
        exeed = 0;
        for i = 1:size(Fval_Matrix,1)
            if Fval_Matrix(i,1) > 0
               exeed = exeed+1;
            end
        end
        exeed_average = sum(Fval_Matrix(1:end,1))/(exeed*1000);
        
        fprintf('Seconds of exeeding the upper limit: %g\n', exeed);
        fprintf('Average of exeeding in kW: %g\n', exeed_average);
        
   %Auf Fehler überprüfen
        numProcesses_proof=0;
        for p = 1:dimension_pp
                if FittestIndividuum(p)==1
                   numProcesses_proof = numProcesses_proof+1;
                end
                if FittestIndividuum(p)~=1 && FittestIndividuum(p)~=0
                   fprintf('Error: binary limit exeeded');
                end
        end
        if numProcesses_proof ~= numProcesses
            fprintf('Error: Number of Processes wrong: %g\n', numProcesses_proof);
        end