(* Evaluate (Shift + Enter) this cell and click yes *)

Code follows

itrbc[{r0_,m0_},{c_,f_,g_,γ_}]:=(({{1-f, 1}, {γ f g, 1-g}})).{r0,m0}+{0,c}

(* returns the asymptotic count of rbcs for the whole day (r+μ) *)
asymptrbc[c_,f_,g_,γ_]:=((c(1+f))/(f g(1-γ)))

currentspeedrbc[{r0_,m0_},{c_,f_,g_,γ_}]:=γ f g r0-g m0 +c

initializeAgents[n_]:=Table[RandomReal[{0.05,0.95},2],{n}]

visualize[agents_,noise_]:=
Module[{
agentsMoved=Table[RandomReal[{-noise,noise},2],{Length[agents]}]+agents
},
Show[
(* Plotting particles *)
Graphics[{AbsolutePointSize[10],RGBColor[1,0,0],
Style[
If[agents≠{},
Point/@agentsMoved,
Point[{-1,-1}]
],
Antialiasing->True]
},
ImageSize->{350,350},
AspectRatio->Automatic,
Frame->False,
Axes->False,
PlotRange->{{0,1},{0,1}},
Background->RGBColor[0.25,0,0]
]
]
]

updateAgents[agents_,count_]:=Module[
{elements=count-Length[agents]
},
If[count==0,
(* return an empty list *)
{},
If[elements≠0,
(* there's something to do *)
If[elements>0,
(* add *)
agents~Join~Table[RandomReal[{0.1,0.9},2],{elements}],
(* remove *)
Drop[agents,elements]
],
(* nothing changed: return the same list *)
agents
]
]
]

simulation=Deploy[Module[
{moving=False,
count={66.6667,33.3333},
asympt=100,
cellcount=99,cellspeed=0,
c=2,f=0.5,g=0.15,γ=0.6,
newcells=0,
newcellsadded1=0,
newcellsadded2=0,
agents=initializeAgents[99]
},
Panel[
Grid[{{
Dynamic[
Refresh[
cellspeed=currentspeedrbc[count,{c,f,g,γ}];
newcellsadded1=count[[1]]+newcells;
newcellsadded2=count[[2]]+newcells;
count=itrbc[{
If[newcellsadded1>0,newcellsadded1,0],
If[newcellsadded2>0,newcellsadded2,0]
},{c,f,g,γ}];
newcells=0;
cellcount=Floor[Plus@@count];
agents=updateAgents[agents,cellcount];
(* Length[agents] *)
visualize[agents,0.01]
(* Style["Working!",RGBColor[RandomReal[{0.5,1}],0,0]] *)
(* "Count: " <> ToString[Length[agents]] *)
,
TrackedSymbols->{c},
UpdateInterval->If[moving,0.2,∞]
]
]
},
{},
{Grid[{
{Grid[{{Style["RBC Current Count: " ,28],Style[Dynamic[ToString[cellcount]],28,Bold,Red]}}]},
{Grid[{{Style["RBC Normal Count:",28],Style[Dynamic[ToString[Floor[asymptrbc[c,f,g,γ]]]],28,Bold]}}]},
{Grid[{{Style["RBC Speed: ",28],Dynamic[
If[Abs[cellspeed]>0.01,
Style[ToString[NumberForm[cellspeed,{2,2}]],28,Bold,Orange],
Style["stopped",28,Bold,Green]]]}}]}
},Frame->False]}
,
{},
{"Parameters"},
{
Grid[{
{"c",Slider[Dynamic[c],{1.8,2.2}],Dynamic[c]},
{"f",Slider[Dynamic[f],{0.4,0.6}],Dynamic[f]},
{"g",Slider[Dynamic[g],{0.1,0.2}],Dynamic[g]},
{"γ",Slider[Dynamic[γ],{0.5,0.7}],Dynamic[γ]}
}, Frame -> True]
},
{},
{Grid[{{"Run Simulation",Checkbox[Dynamic[moving]]}}]},
{},
{Grid[{{
Button["Give Blood ->",newcells=-asympt/4],
Button["Take Blood ←",newcells=asympt/4],
Button["Reset",
count={66.6667,33.3333};
asympt=100;
cellcount=99;cellspeed=0;
c=2;f=0.5;g=0.15;γ=0.6;
newcells=0;
agents=initializeAgents[99];
]}}]}
}
]
(* Options *)
]
]
];

Simulation only

simulation