/// <summary> /// 无警觉模型支配的Tick /// </summary> public static void Unaware_Tick(ILoimology d, ILoimologyCompartment c, IMedic m) { int IcauseE = minMulti(c.meetPerTick * d.infectPerMeet * c.Susceptible / (float)c.Number, c.Infected); int IEcauseE = minMulti(c.meetPerTick * d.infectPerMeet * c.Susceptible / (float)c.Number, c.Exposed + c.Infected); int dS = d.canExposedInfectOthers ? IEcauseE : IcauseE; dS = Mathf.Min(dS, c.Susceptible); dS = -dS; int EcauseI = minMulti(d.symptom, c.Exposed); int dE = -dS - EcauseI; int IcauseD = minMulti(d.selfDead, c.Infected); int IcauseR = minMulti(d.selfCured, c.Infected); if (IcauseD + IcauseR > c.Infected) { IcauseR -= (IcauseD + IcauseR - c.Infected); } int dI = EcauseI - IcauseD - IcauseR; int dT = 0; int dR = IcauseR; int dD = IcauseD; if (dS + dE + dI + dT + dR + dD != 0) { Debug.LogError("Your equation does not equal 0"); } c.dE = dE; c.dI = dI; c.dT = dT; c.dR = dR; c.dD = dD; c.Susceptible += dS; c.Exposed += dE; c.Infected += dI; c.Treated += dT; c.Recovered += dR; c.Death += dD; }
/// <summary> /// SEITRD模型支配的Tick /// </summary> public static void SEITRD_Tick(ILoimology d, ILoimologyCompartment c, IMedic m) { int IcauseE = minMulti(c.meetPerTick * d.infectPerMeet * c.Susceptible / (float)c.Number, c.Infected); int IEcauseE = minMulti(c.meetPerTick * d.infectPerMeet * c.Susceptible / (float)c.Number, c.Exposed + c.Infected); int dS = d.canExposedInfectOthers ? IEcauseE : IcauseE; dS = Mathf.Min(dS, c.Susceptible); dS = -dS; int EcauseI = minMulti(d.symptom, c.Exposed); int dE = -dS - EcauseI; int IcauseD = minMulti(d.selfDead, c.Infected); int IcauseR = minMulti(d.selfCured, c.Infected); if (IcauseD + IcauseR > c.Infected) { IcauseR -= (IcauseD + IcauseR - c.Infected); } int IcauseT = 0; if (c.Infected - IcauseD - IcauseR > 0) { IcauseT = Mathf.Min(c.Infected - IcauseD - IcauseR, m.Empty, m.CureRate); } int dI = EcauseI - IcauseD - IcauseR - IcauseT; int TCauseR = minMulti(d.cured, c.Treated); int TCauseD = minMulti(d.dead, c.Treated); if (TCauseR + TCauseD > c.Treated) { TCauseR -= TCauseR + TCauseD - c.Treated; } int TcauseS = minMulti(d.nonAnitbody, IcauseT); int dT = IcauseT - TcauseS - TCauseD - TCauseR; dS += TcauseS; int dR = TCauseR + IcauseR; int dD = TCauseD + IcauseD; if (dS + dE + dI + dT + dR + dD != 0) { Debug.LogError("Your equation does not equal 0"); } c.dE = dE; c.dI = dI; c.dT = dT; c.dR = dR; c.dD = dD; c.Susceptible += dS; c.Exposed += dE; c.Infected += dI; c.Treated += dT; c.Recovered += dR; c.Death += dD; m.Curing += dT; }