Hello, j ai un plan de calibration (dependant) (en pj) qui stoppe régulièrement mais pas systématiquement a la simulation 16. Voici le message obscur d erreur. vous voyez d ou ca vient ? J'en profite pour vous prevenir que je vais lancer bientot un tres gros plan d exp (des milliers de simus sans rire) et je risque de vous embeter souvent, preparez vous psychologiquement, désolée d avance. Merci S after simulation16 INFO [Thread-7] (DataStorage.java:205) getStorage - Create new storage for sim_calibSar_2010-06-14-19-58_16 INFO [Thread-7] (TopiaContextImpl.java:199) loadServices - Le service topia.service.migration chargé par org.nuiton.topia.migration.TopiaMigrationServiceImpl INFO [Thread-7] (MigrationServiceImpl.java:226) migrateSchema - Starting Topia Migration Service INFO [Thread-7] (MigrationServiceImpl.java:252) migrateSchema - Application version : 3.3, database version : 3.3 INFO [Thread-253] (SubProcessSimulationLauncher.java:264) run - dans un sous processus> INFO [main] (DataStorage.java:205) getStorage - Create new storage for sim_calibSar_2010-06-14-19-58_16 INFO [Thread-253] (SubProcessSimulationLauncher.java:264) run - dans un sous processus> INFO [main] (TopiaContextImpl.java:199) loadServices - Le service topia.service.migration chargé par org.nuiton.topia.migration.TopiaMigrationServiceImpl INFO [Thread-253] (SubProcessSimulationLauncher.java:264) run - dans un sous processus> INFO [main] (MigrationServiceImpl.java:226) migrateSchema - Starting Topia Migration Service INFO [Thread-7] (Resource.java:361) getURLs - search URLs pattern: .*oldmappings/IsisFish/3.3/.*\.hbm\.xml in 84 urls in 2,269s INFO [Thread-7] (MigrationServiceImpl.java:286) migrateSchema - Database is up to date, no migration needed. INFO [Thread-253] (SubProcessSimulationLauncher.java:264) run - dans un sous processus> INFO [main] (MigrationServiceImpl.java:252) migrateSchema - Application version : 3.3, database version : 3.3 INFO [Thread-253] (SubProcessSimulationLauncher.java:264) run - dans un sous processus> INFO [main] (Resource.java:361) getURLs - search URLs pattern: .*oldmappings/IsisFish/3.3/.*\.hbm\.xml in 86 urls in 2,405s INFO [Thread-253] (SubProcessSimulationLauncher.java:264) run - dans un sous processus> INFO [main] (MigrationServiceImpl.java:286) migrateSchema - Database is up to date, no migration needed. INFO [pool-2-thread-1] (SubProcessSimulationLauncher.java:212) subProcessSimulate - SubProcess finished ERROR [Thread-7] (JDBCExceptionReporter.java:101) logExceptions - Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-128] ERROR [Thread-7] (SimulationService.java:915) finished - Stop simulation plan, because can't call afterSimulation correctly on plan analyseplans.Calibrationq0_pelagique org.hibernate.exception.GenericJDBCException: Cannot open connection at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:126) at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:114) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66) at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:52) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:449) at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142) at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85) at org.hibernate.impl.SessionImpl.beginTransaction(SessionImpl.java:1354) at org.nuiton.topia.framework.TopiaContextImpl.beginTransaction(TopiaContextImpl.java:608) at fr.ifremer.isisfish.datastore.ResultStorage.getMatrix(ResultStorage.java:514) at fr.ifremer.isisfish.datastore.ResultStorage.getMatrix(ResultStorage.java:496) at analyseplans.Calibrationq0_pelagique.afterSimulation(Calibrationq0_pelagique.java:199) at fr.ifremer.isisfish.simulator.launcher.SimulationService$PrepareSimulationJob.finished(SimulationService.java:912) at fr.ifremer.isisfish.simulator.launcher.SimulationMonitor.doPostSimulationOperation(SimulationMonitor.java:603) at fr.ifremer.isisfish.simulator.launcher.SimulationMonitor.waitAndCheckProgression(SimulationMonitor.java:470) at fr.ifremer.isisfish.simulator.launcher.SimulationMonitor.run(SimulationMonitor.java:413) Caused by: org.h2.jdbc.JdbcSQLException: Database may be already in use: "Locked by another process". Possible solutions: close all other connection(s); use the server mode [90020-128] at org.h2.message.Message.getSQLException(Message.java:110) at org.h2.message.Message.getSQLException(Message.java:121) at org.h2.message.Message.getSQLException(Message.java:74) at org.h2.store.FileLock.getExceptionAlreadyInUse(FileLock.java:474) at org.h2.store.FileLock.lockFile(FileLock.java:333) at org.h2.store.FileLock.lock(FileLock.java:131) at org.h2.engine.Database.open(Database.java:614) at org.h2.engine.Database.openDatabase(Database.java:228) at org.h2.engine.Database.<init>(Database.java:223) at org.h2.engine.Engine.openSession(Engine.java:58) at org.h2.engine.Engine.openSession(Engine.java:142) at org.h2.engine.Engine.getSession(Engine.java:122) at org.h2.engine.SessionFactoryEmbedded.createSession(SessionFactoryEmbedded.java:17) at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:245) at org.h2.engine.SessionRemote.createSession(SessionRemote.java:223) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:110) at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:94) at org.h2.Driver.connect(Driver.java:58) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.hibernate.connection.DriverManagerConnectionProvider.getConnection(DriverManagerConnectionProvider.java:133) at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) ... 12 more INFO [Thread-7] (SimulationMonitor.java:397) simulationStop - Saving simulation sim_calibSar_2010-06-14-19-58_16 as stopped -- Sigrid LEHUTA ~ ><> ~ Doctorante Département Ecologie et Modèles pour l'Halieutique IFREMER, rue de l'ile d'Yeu BP 21105 44311 Nantes Cedex 03 Tél : +33 (0)2 40 37 41 23 (interne : 8123) package analyseplans; import static org.nuiton.i18n.I18n._; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import scripts.ResultName; import java.io.*; import java.util.*; import org.nuiton.math.matrix.*; import org.nuiton.topia.*;// pour pouvoir utiliser la methode StringUtil.toDouble() import org.nuiton.util.*;// pour pouvoir utiliser la methode StringUtil.toDouble() import fr.ifremer.isisfish.*; import fr.ifremer.isisfish.types.*; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.types.Date; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.simulator.AnalysePlan; import fr.ifremer.isisfish.simulator.AnalysePlanContext; import fr.ifremer.isisfish.simulator.SimulationParameter; import fr.ifremer.isisfish.datastore.SimulationStorage; import fr.ifremer.isisfish.datastore.ResultStorage; /** * CalibrationAnchoisq1q2Export.java * * Created: 07/06/10 * * @author <> * @version $Revision: 3.2 $ * * Last update: $Date: 2007/05/24 09:29:18 $ * by : $Author: bpoussin $ */ public class Calibrationq0_pelagique implements AnalysePlan { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory.getLog(Calibrationq0_pelagique.class); enum State {STATE_INIT, STATE_0, STATE_1, STATE_2, STATE_3, STATE_4}; public String param_nomFileHisto = "Inputs_Anchois/CalibrationSardine/histo.csv"; //public String param_nomFileHisto = "Inputs_Anchois/CalibrationThon/histo.csv"; File exportHistoric = new File (param_nomFileHisto); protected String exportHisto = ""; //parametres de la simu 5 points initiaux d un simplex d ordre 2 public Population param_Population = null; public Double param_M1 = 1.1e-4;// devient un parametre du plan d analyse public Double param_M2 = 1.2e-4;// devient un parametre du plan d analyse public Double param_M3 = 1.3e-4;// devient un parametre du plan d analyse public Double param_M4 = 1.4e-4;// devient un parametre du plan d analyse public Double param_M5 = 1.5e-4;// devient un parametre du plan d analyse //public String param_pas = "1e-5";// devient un parametre du plan d analyse public String param_nomfichier_debarquements = "Inputs_Anchois/CalibrationSardine/DebarquementsSardine.csv";//nom + chemin du fichier contenant les debarquements observes par mois et strategie //public String param_nomfichier_debarquements = "Inputs_Anchois/CalibrationThon/DebarquementsThon.csv";//nom + chemin du fichier contenant les debarquements observes par mois et strategie protected File debarquementsObserves; protected MatrixND matrixDebarquement; protected String[] strNomsNous; protected List<Strategy> strNous; protected List<Double> q; protected List<Double> Fobj = new ArrayList<Double>(); public String [] necessaryResult = { ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP, }; public String[] getNecessaryResult() { return this.necessaryResult; } /** * Permet d'afficher a l'utilisateur une aide sur le plan. * @return L'aide ou la description du plan */ public String getDescription() throws Exception { return _("Single Factor Optimization Walters et al"); } /** * Appele au demarrage de la simulation, cette methode permet d'initialiser * des valeurs * @param simulation La simulation pour lequel on utilise cette regle */ public void init(AnalysePlanContext context) throws Exception { if (param_nomfichier_debarquements==null || "".equals(param_nomfichier_debarquements)){ debarquementsObserves = FileUtil.getFile(".*.csv", "fichier csv"); } else { debarquementsObserves = new File(param_nomfichier_debarquements); } q = new ArrayList<Double>(); q.add(param_M1); q.add(param_M2); q.add(param_M3); q.add(param_M4); q.add(param_M5); int nbYear = context.getParam().getNumberOfYear(); List<Strategy> allStrategies = context.getParam().getStrategies(); strNomsNous = new String[]{"PelProfil1","PelProfil2","BolBasques","BolBretons"}; //strNomsNous = new String[]{"PelProfil1","PelProfil2"}; strNous = new ArrayList<Strategy>(); for(String strNomCurrent : strNomsNous){ for (Strategy s : allStrategies){ if(s.getName().equals(strNomCurrent)){ strNous.add(s); } } } int dateFin = nbYear*12; List<Date> dates = new ArrayList<Date>(); for(int i=0; i<dateFin;i++){ dates.add(new Date(i)); } TopiaContext db = context.getParam().getRegion().getStorage().beginTransaction(); Population pop = (Population)db.findByTopiaId(param_Population.getTopiaId()); matrixDebarquement = MatrixFactory.getInstance().create( "matDebarq", new List[]{dates,strNous}, new String[]{"Dates","strategies"}); matrixDebarquement.importCSV(new FileReader(debarquementsObserves),new int []{0,0}); log.info("MatrixDebarquement : "+ matrixDebarquement); db.closeContext(); } /** * Call before each simulation * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ public boolean beforeSimulation(AnalysePlanContext context, SimulationStorage nextSimulation) throws Exception { boolean doNext = true; int number = nextSimulation.getParameter().getAnalysePlanNumber(); log.info("before simulation" + number); if(number <31){ double pasInitial = q.get(1)-q.get(0); if (number <5) { log.info("number<5"); changeDB(q.get(number), nextSimulation); }else if(number == 5){ int min = compareTo(Fobj); double newq = q.get(min); double pas = pasInitial/2; newq = newq - pas; q.add(newq); }else if(number == 6){ int min = compareTo(Fobj.subList(0,number-2)); double newq = q.get(min); double pas = pasInitial/2; newq = newq + pas; q.add(newq); } else { if(!isPair(number)){ int min = compare2(Fobj.get(number-2),Fobj.get(number-1)); System.out.println("Simu:"+number+" compare :"+Fobj.get(number-2)+" et "+ Fobj.get(number-1)+" min est "+min); double newq = q.get(number-2+min); int puiss = (number-3)/2; double pas = pasInitial/Math.pow(2.0,puiss); newq = newq - pas; q.add(newq); }else{ int min = compare2(Fobj.get(number-3),Fobj.get(number-2)); System.out.println("Simu:"+number+" compare :"+Fobj.get(number-2)+" et "+ Fobj.get(number-1)+" min est "+min); double newq = q.get(number-3+min); int puiss = (number - 4)/2; double pas = pasInitial/Math.pow(2.0,puiss); newq = newq + pas; q.add(newq); } } changeDB(q.get(number), nextSimulation); }else doNext = false; return doNext; }// fin du before simulation /** * Call after each simulation, compute criteria for last simulation * @param context plan context * @param nextSimulation storage used for next simulation * @return true if we must do next simulation, false to stop plan * @throws Exception */ public boolean afterSimulation(AnalysePlanContext context, SimulationStorage lastSimulation) throws Exception { int number = lastSimulation.getParameter().getAnalysePlanNumber(); //int number = context.getNumber(); System.out.println("after simulation" + number); ResultStorage result = lastSimulation.getResultStorage(); // Pour sommer sur certaines classes les resultats : MatrixND L2 = result.getMatrix(param_Population, ResultName.MATRIX_CATCH_WEIGHT_PER_STRATEGY_MET_PER_ZONE_POP); List<Strategy> str = (List<Strategy>)L2.getSemantic(1); System.out.println("import de la matrice des debarquements"); //pour reccuperer les index des strategies francaises int comptSt = 0; int comptTab = 0; int[] elem = new int[strNous.size()]; for(Strategy st : str){ if (strNous.contains(st)){ elem[comptTab] = comptSt; comptTab +=1; } comptSt += 1; } MatrixND L = L2.getSubMatrix(1,elem).copy(); L = L.sumOverDim(3);// sum sur les groupes L = L.sumOverDim(2);// sum sur les metiers L = L.sumOverDim(4);// sum sur les zones L = L.reduce(); // supprime les dimensions de taille 0 ///////////////////Calcul de la fonction objectif////////////////// log.info("calcul de la fobj"); System.out.println("dim de L" + " " + Arrays.toString(L.getDim())); System.out.println("matrice de debarquements : "+ L); double crit = 0; for ( MatrixIterator g = L.iterator(); g.hasNext();){ g.next(); //boucle sur les dates et les flottilles Strategy s = (Strategy)g.getSemanticsCoordinates()[1]; Date dat = (Date)g.getSemanticsCoordinates()[0]; // int [] dim = g.getCoordinates(); double obs = matrixDebarquement.getValue(dat,s); double simules = g.getValue(); double sum_pond = obs-simules; crit += Math.pow(sum_pond, 2); // crit = crit + (obs-simules)^2 }// fin du for System.out.println("critere " + number + " = " + crit ); Fobj.add(crit); //ecriture de la table historic exportHisto += q.get(number) +";"+ Fobj.get(number) + "\n"; org.nuiton.util.FileUtil.writeString(exportHistoric, exportHisto); return true; }// fin du after simulation /** * Modify nextSimulation database with q1 and q2 in exp. * @param exp * @param nextSimulation * @throws Exception */ protected void changeDB(Double q, SimulationStorage nextSimulation) throws Exception { //methode appelee dans before simualtion TopiaContext db = nextSimulation.getStorage().beginTransaction();//ouvrir un context pour modifier les donnees Population pop = (Population)db.findByTopiaId(param_Population.getTopiaId()); //reccupere la pop ciblee MatrixND c = pop.getCapturability(); // reccupere la matrice de capturabilità for (MatrixIterator i = c.iterator(); i.hasNext();){ i.next(); i.setValue(q); }//fin du for db.commitTransaction(); // effectue la modification db.closeContext(); // ferme le context } public int compareTo(List<Double> listCrit) { int N = listCrit.size(); System.out.println("taille de la liste :"+N); int minimum=0; for(int i=0; i<N; i++) { System.out.println("i = "+i); if (listCrit.get(i)<listCrit.get(minimum)){minimum = i;} } return minimum; } public int compare2(Double f1,Double f2){ int minimum=0; if (f2<f1) minimum = 1; return minimum; } public boolean isPair(int nombre){ if((nombre-1)%2 == 1){ return true ; }else{ return false; } } }