diff --git a/data/input/fishTryRealBV_CC.xml b/data/input/fishTryRealBV_CC.xml index f78f02ec24b7201d261362d5b26b25947499a884..b572f72a1fcb82d798547c84730a69fb519c725e 100644 --- a/data/input/fishTryRealBV_CC.xml +++ b/data/input/fishTryRealBV_CC.xml @@ -287,9 +287,9 @@ <species.Survive> <synchronisationMode>ASYNCHRONOUS</synchronisationMode> - <tempMinMortGenInRiv>10.0</tempMinMortGenInRiv> - <tempMaxMortGenInRiv>23.0</tempMaxMortGenInRiv> - <tempOptMortGenInRiv>20.0</tempOptMortGenInRiv> + <tempMinSurvivalSpawnerInRiv>10.0</tempMinSurvivalSpawnerInRiv> + <tempMaxSurvivalSpawnerInRiv>23.0</tempMaxSurvivalSpawnerInRiv> + <!-- <tempOptSurvivalSpawnerInRiv>20.0</tempOptSurvivalSpawnerInRiv> --> <survivalProbOptGenInRiv>1.0</survivalProbOptGenInRiv> <mortalityRateInRiver>0.4</mortalityRateInRiver> <mortalityRateInSea>0.4</mortalityRateInSea> diff --git a/src/main/java/miscellaneous/Miscellaneous.java b/src/main/java/miscellaneous/Miscellaneous.java index 8b364010cfc3c6b1eb17e324165dc0c8d60db048..dcd713823f108a841bf08364bfb3e2ee0278d213 100644 --- a/src/main/java/miscellaneous/Miscellaneous.java +++ b/src/main/java/miscellaneous/Miscellaneous.java @@ -6,41 +6,51 @@ import umontreal.iro.lecuyer.randvar.UniformGen; public class Miscellaneous { - public static long binomialForSuperIndividual(Pilot pilot, long amount, double succesProba, long threshold) { - long amountWithSuccess; - if (amount > threshold) { // use a normal approximation for huge amount + public static long binomialForSuperIndividual(Pilot pilot, long amount, double succesProba, long threshold) { + long amountWithSuccess; + if (amount > threshold) { // use a normal approximation for huge amount /* double p=-1.; while (p<0 | p>1){ p = genAleaNormal.nextDouble() * Math.sqrt(succesProba * (1 - succesProba) /amount) + succesProba; } amountWithSuccess = (long) Math.round(p* amount);*/ - amountWithSuccess = -1; - while (amountWithSuccess < 0 | amountWithSuccess > amount) { - amountWithSuccess = Math.round(NormalGen.nextDouble(pilot.getRandomStream(), 0., 1.) * Math.sqrt(succesProba * (1 - succesProba) * amount) - + succesProba * amount); - } - - } else { - amountWithSuccess = 0; - for (long i = 0; i < amount; i++) { - if (UniformGen.nextDouble(pilot.getRandomStream(), 0, 1) < succesProba) { - amountWithSuccess++; - } - } - } - return amountWithSuccess; - } - - public static long binomialForSuperIndividual(Pilot pilot, long amount, double succesProba) { - return binomialForSuperIndividual(pilot, amount, succesProba, 50); - } - - static public double temperatureEffect(double T, double Tmin, double Topt, double Tmax) { - if (T <= Tmin || T >= Tmax) { - return 0; - } else { - return (T - Tmin) * (T - Tmax) / ((T - Tmin) * (T - Tmax) - ((T - Topt) * (T-Topt))); - } - } + amountWithSuccess = -1; + while (amountWithSuccess < 0 | amountWithSuccess > amount) { + amountWithSuccess = Math.round(NormalGen.nextDouble(pilot.getRandomStream(), 0., 1.) * Math.sqrt(succesProba * (1 - succesProba) * amount) + + succesProba * amount); + } + + } else { + amountWithSuccess = 0; + for (long i = 0; i < amount; i++) { + if (UniformGen.nextDouble(pilot.getRandomStream(), 0, 1) < succesProba) { + amountWithSuccess++; + } + } + } + return amountWithSuccess; + } + + public static long binomialForSuperIndividual(Pilot pilot, long amount, double succesProba) { + return binomialForSuperIndividual(pilot, amount, succesProba, 50); + } + + static public double temperatureEffect(double T, double Tmin, double Topt, double Tmax) { + if (T <= Tmin || T >= Tmax) { + return 0; + } else { + return (T - Tmin) * (T - Tmax) / ((T - Tmin) * (T - Tmax) - ((T - Topt) * (T-Topt))); + } + } + + static public double rectangularTemperatureEffect(double T, double Tmin, double Tmax) { + if (T <= Tmin || T >= Tmax) { + return 0; + } else { + return 1; + } + } } + + diff --git a/src/main/java/species/Survive.java b/src/main/java/species/Survive.java index 2b6fc5a4371e39f57704cd373efcb7aaffa49dbd..214e038fac08c68285eceffa4449569b64d7cbf0 100644 --- a/src/main/java/species/Survive.java +++ b/src/main/java/species/Survive.java @@ -19,9 +19,9 @@ import org.openide.util.lookup.ServiceProvider; @ServiceProvider(service = AquaNismsGroupProcess.class) public class Survive extends AquaNismsGroupProcess<DiadromousFish, DiadromousFishGroup> { - public double tempMinMortGenInRiv = 10.; - public double tempMaxMortGenInRiv = 23.; // DEFINIR TROIS AUTRES POUR MORTALITE - public double tempOptMortGenInRiv = 20.; + public double tempMinSurvivalSpawnerInRiv = 10.; + public double tempMaxSurvivalSpawnerInRiv = 23.; // DEFINIR TROIS AUTRES POUR MORTALITE + public double tempOptSurvivalSpawnerInRiv = 20.; public double survivalProbOptGenInRiv = 1.; public double mortalityRateInRiver = 0.4; @@ -43,7 +43,8 @@ public class Survive extends AquaNismsGroupProcess<DiadromousFish, DiadromousFis survivalProbability = 1.; //Survive if(fish.getPosition().getType() == TypeBassin.RIVER && fish.isMature()){ - double tempEffectSurv = Miscellaneous.temperatureEffect(fish.getPosition().getCurrentTemperature(group.getPilot()), tempMinMortGenInRiv, tempOptMortGenInRiv, tempMaxMortGenInRiv); + //double tempEffectSurv = Miscellaneous.temperatureEffect(fish.getPosition().getCurrentTemperature(group.getPilot()), tempMinSurvivalSpawnerInRiv, tempOptSurvivalSpawnerInRiv, tempMaxSurvivalSpawnerInRiv); + double tempEffectSurv = Miscellaneous.rectangularTemperatureEffect(fish.getPosition().getCurrentTemperature(group.getPilot()), tempMinSurvivalSpawnerInRiv, tempMaxSurvivalSpawnerInRiv); if (tempEffectSurv == 0.){ survivalProbability = 0.; //System.out.println("le poisson situ� dans le bassin " + fish.getPosition().getName() + " en " + Time.getSeason() +" a un coeff de mortalit� de " + fish.getMortalityRateInRiver() + " mais � cause de la temp�rature une prob de survie de " + survivalProbability);