Mise à jour des scripts dans ISIS et pb de fmin
Bonjour les lutins, Je rencontre un petit problème avec la v 4.1.0.3 depuis ce matin : quand je modifie un script dans notepad++ il refuse de se mettre à jour dans ISIS (pourtant je fais comme d'habitude, je charge un autre script avant de revenir sur celui à mettre à jour). Je rencontre aussi un problème de dimensions de ma matrice de F par pop, qui vient d'un problème de dimensions de la matrice de F par groupe, qui semble venir du calcul de Fgroup et de fmin, car il apparait que tfgMatrix et tfmMatrix sont des matrices colonne remplies de 0 (mais représentant le bon nombre de groupes à priori)... le soucis est que je ne vois pas quelle pourrait être la cause d'un mauvais fonctionnement de fmin (pour peu que le problème vienne bien de là)... J'ai mis le log d'une simu en pièce jointe, il contient le message d'erreur et les valeurs des logs des valeurs et noms des dimensions des matrices. Loïc
Le 13/08/2012 13:32, Loic GASCHE a écrit :
Bonjour les lutins,
Je rencontre un petit problème avec la v 4.1.0.3 depuis ce matin : quand je modifie un script dans notepad++ il refuse de se mettre à jour dans ISIS (pourtant je fais comme d'habitude, je charge un autre script avant de revenir sur celui à mettre à jour).
En fait c'est étrange : - Script ouvert dans notepad (mais bien sauvegardé) --> ISIS ne le met pas à jour - Script ouvert dans notepad (mais bien sauvegardé), redémarrage d'ISIS --> ISIS ne le met pas à jour - Redémarrage de Notepad et ISIS --> le script de notepad est revenu à son ancienne version --> modif puis sauvegarde du script --> ISIS arrive à charger le script modifié. Donc le pb ne vient peut-être pas de ISIS ?...
Je rencontre aussi un problème de dimensions de ma matrice de F par pop, qui vient d'un problème de dimensions de la matrice de F par groupe, qui semble venir du calcul de Fgroup et de fmin, car il apparait que tfgMatrix et tfmMatrix sont des matrices colonne remplies de 0 (mais représentant le bon nombre de groupes à priori)... le soucis est que je ne vois pas quelle pourrait être la cause d'un mauvais fonctionnement de fmin (pour peu que le problème vienne bien de là)... J'ai mis le log d'une simu en pièce jointe, il contient le message d'erreur et les valeurs des logs des valeurs et noms des dimensions des matrices.
Loïc
Le 13/08/2012 13:51, Loic GASCHE a écrit :
Le 13/08/2012 13:32, Loic GASCHE a écrit :
Bonjour les lutins,
Salut,
Je rencontre un petit problème avec la v 4.1.0.3 depuis ce matin : quand je modifie un script dans notepad++ il refuse de se mettre à jour dans ISIS (pourtant je fais comme d'habitude, je charge un autre script avant de revenir sur celui à mettre à jour).
En fait c'est étrange : - Script ouvert dans notepad (mais bien sauvegardé) --> ISIS ne le met pas à jour - Script ouvert dans notepad (mais bien sauvegardé), redémarrage d'ISIS --> ISIS ne le met pas à jour - Redémarrage de Notepad et ISIS --> le script de notepad est revenu à son ancienne version --> modif puis sauvegarde du script --> ISIS arrive à charger le script modifié.
Donc le pb ne vient peut-être pas de ISIS ?... Non, il y a peu de chances. D'autant plus qu'il n'y a pas eu de modification de ce coté depuis un moment dans isis.
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 13:32, Loic GASCHE a écrit :
Bonjour les lutins,
[...] Je rencontre aussi un problème de dimensions de ma matrice de F par pop, qui vient d'un problème de dimensions de la matrice de F par groupe, qui semble venir du calcul de Fgroup et de fmin, car il apparait que tfgMatrix et tfmMatrix sont des matrices colonne remplies de 0 (mais représentant le bon nombre de groupes à priori)... le soucis est que je ne vois pas quelle pourrait être la cause d'un mauvais fonctionnement de fmin (pour peu que le problème vienne bien de là)... J'ai mis le log d'une simu en pièce jointe, il contient le message d'erreur et les valeurs des logs des valeurs et noms des dimensions des matrices. Je n'ai pas le code de SImatrix, mais: tu doit faire quelque chose comme: Matrix m2 = m1.getSubMatrix(2, elem1, elem2);
Donc: - soit m1 a moins de 3 dimensions - soit les elements "elem1", "elem2" ... ne font pas partie de la troisième sémantique (index 2) -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 14:14, Eric Chatellier a écrit :
Le 13/08/2012 13:32, Loic GASCHE a écrit :
Bonjour les lutins,
[...] Je rencontre aussi un problème de dimensions de ma matrice de F par pop, qui vient d'un problème de dimensions de la matrice de F par groupe, qui semble venir du calcul de Fgroup et de fmin, car il apparait que tfgMatrix et tfmMatrix sont des matrices colonne remplies de 0 (mais représentant le bon nombre de groupes à priori)... le soucis est que je ne vois pas quelle pourrait être la cause d'un mauvais fonctionnement de fmin (pour peu que le problème vienne bien de là)... J'ai mis le log d'une simu en pièce jointe, il contient le message d'erreur et les valeurs des logs des valeurs et noms des dimensions des matrices. Je n'ai pas le code de SImatrix, mais: tu doit faire quelque chose comme: Matrix m2 = m1.getSubMatrix(2, elem1, elem2);
Donc: - soit m1 a moins de 3 dimensions - soit les elements "elem1", "elem2" ... ne font pas partie de la troisième sémantique (index 2) En fait vu l'erreur, ta matrice a moins de 3 dimensions (la semantique à l'index 2 n'existe pas).
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 14:18, Eric Chatellier a écrit :
Le 13/08/2012 14:14, Eric Chatellier a écrit :
Le 13/08/2012 13:32, Loic GASCHE a écrit :
Bonjour les lutins,
[...] Je rencontre aussi un problème de dimensions de ma matrice de F par pop, qui vient d'un problème de dimensions de la matrice de F par groupe, qui semble venir du calcul de Fgroup et de fmin, car il apparait que tfgMatrix et tfmMatrix sont des matrices colonne remplies de 0 (mais représentant le bon nombre de groupes à priori)... le soucis est que je ne vois pas quelle pourrait être la cause d'un mauvais fonctionnement de fmin (pour peu que le problème vienne bien de là)... J'ai mis le log d'une simu en pièce jointe, il contient le message d'erreur et les valeurs des logs des valeurs et noms des dimensions des matrices. Je n'ai pas le code de SImatrix, mais: tu doit faire quelque chose comme: Matrix m2 = m1.getSubMatrix(2, elem1, elem2);
Donc: - soit m1 a moins de 3 dimensions - soit les elements "elem1", "elem2" ... ne font pas partie de la troisième sémantique (index 2) En fait vu l'erreur, ta matrice a moins de 3 dimensions (la semantique à l'index 2 n'existe pas).
Oui je suis d'accord, mais le fait qu'il manque des dimensions ne peut-il pas venir du fait que la matrice n'est pas créée comme il faut, parce que Fgroup n'est pas calculé (par exemple) ? Ce qui modifierait les dimensions de la matrice ? Je m'acharne sur Fgroup car j'ai mis un log dessus mais je ne le trouve pas dans les simulation.log alors je me dis qu'il y a peut-être un problème de ce côté ?
Le 13/08/2012 15:08, Loic GASCHE a écrit :
Oui je suis d'accord, mais le fait qu'il manque des dimensions ne peut-il pas venir du fait que la matrice n'est pas créée comme il faut, parce que Fgroup n'est pas calculé (par exemple) ? Ce qui modifierait les dimensions de la matrice ? Je m'acharne sur Fgroup car j'ai mis un log dessus mais je ne le trouve pas dans les simulation.log alors je me dis qu'il y a peut-être un problème de ce côté ?
Dans ton cas, tu appelles getSubMatrix() sur une matrice qui existe. D'où viens cette matrice ? Tu as un exemple de code qui la récupère ou qui la crée ? -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 15:07, Eric Chatellier a écrit :
Le 13/08/2012 15:08, Loic GASCHE a écrit :
Oui je suis d'accord, mais le fait qu'il manque des dimensions ne peut-il pas venir du fait que la matrice n'est pas créée comme il faut, parce que Fgroup n'est pas calculé (par exemple) ? Ce qui modifierait les dimensions de la matrice ? Je m'acharne sur Fgroup car j'ai mis un log dessus mais je ne le trouve pas dans les simulation.log alors je me dis qu'il y a peut-être un problème de ce côté ?
Dans ton cas, tu appelles getSubMatrix() sur une matrice qui existe. D'où viens cette matrice ? Tu as un exemple de code qui la récupère ou qui la crée ?
public MatrixND TotalFishingMortality (TimeStep step, Population pop, MatrixND FishingMortalityPerGroup)throws TopiaException { // Zone zone double Ftemp=0; double Fpop=0; double Nbre; MatrixND tfmMatrix = FishingMortalityPerGroup.copy(); tfmMatrix.setName(ResultName.MATRIX_TOTAL_FISHING_MORTALITY); log.info("tfmMatrix = " + tfmMatrix); log.info("DimensionNames() = " + tfmMatrix.getDimensionNames()); List<Population> populations = new ArrayList(); populations.add(pop); //log.info("pop = " + pop + "Year=" + step.getYear()); //List<Population> populations = getPopulations(step); List<PopulationGroup> groups = pop.getPopulationGroup(); // On ne fait l'analyse que sur les groupes representatifs double AgeMin = context.get(pop).getAsDouble("AgeMin"); double AgeMax = context.get(pop).getAsDouble("AgeMax"); Nbre= AgeMax-AgeMin+1; log.info("AgeMin = " + AgeMin); log.info("AgeMax = " + AgeMax); tfmMatrix = tfmMatrix.getSubMatrix(2, AgeMin, Nbre); // MatrixND getSubMatrix(int dim,,int start, int nb) tfmMatrix = tfmMatrix.meanOverDim(2); log.info("tfmMatrix = " + tfmMatrix); //Fpop = Ftemp / groupesRepresentatifs.size(); // Moyenne sur les groupes representatifs //log.info("Fpop= " + Fpop + "pop=" + pop +"Year=" + step.getYear()); return tfmMatrix; }
Le 13/08/2012 15:15, Loic GASCHE a écrit :
Le 13/08/2012 15:07, Eric Chatellier a écrit :
Dans ton cas, tu appelles getSubMatrix() sur une matrice qui existe. D'où viens cette matrice ? Tu as un exemple de code qui la récupère ou qui la crée ?
public MatrixND TotalFishingMortality (TimeStep step, Population pop, MatrixND FishingMortalityPerGroup)throws TopiaException { // Zone zone double Ftemp=0; double Fpop=0; double Nbre;
MatrixND tfmMatrix = FishingMortalityPerGroup.copy();
C'est une copy de FishingMortalityPerGroup ? Tu aurais le code de celle ci ? -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 15:20, Eric Chatellier a écrit :
Le 13/08/2012 15:15, Loic GASCHE a écrit :
Le 13/08/2012 15:07, Eric Chatellier a écrit :
Dans ton cas, tu appelles getSubMatrix() sur une matrice qui existe. D'où viens cette matrice ? Tu as un exemple de code qui la récupère ou qui la crée ?
public MatrixND TotalFishingMortality (TimeStep step, Population pop, MatrixND FishingMortalityPerGroup)throws TopiaException { // Zone zone double Ftemp=0; double Fpop=0; double Nbre;
MatrixND tfmMatrix = FishingMortalityPerGroup.copy();
C'est une copy de FishingMortalityPerGroup ?
Oui c'est ça
Tu aurais le code de celle ci ?
public MatrixND FishingMortalityPerGroup (TimeStep step, Population pop, ResultStorage resManager)throws TopiaException { double Fgroup=0; double Ftemp=0; double Fpop=0; double Cgroup=0; double Ctot=0; double SumMtot=0; double Mpop=0; double Mgroup=0; double Mtot=0; double NgroupJan=0; double NgroupDec=0; double DeltaN=0; int dim1; int dim2; List<Population> populations = new ArrayList(); populations.add(pop); List<PopulationGroup> groups = pop.getPopulationGroup(); MatrixND tfgMatrix = MatrixFactory.getInstance().create( ResultName.MATRIX_FISHING_MORTALITY_PER_GROUP, new List[]{populations, groups}, // On travaille sur les pops ET les groupes new String[]{n_("Population"), n_("Group")}); //if (step.getMonth() == Month.DECEMBER){ for (PopulationGroup group : groups) { if (step.getMonth() == Month.DECEMBER){ MatrixND catchPerStrategy = null; for (TimeStep loopstep = new TimeStep(step.getYear() * 12); loopstep.beforeOrEquals(step); loopstep=loopstep.next()){ // On fait cette boucle pour contourner les aspects de cache qui font que les resultats ne sont pas recuperes //s'ils ont deja ete calcules une fois (meme s'ils ont change depuis) // beforeOrEquals sert a bien prendre Decembre aussi MatrixND catchPerStrategyTemp = resManager.getMatrix(loopstep, pop, ResultName.MATRIX_CATCH_PER_STRATEGY_MET_PER_ZONE_POP); if (catchPerStrategy == null){ catchPerStrategy = catchPerStrategyTemp.clone(); // On clone la matrice car si on fait les operations sur celle contenue dans le cache on la modifie et donc on recupere des resultats faux. } else { catchPerStrategy = catchPerStrategy.add(catchPerStrategyTemp); // Pour avoir la somme des captures sur les 12 mois } } log.info("catchPerStrategy = " + catchPerStrategy); catchPerStrategy = catchPerStrategy.sumOverDim(0); // Strategy catchPerStrategy = catchPerStrategy.sumOverDim(1); // Metier catchPerStrategy = catchPerStrategy.sumOverDim(3); // Zone : une pop peut avoir plusieurs zonespop dans ISIS List semgroup = catchPerStrategy.getSemantic(2); catchPerStrategy = catchPerStrategy.reduce(); // Enleve les dimensions de taille 1 catchPerStrategy.setSemantic(0,semgroup); // Ne plait pas a Eric Cgroup = catchPerStrategy.getValue(group); log.info("Cgroup = " + Cgroup + "Year=" + step.getYear()); log.info("catchPerStrategy = " + catchPerStrategy + "Year=" + step.getYear()); MatrixND naturalDeathRatePop = pop.getNaturalDeathRateMatrix(); naturalDeathRatePop = naturalDeathRatePop.meanOverDim(1); // moyenne sur Zone naturalDeathRatePop = naturalDeathRatePop.reduce(); // Enleve les dimensions de taille 1 Mgroup = naturalDeathRatePop.getValue(group); log.info("Mgroup= " + Mgroup + "Year=" + step.getYear()); MatrixND abundancePopJan = resManager.getMatrix(new TimeStep(12*step.getYear()), pop, ResultName.MATRIX_ABUNDANCE); // Le timestep 0 correspond a janvier de la premiere annee et les annees sont numerotees a partir de zero abundancePopJan = abundancePopJan.sumOverDim(1); // somme sur Zone abundancePopJan = abundancePopJan.reduce(); NgroupJan = abundancePopJan.getValue(group); log.info("NgroupJan = " + NgroupJan + "Year=" + step.getYear()); //Fgroup = RuleUtil.fmin(step,0.0,2.0,1.0e-10,Cgroup,Mgroup,NgroupJan); Fgroup = RuleUtil.fmin(step,0.0,2.0,1.0e-10, new FonctionObjectif_Baranov(Cgroup,Mgroup,NgroupJan)); log.info("Fgroup = " + Fgroup); tfgMatrix.setValue(pop, group, Fgroup); // Bien faire attention a l'endroit ou on met cette etape (quelle boucle) ? } else { //Fgroup = 0; // Ce n'est plus une valeur unique mais une matrice, est-ce que cette notation peut fonctionner ? tfgMatrix.setValue(pop, group, 0); // Bien faire attention a l'endroit ou on met cette etape (quelle boucle) ? } } //tfgMatrix.setValue(pop, group, Fgroup); // Bien faire attention a l'endroit ou on met cette etape (quelle boucle) ? log.info("tfgMatrix = " + tfgMatrix); log.info("tfg.DimensionNames = " + tfgMatrix.getDimensionNames()); return tfgMatrix; } Une autre question : getSubMatrix utilise des int, alors que mes ageMin et ageMax sont des doubles... Cela ne va-t-il pas poser un soucis ? Peut-on convertir un double en int ?
Le 13/08/2012 15:20, Eric Chatellier a écrit :
Le 13/08/2012 15:15, Loic GASCHE a écrit :
Le 13/08/2012 15:07, Eric Chatellier a écrit :
Dans ton cas, tu appelles getSubMatrix() sur une matrice qui existe. D'où viens cette matrice ? Tu as un exemple de code qui la récupère ou qui la crée ?
public MatrixND TotalFishingMortality (TimeStep step, Population pop, MatrixND FishingMortalityPerGroup)throws TopiaException { // Zone zone double Ftemp=0; double Fpop=0; double Nbre;
MatrixND tfmMatrix = FishingMortalityPerGroup.copy();
C'est une copy de FishingMortalityPerGroup ? Tu aurais le code de celle ci ?
le code tardant à arriver j'ai pu faire une verification en demandant la submatrix sur la dimension 1... qui est bien celle des groupes (et pas la 2 comme j'avais mis avant). ce coup-ci le message est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:3.0 in [Plaice7D Groupe 0, Plaice7D Groupe 1, Plaice7D Groupe 2, Plaice7D Groupe 3, Plaice7D Groupe 4, Plaice7D Groupe 5, Plaice7D Groupe 6, Plaice7D Groupe 7, Plaice7D Groupe 8, Plaice7D Groupe 9] Normal... il n'arrive pas à trouver 3.0 dans les noms de groupes... Par contre je m'etonne de mes matrices de mortalité par pêche par groupe toujours à 0...
Le 13/08/2012 15:43, Loic GASCHE a écrit :
le code tardant à arriver j'ai pu faire une verification en demandant la submatrix sur la dimension 1... qui est bien celle des groupes (et pas la 2 comme j'avais mis avant).
La matrice a bien 2 dimensions: MatrixND tfgMatrix = MatrixFactory.getInstance().create( ResultName.MATRIX_FISHING_MORTALITY_PER_GROUP, new List[]{populations, groups}, // On travaille sur les pops ET les groupes new String[]{n_("Population"), n_("Group")}); Donc dimension 0 et 1.
ce coup-ci le message est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:3.0 in [Plaice7D Groupe 0, Plaice7D Groupe 1, Plaice7D Groupe 2, Plaice7D Groupe 3, Plaice7D Groupe 4, Plaice7D Groupe 5, Plaice7D Groupe 6, Plaice7D Groupe 7, Plaice7D Groupe 8, Plaice7D Groupe 9]
Normal... il n'arrive pas à trouver 3.0 dans les noms de groupes...
tfmMatrix = tfmMatrix.getSubMatrix(2, AgeMin, Nbre); La c'est un problème différent. Il y a deux methodes dans matrix pour avoir une sous matrice: - getSubMatrix(int, int, int) : par indice de semantique - getSubMatrix(int, Object, int) : par valeur de semantique Dans ton cas, il appelle la deuxième d'où l'erreur. A quoi correspond ageMin exactement ? -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 15:57, Eric Chatellier a écrit :
Le 13/08/2012 15:43, Loic GASCHE a écrit :
le code tardant à arriver j'ai pu faire une verification en demandant la submatrix sur la dimension 1... qui est bien celle des groupes (et pas la 2 comme j'avais mis avant).
La matrice a bien 2 dimensions: MatrixND tfgMatrix = MatrixFactory.getInstance().create( ResultName.MATRIX_FISHING_MORTALITY_PER_GROUP, new List[]{populations, groups}, // On travaille sur les pops ET les groupes new String[]{n_("Population"), n_("Group")});
Donc dimension 0 et 1.
ce coup-ci le message est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:3.0 in [Plaice7D Groupe 0, Plaice7D Groupe 1, Plaice7D Groupe 2, Plaice7D Groupe 3, Plaice7D Groupe 4, Plaice7D Groupe 5, Plaice7D Groupe 6, Plaice7D Groupe 7, Plaice7D Groupe 8, Plaice7D Groupe 9]
Normal... il n'arrive pas à trouver 3.0 dans les noms de groupes...
tfmMatrix = tfmMatrix.getSubMatrix(2, AgeMin, Nbre);
La c'est un problème différent. Il y a deux methodes dans matrix pour avoir une sous matrice: - getSubMatrix(int, int, int) : par indice de semantique - getSubMatrix(int, Object, int) : par valeur de semantique
Dans ton cas, il appelle la deuxième d'où l'erreur.
A quoi correspond ageMin exactement ?
ageMin c'est une des deux nouvelles variables qu'on rentre dans l'onglet "variable". En fait cela correspond au premier groupe que je souhaite utiliser pour calculer le F moyen sur une population (et ageMax correspond au dernier groupe à utiliser). Pour le moment je les ai rentrés en tant que doubles dans l'interface de saisie des variables.
Le 13/08/2012 16:10, Loic GASCHE a écrit :
ageMin c'est une des deux nouvelles variables qu'on rentre dans l'onglet "variable". En fait cela correspond au premier groupe que je souhaite utiliser pour calculer le F moyen sur une population (et ageMax correspond au dernier groupe à utiliser).
Ca correspond à "l'age" du premier groupe que tu souhaites, non ? Si c'est bien le cas, il faut que parmi les groupes, tu retrouves le groupe (ou son indice) et que tu appelles getSubMatrix avec l'instance du groupe (et non ageMin) (ou avec l'indice du groupe).
Pour le moment je les ai rentrés en tant que doubles dans l'interface de saisie des variables.
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 16:08, Eric Chatellier a écrit :
Le 13/08/2012 16:10, Loic GASCHE a écrit :
ageMin c'est une des deux nouvelles variables qu'on rentre dans l'onglet "variable". En fait cela correspond au premier groupe que je souhaite utiliser pour calculer le F moyen sur une population (et ageMax correspond au dernier groupe à utiliser).
Ca correspond à "l'age" du premier groupe que tu souhaites, non ?
Oui, 3.0 veut dire que le premier groupe à sélectionner est "Plaice7D Groupe 3".
Si c'est bien le cas, il faut que parmi les groupes, tu retrouves le groupe (ou son indice) et que tu appelles getSubMatrix avec l'instance du groupe (et non ageMin) (ou avec l'indice du groupe).
L'instance du groupe ?? I faut utiliser les semantiques ? Quand je mets un log sur les noms de dimensions de tfgMatrix ou les sémantiques de cette matrice je me retrouve avec : INFO|15:56:17,044|SiMatrix.java|1682|aw$original$_AW_$FishingMortalityPerGroup$_AW_$scripts_SiMatrix|tfg.DimensionNames = [Ljava.lang.String;@12b1e53 INFO|15:56:17,044|SiMatrix.java|1683|aw$original$_AW_$FishingMortalityPerGroup$_AW_$scripts_SiMatrix|tfg.getSemantics() = [Ljava.util.List;@1d3e3f3
Pour le moment je les ai rentrés en tant que doubles dans l'interface de saisie des variables.
Le 13/08/2012 16:21, Loic GASCHE a écrit :
L'instance du groupe ?? I faut utiliser les semantiques ? Tu veux une sous matrice pour un groupe donné apparement. Si c'est le cas, il te faut le groupe en question, pas son age. Quand je mets un log sur les noms de dimensions de tfgMatrix ou les sémantiques de cette matrice je me retrouve avec :
INFO|15:56:17,044|SiMatrix.java|1682|aw$original$_AW_$FishingMortalityPerGroup$_AW_$scripts_SiMatrix|tfg.DimensionNames = [Ljava.lang.String;@12b1e53 INFO|15:56:17,044|SiMatrix.java|1683|aw$original$_AW_$FishingMortalityPerGroup$_AW_$scripts_SiMatrix|tfg.getSemantics() = [Ljava.util.List;@1d3e3f3 Les tableaux ne peuvent pas s'afficher directement en Java. C'est le truc bizare : [Ljava.lang.String;@12b1e53 (adresse mémoire).
Tu peut utiliser Arrays.toString() pour faire ca par exemple: log.info("tfg.DimensionNames = " + Arrays.toString(tfg.DimensionNames)); (peut etre faut-il ajouter l'import java.util.Arrays au haut aussi). -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 13/08/2012 16:23, Eric Chatellier a écrit :
Le 13/08/2012 16:21, Loic GASCHE a écrit :
L'instance du groupe ?? I faut utiliser les semantiques ? Tu veux une sous matrice pour un groupe donné apparement. Si c'est le cas, il te faut le groupe en question, pas son age. Quand je mets un log sur les noms de dimensions de tfgMatrix ou les sémantiques de cette matrice je me retrouve avec :
Pour pouvoir utiliser getSubMatrix(int dim, int start, int nb) et me faciliter la vie j'ai converti mes âges (doubles) en int. Comme la pop Others7DE n'a qu'un seul groupe j'ai du rajouter une condition. Le code est : double AgeMin = context.get(pop).getAsDouble("AgeMin"); double AgeMax = context.get(pop).getAsDouble("AgeMax"); int ageMin= (int)AgeMin+1; int ageMax= (int)AgeMax+1; log.info("AgeMin = " + AgeMin); log.info("AgeMax = " + AgeMax); log.info("ageMin = " + ageMin); log.info("ageMax = " + ageMax); if (AgeMin != AgeMax){ Nbre = ageMax - ageMin + 1; log.info("Nbre = " + Nbre); tfmMatrix = tfmMatrix.getSubMatrix(1, ageMin, Nbre); // MatrixND getSubMatrix(int dim,,int start, int nb) // Faux : int VS double VS nom de groupe... --> passer par les semantiques ? tfmMatrix = tfmMatrix.meanOverDim(1); tfmMatrix = tfmMatrix.reduce(); log.info("tfm.DimensionNames = " + Arrays.toString(tfmMatrix.getDimensionNames())); log.info("tfm.Semantics = " + Arrays.toString(tfmMatrix.getSemantics())); } else { tfmMatrix = tfmMatrix.reduce(); log.info("tfm.DimensionNames = " + Arrays.toString(tfmMatrix.getDimensionNames())); log.info("tfm.Semantics = " + Arrays.toString(tfmMatrix.getSemantics())); } Vu que ça fait pas mal bidouille je me demande si j'ai le droit de faire ça ? Est-ce que ce serait susceptible de poser des problèmes dans certains cas auxquels je n'aurais pas pensé ? Un premier soucis que je vois est que les groupes d'âge de la population doivent obligatoirement commencer au groupe 0...
INFO|15:56:17,044|SiMatrix.java|1682|aw$original$_AW_$FishingMortalityPerGroup$_AW_$scripts_SiMatrix|tfg.DimensionNames = [Ljava.lang.String;@12b1e53 INFO|15:56:17,044|SiMatrix.java|1683|aw$original$_AW_$FishingMortalityPerGroup$_AW_$scripts_SiMatrix|tfg.getSemantics() = [Ljava.util.List;@1d3e3f3
Les tableaux ne peuvent pas s'afficher directement en Java. C'est le truc bizare : [Ljava.lang.String;@12b1e53 (adresse mémoire).
Tu peut utiliser Arrays.toString() pour faire ca par exemple: log.info("tfg.DimensionNames = " + Arrays.toString(tfg.DimensionNames)); (peut etre faut-il ajouter l'import java.util.Arrays au haut aussi).
Le 14/08/2012 10:28, Loic GASCHE a écrit :
Vu que ça fait pas mal bidouille je me demande si j'ai le droit de faire ça ? Est-ce que ce serait susceptible de poser des problèmes dans certains cas auxquels je n'aurais pas pensé ?
En fait tu te sert de ageMin non pas comme un age, mais comme le xieme groupe a prendre en compte (son index en fait). Au départ je pensait plus a une réelle comparaison d'age : List<PopulationGroup> groups = ... for (PopulationGroup group : groups) { if (group.getAge() == ageMin) { // le bon groupe a été trouvé par son age } } ou si tu veux la position comme actuellement: int groupIndex = -1; List<PopulationGroup> groups = ... for (int i = 0; i < groups.size() ; i++) { if (group.getAge() == ageMin) { // le bon groupe a été trouvé par son age groupIndex = i; } } tfmMatrix = tfmMatrix.getSubMatrix(1, groupIndex, Nbre); J'ai une autre remarque, qu'en est-il pour les populations structurées en longueur où dans certaines bases tous les ages sont égal à 0 ? -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 14/08/2012 10:57, Eric Chatellier a écrit :
Le 14/08/2012 10:28, Loic GASCHE a écrit :
Vu que ça fait pas mal bidouille je me demande si j'ai le droit de faire ça ? Est-ce que ce serait susceptible de poser des problèmes dans certains cas auxquels je n'aurais pas pensé ?
En fait tu te sert de ageMin non pas comme un age, mais comme le xieme groupe a prendre en compte (son index en fait).
Au départ je pensait plus a une réelle comparaison d'age :
Je crois que je ne vois pas très bien où on arriverait avec la comparaison par âge... Mais c'est probablement car je ne pige pas comment fonctionne getSubMatrix(int, Object, int) (Object correspondrait à quoi ici ??)
List<PopulationGroup> groups = ... for (PopulationGroup group : groups) { if (group.getAge() == ageMin) { // le bon groupe a été trouvé par son age } }
ou si tu veux la position comme actuellement: int groupIndex = -1; List<PopulationGroup> groups = ... for (int i = 0; i< groups.size() ; i++) { if (group.getAge() == ageMin) { // le bon groupe a été trouvé par son age groupIndex = i; } } tfmMatrix = tfmMatrix.getSubMatrix(1, groupIndex, Nbre);
J'ai une autre remarque, qu'en est-il pour les populations structurées en longueur où dans certaines bases tous les ages sont égal à 0 ?
Le 14/08/2012 11:36, Loic GASCHE a écrit :
Je crois que je ne vois pas très bien où on arriverait avec la comparaison par âge... Mais c'est probablement car je ne pige pas comment fonctionne getSubMatrix(int, Object, int) (Object correspondrait à quoi ici ??) à ton groupe. getSubMatrix(1, monGroup, nb);
C'est pareil que de faire : getSubMatrix(1, i, nb); avec i étant la position du groupe dans la semantique 1. -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Le 14/08/2012 11:37, Eric Chatellier a écrit :
Le 14/08/2012 11:36, Loic GASCHE a écrit :
Je crois que je ne vois pas très bien où on arriverait avec la comparaison par âge... Mais c'est probablement car je ne pige pas comment fonctionne getSubMatrix(int, Object, int) (Object correspondrait à quoi ici ??) à ton groupe. getSubMatrix(1, monGroup, nb);
C'est pareil que de faire : getSubMatrix(1, i, nb); avec i étant la position du groupe dans la semantique 1.
OK ! Alors la première solution semble meilleure en effet car il semble y avoir moins de chances de se planter en allant directement chercher le groupe par son nom... Par contre pour nb il n'y a pas d'autre solution que de le calculer à partir de AgeMin et AgeMax et de le convertir en int après ? L'ideal serait de pouvoir faire un getSubmatrix de getSubMatrix(1, monGroupMin, monGroupMax).
participants (2)
-
Eric Chatellier -
Loic GASCHE