%% ABOUT % Tento skript sluzi na zadanie vsetkych vstupnych parametrov, ktore budu % vyuzivane a volane vo funkciach pre zostavenie optimalizacnej ulohy % pripadne vo funkciach pre zostavenie zavaznych ci nezavaznych obmedzeni. % V sekcii VSTUPNE DATA, je potrebne zadat parametre pre ulohu, ich popisky % su vzdy vedla kazdej neznamej. Nasledne si zvolime maximalne naklady na % smenu a nechame si vytvorit maticu nakladov pomocou funkcie randi() % Sekcia RIESIC sluzi na zostavenie optimalizacnej ulohy pomocou funkcie % MBKS_zostav_optimalizacnu_ulohu, jej vystupy budeme potrebovat pre % najdenie optimalne riesenia a to za pomoci funkcie selectMIPsolver. % Optimalne riesenie nasledne pretransformuje do citatelnejsie podoby, % nakolko riesenie xopt2 je v podobe dlheho vektoru, teda do matice XOPT2. % Tato posluzi ako vstup pre zostavenie grafickych funkcii. % Sekcia ZOBRAZENIA, ako uz bolo spomenute sluzi na zobrazenie vysledkov z % optimalneho riesenia. %% VSTUPNE DATA n = 20; % pocet sestier mesiace = 6; % pocet planovanych mesiacov dni = 28; % pocet planovanych dni m = mesiace * dni; % pocet planovanych dni za jeden pol rok w = mesiace * 8; % pocet vikendovych dni za periodu m z = 3; % pocet smien za den a = 4; % maximalny pocet po sebe iducich pracovnych dni pre sestru za m max_wknd_den = mesiace * 5; % max pocet vikendovych pracovnych dni za m min_poc_den = mesiace * 15; % min pocet pracovnych dni max_poc_den = mesiace * 24; % max pocet pracovnych dni l = mesiace * 20; % optimalny pocet pracovnych dni delta = 0.1; % koeficient nocnej smeny weekend_indx_init = []; for i = 6:7:m weekend_indx_init(i,1) = i; end for i = 7:7:m weekend_indx_init(i,1) = i; end weekend_indx = weekend_indx_init(weekend_indx_init(:) > 0); % vikend idex KN = [3]; % mnozina nocnych smien w1 = ones(n,1); % vaha pre prve nezavazne obmedzenie w2 = ones(n,1)*(4); % vaha pre druhe nezavazne obmedzenie %% POPULOVANIE NAKLADOV A POCTU SMIEN SESTIER max_shift_cost = 10; % maximalne naklady na smenu s=rng; p = randi(max_shift_cost, n, m, z); % matica nakladov rng(s); % Matica minimalneho predpisaneho poctu smien sestier DT =[ 5 4 2; 6 5 2; 6 5 2; 4 4 2; 5 4 2; 2 2 2; 2 2 2 ]; DR=repmat(DT,24,1); D=DR+randi([-1,1],[24*7,3]); %% ZOSTAVENIE OPTIMALIZACNEJ ULOHY [c, A, b, lb, ub, ctype, vartype, sense, param] = ... MBKS_zostav_optimalizacnu_ulohu(n, m, z, w, a, max_wknd_den, ... min_poc_den, max_poc_den, l, delta, weekend_indx, p, D, KN, w1, w2); %% RIESIC [XOPT, fpls, fmns, gpls, gmns, cas_vypoctu,fmin,errnum,extra] = ... MBKS_riesenie(n, m, z, c, A, b, lb, ub, ctype, vartype, sense, ... param,false); %% GRAFICKE FUNKCIE % Graficke zobrazenia z riesenia xopt2 figure(2); MBKS_zobraz_priradenie_sluzieb(n, m, z, weekend_indx, XOPT) figure(3); MBKS_zobraz_obsadenost_zmien(n, m, z, D, XOPT) figure(4); MBKS_zobraz_pocty_zmien(n, m, z, min_poc_den, max_poc_den,... KN, delta, l, XOPT) figure(5); MBKS_zobraz_pocty_vikendovych_zmien(n, m, z, w, max_wknd_den, ... weekend_indx, XOPT) figure(6); MBKS_zobraz_pocty_turnusov(n, m, z, a, XOPT) figure(7); MBKS_zobraz_odchylky_nezavaznych_poziadavok( fpls, fmns, gpls, gmns)