function [spolehlivosttLinek, absolutniVyjadreniSpol] = OpdDleChybovosti(jednotkaBW, BW, pocatek, konec, pocetuzlu)

%mfile pro urceni chybovosti jednotlivych linek a stanoveni trasy mezi
%koncovymi body s minimalni chybovosti.
%jednotkaBW - Bps, Mbps, Gbps
%BW - kapacita jednotlivych linek
%pocatek - vektor pocatecnich uzlu spoju
%konec - vektor koncovych uzlu spoju
%pocetuzlu - pocet uzlu v siti
%[spolehlivosttLinek, absolutniVyjadreniSpol] = OpdDleChybovosti(jednotkaBW, BW, pocatek, konec, pocetuzlu)
%vyuzivam hledani spolehlivych cest, kde se nejprve urci jejich
%spolehlivost a pak se zjistene hodnoty logaritmuji. Pomoci
%zlogaritmovanych hodnot hledam nejkratsi(nejspolehlivejsi trasy);
%vychozi hodnota bude takova, ze pro 1Gbs linku je chybovost 1*10^-5
%trojclenkou spocitat procentualni rozdil mezi linkami

disp('******************PARAMETRY OPTIMALIZACE DLE CHYBOVOSTI SPOJU*************************')

if nargin ~= 5
    error('Spatny pocet vstupu')
end

delkaPocatek = length(pocatek);
delkaKonec = length(konec);
delkaBW = length(BW');

if delkaPocatek ~= delkaKonec || delkaPocatek ~= delkaBW
    error('Pocet prvku vektoru pocatek, konec, delka a BW musi byt stejny')
end

chybovostVychozi = 0.00005; %vychozi chybovost
prepocet = 100/(1*10^9); %pepocet na procenta

switch jednotkaBW
    case 'Bps'
    vyjadreni = BW.*prepocet; %procentualni vyjadrivni vuci vychozimu toku
               
    case 'Mbps'
    BW = BW.*10^6;
    vyjadreni = BW.*prepocet;
   
            
    case 'Gbps'
    BW = BW.*10^9;
    vyjadreni = BW.*prepocet;
        
    otherwise
        error('zadej spravnou jednotku BW: Bps, Mbps, Gbps')
        
end

vyjadreni = ((100 - vyjadreni)./100)+1; %urceni rozdilu chybovosti
chybovostLinek = vyjadreni.*chybovostVychozi; %chybovost jednotlivych linek
spolehlivosttLinek = 1 - chybovostLinek; %spolehlivost linek

disp('Spolehlivost jednotlivych linek v procentech v %')
spolehlivosttLinekProc = spolehlivosttLinek.*100

absolutniVyjadreniSpol = log10((spolehlivosttLinek));
absolutniVyjadreniSpol = abs(absolutniVyjadreniSpol); %vyjadreni spolehlivost po loratimovani v absolutni hodnote

navrh = sparse(pocatek, konec, absolutniVyjadreniSpol,pocetuzlu,pocetuzlu);
UG = tril(navrh + navrh');

for i = 1:(pocetuzlu) %opakovani pro zdrojove uzly
    
    for j = 1: pocetuzlu %opakovani pro cilove uzly
        [dist,path,pred] = graphshortestpath(UG,i,'directed',false); %hledani vsech nejkratsich tras ze zdrojoveho uzlu
        disp(sprintf('Nejspolehlivejsi trasa z uzlu: %i do %i', i, j));
        nejspolTrasa = path{j} % nejkratsi trasa k danemu cili
        
    end
end
nejspolehlivejsi = graphallshortestpaths(UG,'directed',false); %hledani vsech nejkratsich tras
nejspolehlivejsi = triu(nejspolehlivejsi);

disp('Vyjadreni pravdepodobnosti s jakou nastane na dane trase chyba pri prenosu v %')
nejspolehlivejsi = sparse(nejspolehlivejsi).*100 %celkove hodnoty pravdepodobnosti s jakou nastane pri prenosu po dane trase chyba

end