Last time, I presented a question that I had been given by PrettyGreen, a PR company that asked me to get involved with their Halloween publicity campaign for the mobile network operator GiffGaff. We also saw how I modelled the problem and this week I present the results and also the Matlab codes that I used, should you want to recreate, or play around, with the solutions.
The advert presenting the characters involved can be found below.
The advert presenting the characters involved can be found below.
________________________________________
Results
The survival time of each character in ascending order can be found in the table below. This is further complemented by Figure 1, in which we illustrate the health of each combatant over a 60 minute time span.
The first two characters to die are the Dead Girl and Skin Face. Although these two characters are relatively strong their low initial healths mean that the other combatants are able to dispatch them with relative ease. Thus, neither of them last longer than a minute demonstrating that neither of them are able to use their aggression to its fullest. Similarly, Baby Man is next to die, because although he is able to defend himself better, lasting just over a minute, the combatants once again go after the weakest.
Name | Survival time |
---|---|
Dead Girl | 3 secs |
Skin Face | 13 secs |
Baby Man | 1 mins 44 secs |
Pumpkin Head | 7 mins 9 secs |
Tall Guy | 10 mins 7 secs |
Hero Girl | 55 mins 37 secs |
Evil Clown | Survivor |
The next two to die are quite interesting, these are Pumpkin Head and Tall Guy, lasting approximately 7 and 10 minutes respectively. Up until this point the group has simply been killing the current weakest. At the five minute marker this would be Tall Guy, however, as seen in Figure 1, he is able to outlast Pumpkin Head because Tall guys higher agility allows him to defend better.
Eventually, only Evil Clown and Hero Girl are the surviving combatants. This is interesting as it is often the plot of a horror film to have the heroine survive up until the last few moments, when the final kill is unleashed during extended scenes of heightening tensions. This is exactly what is seen in Figure 1. Initially, things are looking good for Hero Girl as she begins the final battle with much more health than Evil Clown. Furthermore, the agility of the Hero Girl and Evil Clown are equal and the highest out of the group. This has kept them safe up until this point because they were able to run away from danger. Similarly, for the 30 minutes after Tall Guy’s death the two characters are able to capably defend themselves and escape each others attacks.
These tropes are used in many horror films: although the heroine is no physical match for the villain, she is able to make up for the lack of strength in terms of speed. It is also a standard horror trend that it should look like the heroine will survive, but then she is subjected to escalating bouts of terror. Although she is able to put up a valiant fight Hero Girl’s life is slowly drained by Evil Clown’s higher strength, ultimately leading to his victory after 55 minutes and with 45 health remaining.
These tropes are used in many horror films: although the heroine is no physical match for the villain, she is able to make up for the lack of strength in terms of speed. It is also a standard horror trend that it should look like the heroine will survive, but then she is subjected to escalating bouts of terror. Although she is able to put up a valiant fight Hero Girl’s life is slowly drained by Evil Clown’s higher strength, ultimately leading to his victory after 55 minutes and with 45 health remaining.
Who'd have thought that the Evil Clown was so dangerous?! And who could have foreseen where such a simple piece of mathematics, based on the modelling of zombies, would take us?
This brings us to the end of this current set of posts. Next time: something completely different.
________________________________________________________________
________________________________________
function Battle_Royale
%Clear computer memory and plots.
clear
close all
clc
options = odeset('RelTol',1e-4,'AbsTol',1e-5); %Options set for the ODE solver.
S=[9 7 6 8 3 8 9]; %Vector of strength values.
A=[7 8 4 3 8 6 3]; %Vector of agility values.
H=[45 65 60 40 90 10 20];%Vector of initial health.
C=S.*A; %The interaction function is scaled by the strength multiplied by the agility.
[T,Y] = ode45(@(t,y) ODES(t,y,C),[0 7000],H,options); % Solve the ODE.
cc=lines(7); % Set the legend colours.
for i=1:7
%Find the last moment alive.
YY=Y(:,i);
YY(YY<0.1)=0;
index=find(YY,1,'last');
YY(YY==0)=nan;
YY(index)=0;
plot(T/60,YY,'linewidth',3,'color',cc(i,:)); %Plot results.
t(i)=T(index)/60;
hold on
end
t %Print out the times of death.
axis([0 60 0 90]) %Set axes.
%Make the plot look nice.
legend('Tall guy','Evil Clown','Pumpkin Head','Baby Man','Hero Girl','Dead Girl','Skin Face','location','northoutside','orientation','horizontal')
xlabel('Time in minutes')
ylabel('Combatant Health')
function dy = ODES(t,y,C)
Terms=y.*C'; %The value of the each combatant's attack.
dy=zeros(7,1); %Preallocation of the variables.
for i=1:7
indices=[1:i-1,i+1:7]; %Indices to be summed over.
dy(i)=-heaviside(y(i))/((1+y(i)^2)*2*C(i))*sum(Terms(indices)); %Differential equation.
end
%Clear computer memory and plots.
clear
close all
clc
options = odeset('RelTol',1e-4,'AbsTol',1e-5); %Options set for the ODE solver.
S=[9 7 6 8 3 8 9]; %Vector of strength values.
A=[7 8 4 3 8 6 3]; %Vector of agility values.
H=[45 65 60 40 90 10 20];%Vector of initial health.
C=S.*A; %The interaction function is scaled by the strength multiplied by the agility.
[T,Y] = ode45(@(t,y) ODES(t,y,C),[0 7000],H,options); % Solve the ODE.
cc=lines(7); % Set the legend colours.
for i=1:7
%Find the last moment alive.
YY=Y(:,i);
YY(YY<0.1)=0;
index=find(YY,1,'last');
YY(YY==0)=nan;
YY(index)=0;
plot(T/60,YY,'linewidth',3,'color',cc(i,:)); %Plot results.
t(i)=T(index)/60;
hold on
end
t %Print out the times of death.
axis([0 60 0 90]) %Set axes.
%Make the plot look nice.
legend('Tall guy','Evil Clown','Pumpkin Head','Baby Man','Hero Girl','Dead Girl','Skin Face','location','northoutside','orientation','horizontal')
xlabel('Time in minutes')
ylabel('Combatant Health')
function dy = ODES(t,y,C)
Terms=y.*C'; %The value of the each combatant's attack.
dy=zeros(7,1); %Preallocation of the variables.
for i=1:7
indices=[1:i-1,i+1:7]; %Indices to be summed over.
dy(i)=-heaviside(y(i))/((1+y(i)^2)*2*C(i))*sum(Terms(indices)); %Differential equation.
end