Advertisement
sashachca

AAaaaaAAaaaaaAAa

Dec 16th, 2018
572
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Octave 4.80 KB | None | 0 0
  1. function SP_LR_4_KHMELEV
  2.   % Variant 16
  3.  
  4.   lambda = 8.208;
  5.   mu = 3.8;
  6.  
  7.   t = []; % moment vremeni
  8.   t_min(1) = t_obsl(1) = exprnd(1/mu); % vremya obslujivania zayavki
  9.   t_ojz(1) = exprnd(1/lambda); % vremya ojidania sleduyuschey zayavki
  10.   k = 0; % chislo zanyatyh priborov ravno kolichestvu zayavok, nahodyaschihsya v sisteme
  11.   Type(1) = 1; % tip sobytia: '1' - poyavlenie novoy zayavki (C(L) += 1, apps(free) = 1); '2' - zavershenie obslujivania zayavki (C(L) -= 1, apps(busy) = 0)
  12.   C(1) = 1; % sostoyanie sistemy
  13.   free = 0;
  14.   busy = 1;
  15.   j(1) = J = 1;
  16.   freed = J;
  17.   doobsl = processed = [];
  18.  
  19.   % task 4:
  20.   po = lambda/mu; % teoreticheskoe sredneye chislo zanyatyh priborov
  21.   r_and_k0 = stationDist(po);
  22.     r = r_and_k0(1:end-2) % da, zdes' minus 2
  23.     k0 = r_and_k0(end) - 2; % i tut toje, dolgo ob"yasnyat'
  24.     r(k0+1); % vsego u nas mojet byt' (k0+1) zanyatyh priborov, tak kak chitaem ne s 0, a s 1
  25.   %print_it(r);
  26.   apps = zeros(1, k0+1); % v nachale u nas net ni odnogo zanyatogo pribora
  27.  
  28.  
  29.  
  30.   %task 5:
  31.   DELTAS = [];
  32.   t(1, 1) =  t_z(1) = t_sob(1) = exprnd(1/lambda);
  33.  
  34.   t_kob(1) = t_z(1) + t_obsl(1);
  35.   apps(1) = 1; % zanyali pervy pribor
  36.   L = 1; % nomer sobytia
  37.   k(1) = 1;
  38.  
  39.   c = C(L); m = 0;
  40.   delta = max( t(:, 1)' ./ t_sob(1) .- r );
  41.   t_sob(L) = t_ojz(1);
  42.   while delta >= 0.00001 && c < k0 && m < 100
  43.     m += 1;
  44.     delta_or_C = modeling;
  45.     delta = delta_or_C(1);
  46.     c = delta_or_C(2);
  47.    
  48.     DELTAS(end+1) = delta;
  49.   endwhile
  50.   K = length(DELTAS);
  51.   j
  52.  
  53.  
  54.  
  55.   %______________________________________used functions:
  56.   function delta_or_C = modeling
  57.   L += 1; % nomer sobytia L
  58.  
  59.   Type(L) = type(t_min(L-1), t_ojz(L-1)); % tip sobytia L
  60.   printf('\n---\nt_ojz = %i\n', t_ojz(L-1));
  61.   printf('t_min = %i\n', t_min(L-1));
  62.   printf('tip = %i\n\n', Type(L));
  63.   switch Type(L)
  64.     case 1 % tip 1:
  65.       t_sob(L) = t_sob(L-1) + t_ojz(L-1); % moment nastuplenia sobytia L
  66.       t_ojz(L) = exprnd(1/lambda); % vremya, cherez kotoroe poyavitsya novaya zayavka, posle sobytia L
  67.       j(L) = J += 1; % nomer zayavki j(L) = J
  68.      
  69.       J; % nomer zayavki J
  70.       t_z(J) = t_sob(L); % moment poyavlenia zayavki J
  71.       t_obsl(J) = exprnd(1/mu); % vremya obslujivania zayavki J
  72.       t_kob(J) = t_z(J) + t_obsl(J); % moment okonchania obslujivania zayavki J
  73.       % poisk svobodnogo pribora:
  74.       for k(J) = 1:k0+1
  75.         if apps(k(J)) == free
  76.           apps(k(J)) = busy; %  -  zanyali pribor; zapomnili k(J)
  77.           break
  78.         endif
  79.       endfor
  80.       %  -  takim obrazom v k(J) zapishetsya nomer pribora, obslujivayuschego zayavku J)
  81.      
  82.       if ~isempty(doobsl)
  83.         doobsl(2, :) -= t_ojz(L-1); %  -  vremena doobslujivania tekuschih zayavok umen'shayutsya na t_ojz!
  84.       endif
  85.       doobsl(:, end+1) = [J, t_obsl(J)]';
  86.       [t_min(L), j_min] = min(doobsl(2, :)); %minimal'noe doobslujivanie
  87.       freed = doobsl(1, j_min); % zapomnili nomer zayavki, obslujivanie kotoroy zakonchitsya ran'she ostalnyh
  88.      
  89.     case 2 % tip 2:
  90.    
  91.       t_sob(L) = t_sob(L-1) + t_min(L-1);
  92.       t_ojz(L) = t_ojz(L-1) - t_min(L-1);
  93.       j(L) = freed;
  94.       apps( k(freed) ) = free; %  -  osvobodili sootvetstvuyuschy pribor
  95.       if ~isempty(doobsl)
  96.         doobsl(2, :) -= t_min(L-1); %  -  vremena doobslujivania vseh zayavok, ostavshihsya na obslujivanii, umen'shayutsya na t_min!
  97.         [t_min(L), j_min] = min(doobsl(2, :));
  98.         freed = doobsl(1, j_min);
  99.         doobsl(:, find( doobsl(1, :) == freed)(end) ) = [];
  100.       endif
  101.   endswitch
  102.  
  103.   C(L) = sum(apps); % kolichestvo zayavok v obrabotke
  104.   % minimal'noe ostavsheesya vremya obslujivania zayavok posle sobytia L:
  105.   if C(L) == 0
  106.     t_min(L) = -1;
  107.   endif
  108.  
  109.   % obschee vremya prebyvania SMO v sostoyanii  i  s momenta t = 0 do t_sob(L):
  110.   t(1:k0+1, L) = i = 0;
  111.   while i < C(L-1)+1
  112.     i += 1;
  113.     t(i, L) = t(i, L-1);
  114.   endwhile
  115.   t(C(L-1)+1, L) = t_sob(L) - t_sob(L-1);
  116.  
  117.   delta = max(abs( t(:, L)' ./ t_sob(L) - r )); % otklonenie posle sobytia L
  118.   delta_or_C = [delta, C(L)];
  119.    
  120.    
  121.    %______________________________________used-in-used functions:
  122.     function T = type(T_min, T_ojz)
  123.       if T_ojz < T_min || T_min == -1
  124.         T = 1;
  125.       else
  126.         T = 2;
  127.       endif
  128.     endfunction
  129.    
  130.   endfunction
  131. end
  132.  
  133.  
  134. function r = stationDist(po)
  135.   r = [];
  136.   err = 1;
  137.  
  138.   i = 0;
  139.   while err >= 0.00001
  140.     i+=1;
  141.     r(i) = po^(i-1)/factorial(i-1)/exp(po);
  142.    
  143.     err = abs(r(i));
  144.   endwhile
  145.  
  146.   r = [r, i]; % i = 0...k0, a u nas sdvinuto do 1...(k0+1) iz-za opredelenia massivov v oktave
  147. endfunction
  148.  
  149.  
  150. function print_it(arr)
  151.  
  152.   for i = 1:length(arr)
  153.    printf('\n%i\n', round_it(arr(i), 6));
  154.   endfor
  155.  
  156.   % okrugleniye do 5 znakov posle zapyatoy:
  157.   function R = round_it(x, k)
  158.     R = 0; R = round(x*10^k)/10^k;
  159.   endfunction
  160. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement