2014-10-28 1 views
0
clear all; 
    clc; 
%% Creating a grid with random value 
n = 64; 
Gpop = rand(n,n); 
temp=Gpop; 
Gpop(temp(:,:)<0.99) = 1; %Healthy percentage 99% 
Gpop(temp(:,:)>0.99 & temp(:,:)<0.994) = 2; %Healthy percentage .04% 
Gpop(temp(:,:)>0.994 & temp(:,:)<0.998) = 3; %Healthy percentage .04% 
Gpop(temp(:,:)>0.998) = 4; %Healthy percentage .02% 
%% Our Rules of cellular automata 
x = 2:n-1;   % Intializing x and y values to access the cells of CA 
y = 2:n-1; 
rule = Gpop; 
figure 
count=0; 
time = 0; 
while(count<25) 
    rule((rule(x-1,y-1)==2)|(rule(x,y-1)==2)|(rule(x+1,y-1)==2)|(rule(x-1,y)==2)|(rule(x+1,y)==2)... 
     |(rule(x-1,y+1)==2)|(rule(x,y+1)==2)|(rule(x+1,y+1)==2) & time==1)=2 ; %1st Rule a 
     if((rule(x,y-1)==3)| (rule(x-1,y)==3)|(rule(x+1,y)==3)|(rule(x,y+1)==3) & time ==2); 
      rule(x,y)==2; 
     else((rule(x-1,y-1)==3)|(rule(x+1,y-1)==3)|(rule(x-1,y+1)==3)|(rule(x+1,y+1)==3) & time ==3); 
      rule(x,y)==2; 
     end 
     rule((rule(x-1,y-1)==3)|(rule(x,y-1)==3)|(rule(x+1,y-1)==3)|(rule(x-1,y)==3)|(rule(x+1,y)==3)... 
      |(rule(x-1,y+1)==3)|(rule(x,y+1)==3)|(rule(x+1,y+1)==3) & time==4)=3; %2nd rule 
     rule((rule(x-1,y-1)==4)|(rule(x,y-1)==4)|(rule(x+1,y-1)==4)|(rule(x-1,y)==4)|(rule(x+1,y)==4)... 
      |(rule(x-1,y+1)==4)|(rule(x,y+1)==4)|(rule(x+1,y+1)==4&time==6))=4; %3rd rule 
     newMatrix=rand(n,n); 
     newtemp=newMatrix; 
     newMatrix(newtemp(:,:)<=.1)=1; 
     newMatrix(newtemp(:,:)>.1)=0; 
     rule(((rule(x-1,y-1)==4)|(rule(x,y-1)==4)|(rule(x+1,y-1)==4)|(rule(x-1,y)==4)|(rule(x+1,y)==4)... 
      |(rule(x-1,y+1)==4)|(rule(x,y+1)==4)|(rule(x+1,y+1)==4)) & newMatrix(x,y)==1 & time == 8)=1; %1st part 4th rule 
     rule(((rule(x-1,y-1)==4)|(rule(x,y-1)==4)|(rule(x+1,y-1)==4)|(rule(x-1,y)==4)|(rule(x+1,y)==4)... 
      |(rule(x-1,y+1)==4)|(rule(x,y+1)==4)|(rule(x+1,y+1)==4)) & newMatrix(x,y)==0 & time == 10)=2; %1st part 4th rule 
    imagesc(rule) 
     axis off; 
     cmap = jet(4);           % assign colormap 
     colormap(cmap) 
     hold on 
     L = line(ones(4), ones(4), 'LineWidth',2);    % generate line 
     set(L,{'color'},mat2cell(cmap,ones(1,4),3));   % set the colors according to cmap 
     legend('H','I1','I2','D')       %Addings Legends at the top right corner of image 
     count=count+1; 
     time = time+1; 
     pause(3.0) 
    end 

Выше приведен код клеточного автомата для имитации 4-х этапов ВИЧ-инфекции. Когда я запускаю вышеуказанный код, правые боковые ячейки остаются без изменений, я очень старался найти что-то неправильно, но не могу.Мой клеточный код автомата не работает, так как я намерен его работать

Ниже приведены правила моих автоматов,

Правило 1: Если H клетка удовлетворяет, по меньшей мере, один из правил, перечисленных ниже, она становится I1 клетка на следующей стадии: (я) по меньшей мере один I1 в ближайшем соседе или втором ближайшем сосете; (ii) Не менее x I2-клеток в ближайшем соседе, y I2-ячейки во втором ближайшем соседе.

Правило 2: Ячейка I1 становится следующей ячейкой ячейки I2.

Правило 3: Ячейка I2 становится D-клеткой после шагов τ из-за иммунного распознавания и очистки.

Правило 4: D-ячейку можно заменить на ячейку I1 с вероятностью Pinf или заменить на H-ячейку с вероятностью (Prep-Pinf) на следующем шаге.

Я хочу знать, соответствует ли мой код этим правилам и какие изменения я должен сделать в своем коде, чтобы получить правильную симуляцию вируса. Пожалуйста, помогите мне с этим. Заранее благодарен

+1

Что вы подразумеваете под правыми боковыми ячейками, так же как и без каких-либо изменений?? –

+0

Я имею в виду, что ячейки 60-го столбца остаются неизменными после симуляции. Как и после запуска кода, появляется изображение с изменениями, происходящими в нем. Если вы правильно заметили изображение, правая сторона изображения останется без изменений, но этого не должно быть, я просто хочу знать недостатки в своем коде и изменения, которые я должен сделать, чтобы имитировать эти клеточные автоматы. Пожалуйста, помогите, я застрял между ними, и я не знаю. – Hari

ответ

0

Ваша проблема заключается в том, что при проверке правил на 8-соседях каждого узла матрица 0-1 принимает значение 62*62 (поскольку вы устанавливаете x/y = 2:n-1), то 0/1 устанавливается в матрицу правил, поэтому последние два столбца остаются неизменными все время, потому что вы никогда не «прикасаетесь» к ним!

Чтобы понять, что я имею в виду, просто установите точку останова на любом правиле, например.

(rule(x-1,y-1)==2)|(rule(x,y-1)==2)|(rule(x+1,y-1)==2)|(rule(x-1,y)==2)|(rule(x+1,y)==2)... 
     |(rule(x-1,y+1)==2)|(rule(x,y+1)==2)|(rule(x+1,y+1)==2) 

напечатав выше результат, вы найдете это 62*62 матрица.

Я знаю, что вы хотите использовать вычисление матрицы для упрощения кода и в то же время избежать проблемы с границей. Но пока я не могу найти лучшее решение, кроме набора для цикла через x и y, и если точка находится на границе, просто используйте 3 или 5 соседей.

Другой способ - создать «провисание» строк и столбцов, например rule.size()=66*66, и установить границу равной нулю, а затем при рисовании просто выбросить провисание строк и столбцов.

Надеюсь, это поможет.

+0

Спасибо за ваши решения, но можете ли вы предоставить мне код для того, что сказал. Заранее спасибо – Hari

+0

Я пробовал все, что сказал с пограничными ячейками, проверив 3 или 5 соседей, но никаких изменений не было. Если u может правильно наблюдать изображение, это не только последние два столбца, но и около 5-10 столбцов остаются без изменений, пожалуйста, помогите. Заранее спасибо. – Hari