%7.gyakorlat
%járványterjedés rácson (sejtautomata)
N = 100; %rács mérete
figure;

itnum=150; %iteráció száma
dieAfter = 10;%200;% %ennyi beteggént töltött iteráció után hal meg az ágens
%ha nem akarunk halott cellákat, tegyük magasabbra, mint az itercáciszám 
initialInfection = 0.001; %kezdeti fertõzöttségi valség
infectionRate=; %1-fertõzési ráta (egy szomszédra) 
% itt a kisebb érték jelent fertõzõbb betegséget! (azért, hogy több szomszéd fertõzési kísérletei összeadhatók legyenek)
healRate=; %felgyógyulás valsége iterációnként
immunityLoss=; %immunitás vesztésének valsége iterációnként

%a széleken mindenki immunis -> ez maga a fix határ
pop = zeros(N+2); 
%a pop mátrix maga rács: minden eleme egy-egy ágens
%az elemek értéke mondja meg milyen állapotú az ágens:
%0=immunis
%1=egészséges
%dieAfter=halott
%1<x<dieAfter=beteg különbözõ szintjei (betegség kezdetén 2 aztán iterációnként 1-gyel nõ az értéke)

%colormap készítése a kirajzoláshoz -> kirajzolásnál színek jelzik az egyes állapotokat
map = zeros(dieAfter+2,3);
map(1,:) = [0 1 0]; % 0=immunis -> zöld 
map(2,:) = [1 1 1]; % 1=fertõzhetõ -> fehér 
map(3:end, 1) = flipud(linspace(1,0,size(map(3:end, 1),1))); % piros egyre sötétebb árnyalatai (a feketéig= halott)

%kezdetben mindenki egészséges, -> néhány beteg lesz random helyeken
pop(2:N+1,2:N+1) = ones(N) + (rand(N) < initialInfection); 

%temporary array létrehozása-> 
%mindig egyszerre (az iteráció végén) frissítsük az egész rácsot, ne számítson milyen sorrendben vizsgáljuk a cellákat 
newpop  = pop;

%statisztikák: minden iterációban eltárolom a különbözõ állapotú sejtek számát
s=zeros(1,itnum); %fertõzhetõ
b=zeros(1,itnum); %beteg
r=zeros(1,itnum); %immunis
d=zeros(1,itnum); %halott

for t= 1:itnum %iteráció
    %aktuális állapot kirajzolása (fix színskálán)
    imagesc(pop,[0 dieAfter+2]);
    colormap(map);
    title(['itráció: ',num2str(t)])
    
   %végigmegyünk a cellákon (a peremen kívül)
    for i=2:N+1 
       for j=2:N+1
          guy=pop(i, j); %az egyed állpota, akit vizsgálunk
          newguy=newpop(i, j); %az egyed új állapota: alapból nem változik
          
          %viselkedési szabályok: (ezt kell kiegészíteni)
          %ha halott, úgy marad
              
          %ha immunis
              %az immunitást itt el is elvesztheti az ágens: 
              %random számot generálunk (0,1 közt), ha <, mint a küszöbérték -> elveszti az immunitást
              
          %ha fertõzhetõ
              %megszámolom, hogy az 1 sugarú környezetében kik az élõ fertõzöttek
              %megfertõzõdhet az õt körbevevõ fertõzöttek számától függõen
              %ha (betegek száma)*(random érték)>infectionRate -> állapot 2-es lesz 
              
           %ha beteg
              %bizonyos valószínûséggel meggyógyul és immunis lesz
              %ha nem gyógyult meg, még betegebb lesz 1-gyel
          
          newpop(i,j)=newguy; %frissítem a cellát az aktuális értékére
       end
   end
    
    %waitforbuttonpress; %ha kézzel akarunk léptetni
    pause(0.1); %iteráció közt eltelõ idõ (sec), hogy lássuk a folyamatot 
    %az egész populáció frissítése
    pop = newpop;
    
    %statisztikák: minden iterációban megszámolonm és eltárolom a különbözõ állapotú sejtek számát
    s(1,t)=;
    b(1,t)=;
    r(1,t)=;
    d(1,t)=;
end

%a statisztikák kirajzolása: az egyes állapotok arány az össze cellához képest az idõ (iteráció szám) függvényében 
figure;
t=1:itnum;
plot();
xlabel('lépés');
ylabel('állapot aránya');
legend('fertõzhetõ', 'beteg', 'immunis', 'halott');