Le 25/03/2019 à 10:10, Sophie LEFORESTIER a écrit :
Bonjour Eric,
Oui en effet c'est le mois de février qui est très long à tourner à cause des équations de migration, émigration et immigration pour chacune des trois sous-populations.
On pourrait peut-être écrire ces équations différemment pour espérer gagner du temps de simulation, qu'en penses-tu?
As oui en effet, je pensais que tes equations était simple, je viens d'en voir une un peu plus compliqué. Dans cette equations (Sole3z_UK) : TimeStep date = context.getSimulationControl().getStep(); //List<Population> pops = context.getSimulationStorage().getParameter().getPopulations(); List<Population> pops = context.getPopulationMonitor().getPopulations(); double result = 0; double newJuv_Rye = 0; double newJuv_UKwest = 0; for(Population p : pops){ if(p.getSpecies().equals(pop.getSpecies()) && !p.equals(pop)){ String name = "MatrixAbundance"; MatrixND ab = context.getResultManager().getMatrix(date,pop,name).copy(); //MatrixND ab = context.getPopulationMonitor().getN(p); ab = ab.getSubMatrix(0,0,1);// ages 1 for (MatrixIterator i = ab.iterator(); i.hasNext();) { i.next(); Object[] sem = i.getSemanticsCoordinates(); Zone zoneRecru = (Zone) sem[1]; if(zoneRecru.getName().equals("Sole_nurs_Rye") ){ newJuv_Rye+= i.getValue(); }else if(zoneRecru.getName().equals("Sole_nurs_UKwest")){ newJuv_UKwest += i.getValue(); } } } } if (group.getAge() == 1) { String zoneName = arrivalZone.getName(); if (zoneName.equals("Sole_nurs_Rye")) { result = newJuv_Rye; }else if(zoneName.equals("Sole_nurs_UKwest")) { result = newJuv_UKwest; } return result; } else return 0; Tu fais plein de chose avec "MatrixAbundance", mais si ton groupe n'est pas "1" oui si les zones ne sont pas "Sole_nurs_Rye" et "Sole_nurs_UKwest", tu fais tout ce travail pour rien. Tu pourrais bien optimiser l'equation en déplacant simplement le IF : TimeStep date = context.getSimulationControl().getStep(); List<Population> pops = context.getPopulationMonitor().getPopulations(); double result = 0; if (group.getAge() == 1 && ( zoneName.equals("Sole_nurs_Rye") || zoneName.equals("Sole_nurs_UKwest")) ) { for(Population p : pops){ if(p.getSpecies().equals(pop.getSpecies()) && !p.equals(pop)){ String name = "MatrixAbundance"; MatrixND ab = context.getResultManager().getMatrix(date,pop,name).copy(); //MatrixND ab = context.getPopulationMonitor().getN(p); ab = ab.getSubMatrix(0,0,1);// ages 1 for (MatrixIterator i = ab.iterator(); i.hasNext();) { i.next(); Object[] sem = i.getSemanticsCoordinates(); Zone zoneRecru = (Zone) sem[1]; if(zoneRecru.getName().equals("Sole_nurs_Rye") ){ newJuv_Rye+= i.getValue(); }else if(zoneRecru.getName().equals("Sole_nurs_UKwest")){ newJuv_UKwest += i.getValue(); } } } } String zoneName = arrivalZone.getName(); if (zoneName.equals("Sole_nurs_Rye")) { result = newJuv_Rye; } else if(zoneName.equals("Sole_nurs_UKwest")) { result = newJuv_UKwest; } } return result; Il y en a deux autres à faire aussi dans Sole3z_WestFR et Sole3z_EastFR. -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28