merci ! j'essaye la première solution et si ça marche pas, la deuxième !
Salut Camille,
le probleme vient de cette ligne :
discard = Catch.mults(rejet);
ou tu multiplies en effet toute la matrice Catch par un reel.
il faudrait ne multiplier que les cases de la matrice correspondantes au group et métier en question.
je vois deux options, la première je suis pas sure à 100% que ca marche (Eric tu peux venir en soutien là dessus stp?) mais ca serait simple :
// reccupere la sous matrice qui correspond au metier et group en cours (si je me plante pas Catch est [str,met,group,zone]):
MatrixND catchMet = Catch.getSubMatrix(1,metier);
MatrixND catchMetGroup = catchMet.getSubMatrix(2,group);
// multiplier cette sous matrice par rejet
MatrixND discardMetGroup = catchMetGroup.mults(rejet);
// on reccupere l indice correspondant au metier Imet dans la matrice Catch
list<Metier> semMet = Catch.getSemantic(1);
int Imet = indexOf(metier);
// on recolle la matrice multipliee dans discard
int[] laOuIlFautLaColler = new int[] {0,Imet,group.getId(),0};
discard.paste(laOuIlFautLaColler,discardMetGroup);
Autre option se taper la boucle sur les strategies et zones en plus et remplir case par case (en schematisant):
for (str){
for (zone){
discard.setValue(str,metier,group,zone) = Catch.getValue(str,metier,group,zone) * rejet
}}
bon courage!
camille de la Vega <cam.delavega@gmail.com> a écrit :_______________________________________________
Bonjour,
j'ai fais une règle pour pouvoir mettre une ogive de trie pour le calcul des
rejets en m'appuyant sur la règle déjà existante "taille min".
Je n'arrive pas à indicer la matrice "discard" pour multiplier chaque
valeurs correspondant au groupe de taille (à chaque tour de la boucle
for) par le double "rejet" qui est également dépendant du groupe d'age.
Actuellement, toute la matrice "discard" est multiplié par "rejet". Vous
pouvez m'aider pour coder la multiplication ?
Merci !
Camille
PopulationMonitor popMon = context.getPopulationMonitor();
SiMatrix siMatrix = SiMatrix.getSiMatrix(context);
List<Population> pops = siMatrix.getPopulations(date);
for (Population pop : pops) {
if (pop.getSpecies().equals(param_species)) {
///if (popMon.getDiscard(date, pop) == null) {
MatrixND Catch = popMon.getCatch(pop).copy();
MatrixND discard = popMon.getCatch(pop).copy();
log.info("metier_selectionnes" + metier.getName());
List<PopulationGroup> groups = pop.getPopulationGroup();
for (PopulationGroup group : groups) {
log.info("ICI");
double trie =
1/(1+Math.exp(-(group.getLength()-param_Retention_L50)/param_Retention_slope));
log.info("tri" + trie);
double rejet = 1-trie;
log.info("rejet" + rejet);
discard = Catch.mults(rejet);
}
discard.setName(
ResultName.MATRIX_DISCARDS_PER_STR_MET_PER_ZONE_POP);
log.info("discard" + discard);
popMon.addDiscard(date, pop, discard);
}
}
Isis-fish-users mailing list
Isis-fish-users@list.isis-fish.org
http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users