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;
}
}
}