%Multikriteriální rozhodování - ordinální informace, lexikografická metoda
close all, clear all, clc
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Zadejte kriteriální matici Y s kritérii seřazenými od nejdůležitějšího
%po nejméně důležité, např. ve tvaru:
% Y=[15000 2 80 7; 14500 4 80 12; 15000 2 60 4; 25000 5 80 3]

%Po spuštění kódu zvolte, zda jsou všechna kritéria v matici Y
%maximalizačního nebo minimalizačního charaketru.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Příklady vstupních parametrů:

%Příklad z [15]:
% Y=[15000 2 80 7; 14500 4 80 12; 15000 2 60 4; 25000 5 80 3]

% Y=[2 0 1 0.2; 2 0 0 0.4; 1 2 0 0.6; 0 1 1 0]

%  Y=[2 0 1 0.2;
%     2 0 0 0.4;
%     2 1 1 0.4;
%     1 2 0 0.6;
%     0 1 1 0.5]

% Y=[2 0 1 0.2 5;
%     2 0 0 0.4 4;
%     2 1 1 0.4 5;
%     1 2 0 0.6 5;
%     0 1 1 0.5 5]

% Y=[2 2 1; 2 2.1 0.9]

% Y=[2 2 1; 2 2.1 0.9; 1.9 1.8 5; 2 2.05 1; 0 5 6]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%Zadejte vstupní parametry:




%kód algoritmu:
type_check=0;
disp('Zadejte číslo 1, jestliže jsou všechna kritéria maximalizačního typu.')
disp('Zadejte číslo 2, jestliže jsou všechna kritéria minimalizačního typu.')
input_type = input('Zadejte číslo 1 nebo 2: ');
switch input_type
    case 1
        type='descend';
        type_check=1;
    case 2
        type='ascend';
        type_check=1;
    otherwise
        disp('Chyba - zadejte jedničku nebo dvojku');
end
size_check=1;
[m,n]=size(Y);
%kontrola velikosti matice Y
if (m>=2 && n>=2)
    size_check=1;
end
if(size_check==1 && type_check==1)
    
    sorting_vector=[1];
    for i=2:n
        sorting_vector(i)=i;
    end
    Y_sorted=sortrows(Y,sorting_vector,type);
    
    disp('________________________________________________');
    %nalezeni indexu optimalni varianty a_i
    row_index= find(ismember(Y, Y_sorted(1,:),'rows'));
    fprintf('Optimální varianta dle lexikografické metody je varianta a_%g:\n',row_index);
    Y(row_index,:)
    disp('Varianty jsou lexikografickou metodou seřazeny od nejlepších po nejhorší následovně:')
    Y_sorted
    
else
    if(size_check==0)
        disp('Chyba: Matice Y musí mít rozměry alespoň 2x2.');
    end
end



