Salut Sigrid,
Effectivement c'est plus simple en mettant directement tous les métiers dans le même fichier .csv ! Je ne sais plus pourquoi j'étais parti sur une séparation des fichiers métiers (ça date de novembre ...).
Donc j'ai tout re simplifié avec à chaque fois un seul objet pour tous les métiers: "debarquements", "debarquementsObserves" et "matrixDebarquementsObserves".
Je fais effectivement l'option 2 !: somme sur les pas de temps (somme sur les metiers de (CatchObs (t,
metier) - CatchSimule (t,metier))^2).
Par contre je n'arrive pas à utiliser la partie de script pour créer la semantic.
J'obtiens des erreurs... j'ai trouvé comment en résoudre certaines, mais là je bloque...
Après avoir importé directement le fichier avec tous les métiers (même ceux qui ne capturent pas l'espèces). J'ai remplacé "Date" pas "Month" dans le bout de script que tu m'avais envoyé (est-ce que ça pose problème?).
J'ai eu:
cannot find symbol
symbol : class Month
location: class scripts.SiMatrix
List<Month> months = new ArrayList <Month>();
J'ai donc rajouté: import fr.ifremer.isisfish.types.Month; en début de script.
Puis j'ai eu:
cannot find symbol
symbol : class SiMatrix
location: class analyseplans.CalibrationSimplexePasVariable2_BecDeCane
SiMatrix siMatrix = SiMatrix.getSiMatrix(context);
J'ai donc rajouté : import scripts.SiMatrix; en début de script.
Puis j'ai eu:
cannot find symbol
symbol : variable siMatrix
location: class analyseplans.CalibrationSimplexePasVariable2_BecDeCane
List<Metier> metiers = siMatrix.getMetiers(new Month(0));
J'ai rajouté : SiMatrix siMatrix = SiMatrix.getSiMatrix(context); dans mon init.
Et maintenant, j'ai le message:
C:\Documents and Settings\bpreuss\isis-database-3\analyseplans\CalibrationSimplexePasVariable2_BecDeCane.java:136: getSiMatrix(fr.ifremer.isisfish.simulator.SimulationContext) in scripts.SiMatrix cannot be applied to (fr.ifremer.isisfish.simulator.AnalysePlanContext)
SiMatrix siMatrix = SiMatrix.getSiMatrix(context);
^
C:\Documents and Settings\bpreuss\isis-database-3\analyseplans\CalibrationSimplexePasVariable2_BecDeCane.java:137: cannot find symbol
symbol : method getMetiers(fr.ifremer.isisfish.types.Month)
location: class scripts.SiMatrix
List<Metier> metiers = siMatrix.getMetiers(new Month(0));
^
Note: C:\Documents and Settings\bpreuss\isis-database-3\scripts\SiMatrix.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
Je pense comprendre l’erreur mais je ne vois pas comment la résoudre…
Donc je bloque ici… Comprends pas tout au Java ;-)
Je mets en pièce jointe, mon script et mon fichier .csv pour que ça soit plus clair sur ce que je fais.
Merci d’avance,
Bastien
-----Message d'origine-----
De : isis-fish-users-bounces@list.isis-fish.org [mailto:isis-fish-users-bounces@list.isis-fish.org] De la part de Sigrid.Lehuta@ifremer.fr
Envoyé : jeudi 2 juin 2011 01:40
À : isis-fish-users@list.isis-fish.org
Objet : Re: [Isis-fish-users] Exclusion de certains métiers pour la calibration
Hello,
je pense que je n'avais pas compris ce que tu fais. Quelle est ta
fonction objectif?
somme sur les pas de temps ((CatchObs(t) - CatchSimule(t))^2)
ou
somme sur les pas de temps (somme sur les metiers de (CatchObs (t,
metier) - CatchSimule (t,metier))^2) ?
l option 2, n'est ce pas? desolee j ai ete longue a la comprenette.
Dans ce cas en effet, il faut s assurer que les metiers correspondent.
le plus propre c est de creer les "semantics" pour ta matrice de
debarquements observes. semantics c'est les coordonnées en termes
d'objet plutot qu'en terme d'indice. par ex pour aller chercher la
valeur dans la matrice a la premiere ligne deuxieme colonne qui
correspond a la date d et au metier m au lieu de faire
mamatrice[1,2]
tu lui donne les objets en indices:
mamatrice[Date d,Metier m].
// Dans init
// reccup la liste des metiers
List<Metier> metiers = siMatrix.getMetiers(new Date(0));
// creer la liste des metiers de ton fichier de debarq observes
// tu rentres la liste de tes metiers dans l ordre de ton fichier d'import
String[] metiersNomsNous = new String[]{"Espagnols",
"BolincheProfil2lan", "BolincheProfil2nord","Autre"};
List<Metier> metiersNous = new ArrayList<Metier>();
for(String metiersNomCurrent : metiersNomsNous){
for (Metier met : metiers){
if(met.getName().equals(metiersNomCurrent)){
metiersNous.add(met);
}}}
//creer la liste des dates
//si par ex tes simu ont 60 pas de temps (60 trimestres,60 mois...)
List<Date> dates = new ArrayList <Date>();
for (int i=0; i < 60; i++) {
dates.add(new Date (i));
}
// creation de la matrice en specifiant ses semantics plutot que sa taille
MatrixND matrixDebarquement = MatrixFactory.getInstance().create(
new List[]{dates,metiersNous});
matrixDebarquement.importCSV(new FileReader(debarquementsObserves),new
int []{0,0});
// Puis dans la partie ou tu compares :
for ( MatrixIterator g = L.iterator(); g.hasNext();){
g.next();
Object [] sem = g.getSemanticsCoordinates();
double obs = matrixDebarquement.getValue(sem);
//etc..
}
si tu ne veux pas t embeter avec les metiers qui ne capturent rien, ne
les mets pas dans ta matrice d import. Puis on va faire la boucle sur
les elements de matrixDebarquement plutot que sur les elements de
L,comme ca tu n as pas besoin d'extraire de L les metiers qui ne
capturent pas.
for ( MatrixIterator g = matrixDebarquement.iterator(); g.hasNext();){
g.next();
Object [] sem = g.getSemanticsCoordinates();
double obs = g.getValue();
double sim = L.getValue(sem);
etc..
}
Enfin pour l erreur ajoute cette ligne aux imports en debut de script
import fr.ifremer.isisfish.entities.*;
Bon courage
Bastien Preuss <Bastien.Preuss@ird.fr> a écrit :
> Re!
>
> Si je comprends bien j'ai 2 options:
>
> 1) ne pas supprimer les métiers qui ne capturent pas mon espèce dans les
> valeurs simulées. Mais dans ce cas, il faut que j'importe des matrices des
> captures nulles pour avoir des valeurs Observées à comparer, non?
>
> 2) Supprimer les métiers qui ne capturent pas mon espèce dans les valeurs
> simulées. Dans ce cas je peux utiliser le bout de script que tu m'as envoyé.
>
>
> J'ai essayé cette deuxième option, mais il y a une erreur car Isis ne
> reconnait pas l'objet "Metier", j'ai le message d'erreur:
> cannot find symbol
> symbol : class Metier
> location: class analyseplans.CalibrationSimplexePasVariable2_BecDeCane
> List <Metier> listmet = L2.getSemantic(1); int[] indexMetagarder =
> new int[4];
>
> J'ai essayé de le déclarer plus haut mais sans succès. Sais-tu à quoi cela
> est-il dû? J'ai dû rater quelque chose!
>
>
>
> De façon plus général, pour les deux cas, je me demande comment sait-on si
> les valeurs comparées obs et simulées sont les bonnes? Je n'ai pas compris
> dans le script où est-ce qu'on récupère les données obs d'un métier pour les
> comparer aux données simulées du métiers correspondant en s'assurant qu'il
> s'agisse du même métier.
>
> Merci.
>
> Bastien
>
>
>
>
>
>
>
> -----Message d'origine-----
> De : isis-fish-users-bounces@list.isis-fish.org
> [mailto:isis-fish-users-bounces@list.isis-fish.org] De la part de
> Sigrid.Lehuta@ifremer.fr
> Envoyé : mercredi 1 juin 2011 03:04
> À : isis-fish-users@list.isis-fish.org
> Objet : Re: [Isis-fish-users] Exclusion de certains métiers pour la
> calibration
>
> Re-hello,
>
> En fait si les metiers ne capturent pas la population leurs captures
> seront nulles et c est pas grave de les garder (ca fera + 0!)... mais
> si tu veux quand meme les extraire,
>
> d'abord reccuperer les index des metiers à garder en utilisant leurs
> noms par exemple :
> List <Metier> listmet = L2.getSemantic(1)
> int[] indexMetagarder = new int[4];
> for(Metier m : listmet){
> if(m.getName().equals("nommetier1")) indexMetagarder [1] =
> listmet.indexOf(m);
> else if(m.getName().equals("nommetier5")) indexMetagarder [2] =
> listmet.indexOf(m);
> etc...
> }
>
> ensuite extraire la sous matrice:
> MatrixND L = L2.getSubMatrix(1, indexMetagarder).copy();
>
>
> A++
>
> Bastien Preuss <Bastien.Preuss@ird.fr> a écrit :
>
>> Bonjour,
>>
>>
>>
>> Je souhaite exclure certains de mes métiers pour réaliser ma calibration.
>>
>> Je calibre espèce par espèce, donc il me faut exclure les métiers qui ne
>> capturent pas l’espèce en cours de calibration.
>>
>>
>>
>> La ligne 363 du script de calibration semble permettre de faire cela, mais
>> le problème est comment sélectionner les bons métiers à exclure ?! :
>>
>>
>>
>> /////*** If some strategies, metiers or areas must not be included in the
>> cumulated catches see below else put "//" at the beginning of line 297 and
>> replace "L2" by "L" at line 289
>>
>> /////*** the strategies or so to exclude must be at the begining
> or
>> end of the list you enter in the parameters interface
>>
>> /////*** fill the line MatrixND L =
> L2.getSubMatrix(a,b,c).copy();
>> as follow :
>>
>> /////*** a = 1 if you want to exclude strategies, 2 if metiers and
> 4
>> if areas
>>
>> /////*** b = indice of the first object considered
>>
>> /////*** c = number of object to keep after b, b included
>>
>> //MatrixND L = L2.getSubMatrix(0, 0, 12).copy(); // for instance :
>> keep strategies 2,3,4,5
>>
>>
>>
>>
>>
>> Dans mon cas j’ai 8 métiers et je souhaite n’en conserver que 4 pour ma
>> calibration sur mon espèce 1. Comment savoir dans quel ordre sont rangés
> les
>> métiers et quel numéro correspond à quel métier ? De plus il semble qu’il
> ne
>> soit possible d’exclure que des métiers qui se suivent dans la liste…
>> comment faire si les métiers à conserver ne se suivent pas ?
>>
>>
>>
>>
>>
>>
>>
>> Merci de votre aide.
>>
>>
>>
>> Bastien
>>
>>
>>
>>
>>
>> Bastien Preuss
>>
>> Doctorant (PhD Student)
>>
>> IFREMER - IRD - Université de Nouvelle-Calédonie
>>
>> 101 Promenade Roger Laroque
>>
>> BP A5
>>
>> 98848 Noumea cedex
>>
>> New-Caledonia
>>
>> Tel: (+687) 260 723
>>
>> P afin de contribuer au respect de l'environnement, merci de n'imprimer ce
>> mail qu'en cas de nécessité
>>
>>
>>
>>
>>
>>
>
>
>
> _______________________________________________
> Isis-fish-users mailing list
> Isis-fish-users@list.isis-fish.org
> http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
>
> _______________________________________________
> Isis-fish-users mailing list
> Isis-fish-users@list.isis-fish.org
> http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
>
_______________________________________________
Isis-fish-users mailing list
Isis-fish-users@list.isis-fish.org
http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users