Rules pour mettre une ogive de trie
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); } }
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); } }
merci ! j'essaye la première solution et si ça marche pas, la deuxième ! Le 31 mai 2011 16:58, <Sigrid.Lehuta@ifremer.fr> a écrit :
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
Le 31/05/2011 16:58, Sigrid.Lehuta@ifremer.fr a écrit :
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); bah tu maîtrises bien mieux l'utilisation des matrices que moi :-D désolé, mais là je vais pas t'être d'un grand secours...
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Bonjour ! Je m'emmêle dans le code. Je n'arrive pas à définir les zones pour faire la boucle for sur les zones. Vous pouvez m'aider ? Je vous envoies mon script. Merci ! Camille Le 31 mai 2011 17:13, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 31/05/2011 16:58, Sigrid.Lehuta@ifremer.fr a écrit :
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); bah tu maîtrises bien mieux l'utilisation des matrices que moi :-D désolé, mais là je vais pas t'être d'un grand secours...
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Le 01/06/2011 09:25, camille de la Vega a écrit :
Bonjour !
Je m'emmêle dans le code. Je n'arrive pas à définir les zones pour faire la boucle for sur les zones. Vous pouvez m'aider ? Je vous envoies mon script. Je vous renvoie le scripts qui compile, mais non testé.
Attention à : if (metier.getName().equals("Langoustinier francais")) { au lieu de if (metier.getName() == "Langoustinier francais") { -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Merci beaucoup !! Ok pour le .equals au lieu de ==. Merci ! Camille Le 1 juin 2011 11:36, Eric Chatellier <chatellier@codelutin.com> a écrit :
Bonjour !
Je m'emmêle dans le code. Je n'arrive pas à définir les zones pour faire la boucle for sur les zones. Vous pouvez m'aider ? Je vous envoies mon
Le 01/06/2011 09:25, camille de la Vega a écrit : script. Je vous renvoie le scripts qui compile, mais non testé.
Attention à : if (metier.getName().equals("Langoustinier francais")) { au lieu de if (metier.getName() == "Langoustinier francais") {
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Bonjour ! Ma règle ne marche toujours pas. l Le 1 juin 2011 11:36, Eric Chatellier <chatellier@codelutin.com> a écrit :
Bonjour !
Je m'emmêle dans le code. Je n'arrive pas à définir les zones pour faire la boucle for sur les zones. Vous pouvez m'aider ? Je vous envoies mon
Le 01/06/2011 09:25, camille de la Vega a écrit : script. Je vous renvoie le scripts qui compile, mais non testé.
Attention à : if (metier.getName().equals("Langoustinier francais")) { au lieu de if (metier.getName() == "Langoustinier francais") {
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Désolée j'ai fais une fausse manip' et mon mail est parti. La simulation s'arrète au mois janv 0. Je vous envoies le débug. Je ne comprends pas : c'est un problème de version ? d'ISIS ? de java ? je vous envoies aussi la règle j'ai rajouté un "else" après le "if" pour préciser que si c'est pas le métier "langoustine" les rejets sont égals à 0. Merci ! Camille Le 1 juin 2011 11:36, Eric Chatellier <chatellier@codelutin.com> a écrit :
Bonjour !
Je m'emmêle dans le code. Je n'arrive pas à définir les zones pour faire la boucle for sur les zones. Vous pouvez m'aider ? Je vous envoies mon
Le 01/06/2011 09:25, camille de la Vega a écrit : script. Je vous renvoie le scripts qui compile, mais non testé.
Attention à : if (metier.getName().equals("Langoustinier francais")) { au lieu de if (metier.getName() == "Langoustinier francais") {
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Le 06/06/2011 12:43, camille de la Vega a écrit :
Désolée j'ai fais une fausse manip' et mon mail est parti. La simulation s'arrète au mois janv 0. Je vous envoies le débug. Il manque encore le debug :-)
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Sorry ! Le voila ! Camille Le 6 juin 2011 12:55, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 06/06/2011 12:43, camille de la Vega a écrit :
Désolée j'ai fais une fausse manip' et mon mail est parti. La simulation s'arrète au mois janv 0. Je vous envoies le débug. Il manque encore le debug :-)
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Le 06/06/2011 13:00, camille de la Vega a écrit :
Sorry ! Le voila ! Camille N'est pas peur de lire le debug si tu y arrive, car normalement quand ca plante, il t'informe sur ce qui ne va pas.
Dans ce cas, l'erreur est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:zone metier merlu-seiche in [zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere] at org.nuiton.math.matrix.MatrixHelper.indexOf(MatrixHelper.java:234) at org.nuiton.math.matrix.MatrixHelper.semanticsToDimension(MatrixHelper.java:208) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:380) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:402) at rules.Ogive_de_Trie.aw$original$_AW_$postAction$_AW_$rules_Ogive_de_Trie(Ogive_de_Trie.java:206) A la ligne Ogive_de_Trie : discard.setValue(str, metier, group, zone, sanstrie); dans ce cas, la zone ne semble pas être une zone qui a servit a définir la matrice Catch. "merlu-seiche" par rapport à zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere ? J'essayerais en remplacant : List<Zone> zones = siMatrix.getZones(date); par List<Zone> zones = pop.getZones(); -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Ca marche (avec pop.getPopulationZone() ) ! Merci beaucoup ! Je vais essayer la prochaine fois de comprendre le debug en le lisant jusqu'au bout. Camille Le 6 juin 2011 14:03, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 06/06/2011 13:00, camille de la Vega a écrit :
Sorry ! Le voila ! Camille N'est pas peur de lire le debug si tu y arrive, car normalement quand ca plante, il t'informe sur ce qui ne va pas.
Dans ce cas, l'erreur est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:zone metier merlu-seiche in [zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere] at org.nuiton.math.matrix.MatrixHelper.indexOf(MatrixHelper.java:234) at
org.nuiton.math.matrix.MatrixHelper.semanticsToDimension(MatrixHelper.java:208) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:380) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:402) at rules.Ogive_de_Trie.aw <http://rules.ogive_de_trie.aw/> $original$_AW_$postAction$_AW_$rules_Ogive_de_Trie(Ogive_de_Trie.java:206)
A la ligne Ogive_de_Trie : discard.setValue(str, metier, group, zone, sanstrie); dans ce cas, la zone ne semble pas être une zone qui a servit a définir la matrice Catch.
"merlu-seiche" par rapport à zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere ?
J'essayerais en remplacant : List<Zone> zones = siMatrix.getZones(date); par List<Zone> zones = pop.getZones();
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
J'ai un nouveau problème : les valeurs de rejets sont beaucoup plus grande que les valeurs des captures... J'ai affiché dans le debug les pourcentages à rejeter ("rejet") qui sont bon (entre 0 et 1) et les valeurs des rejets ("value") qui sont cohérent aussi... Mais les valeurs des rejets dans result export sont de l'ordre 10E7 alors que les captures sont de l'ordre 10E4. Le problème vient peut être de discard.setValue qui n'est pas au bon endroit dans la boucle ? Les valeurs des pourcentages à rejeter n'étaient pas bonnes jusqu'à ce que je mette directement "1-trie" dans le code sans créer la variable "rejet=1" au début des boucles "for". Je crois que la valeur mise dans rejet par le code "rejet=rejet-trie" était reprise dans la boucle et n'était pas remise à 1. Donc je me dis que c'est peut être le même problème avec le discard.setValue (la matrice discard n'étant pas définie dans la même boucle). Camille Le 6 juin 2011 14:03, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 06/06/2011 13:00, camille de la Vega a écrit :
Sorry ! Le voila ! Camille N'est pas peur de lire le debug si tu y arrive, car normalement quand ca plante, il t'informe sur ce qui ne va pas.
Dans ce cas, l'erreur est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:zone metier merlu-seiche in [zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere] at org.nuiton.math.matrix.MatrixHelper.indexOf(MatrixHelper.java:234) at
org.nuiton.math.matrix.MatrixHelper.semanticsToDimension(MatrixHelper.java:208) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:380) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:402) at rules.Ogive_de_Trie.aw <http://rules.ogive_de_trie.aw/> $original$_AW_$postAction$_AW_$rules_Ogive_de_Trie(Ogive_de_Trie.java:206)
A la ligne Ogive_de_Trie : discard.setValue(str, metier, group, zone, sanstrie); dans ce cas, la zone ne semble pas être une zone qui a servit a définir la matrice Catch.
"merlu-seiche" par rapport à zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere ?
J'essayerais en remplacant : List<Zone> zones = siMatrix.getZones(date); par List<Zone> zones = pop.getZones();
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Le 06/06/2011 17:44, camille de la Vega a écrit :
J'ai un nouveau problème : les valeurs de rejets sont beaucoup plus grande que les valeurs des captures... J'ai affiché dans le debug les pourcentages à rejeter ("rejet") qui sont bon (entre 0 et 1) et les valeurs des rejets ("value") qui sont cohérent aussi... Mais les valeurs des rejets dans result export sont de l'ordre 10E7 alors que les captures sont de l'ordre 10E4. Le problème vient peut être de discard.setValue qui n'est pas au bon endroit dans la boucle ? L'export exporte MATRIX_DISCARDS_WEIGHT_PER_STR_MET_PER_ZONE_POP et non MATRIX_DISCARDS_PER_STR_MET_PER_ZONE_POP que vous utilisez dans votre regles. Les valeurs des pourcentages à rejeter n'étaient pas bonnes jusqu'à ce que je mette directement "1-trie" dans le code sans créer la variable "rejet=1" au début des boucles "for". Je crois que la valeur mise dans rejet par le code "rejet=rejet-trie" était reprise dans la boucle et n'était pas remise à 1. Donc je me dis que c'est peut être le même problème avec le discard.setValue (la matrice discard n'étant pas définie dans la même boucle). -- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
Hello, je ne sais pas si ca resoudra ton pb, mais l ordre dans lequel tu boucles avec strategie au debut est bisarre. j ai peur que tu ecrases l ancienne matrice discard a chaque nouvelle strategie... je ferais plutot : for(pop){ if(pop){ for(str){ for(grp){ for(zone){ if (met){ }}}}}} ensuite je me rappelle plus si c est important mais ligne 203 je fermerais la parenthese devant le else ("}else{") sinon pour eviter les boucles je ferais bien un matrixIterator... mais essaies deja comme ca. A+ camille de la Vega <cam.delavega@gmail.com> a écrit :
J'ai un nouveau problème : les valeurs de rejets sont beaucoup plus grande que les valeurs des captures... J'ai affiché dans le debug les pourcentages à rejeter ("rejet") qui sont bon (entre 0 et 1) et les valeurs des rejets ("value") qui sont cohérent aussi... Mais les valeurs des rejets dans result export sont de l'ordre 10E7 alors que les captures sont de l'ordre 10E4. Le problème vient peut être de discard.setValue qui n'est pas au bon endroit dans la boucle ? Les valeurs des pourcentages à rejeter n'étaient pas bonnes jusqu'à ce que je mette directement "1-trie" dans le code sans créer la variable "rejet=1" au début des boucles "for". Je crois que la valeur mise dans rejet par le code "rejet=rejet-trie" était reprise dans la boucle et n'était pas remise à 1. Donc je me dis que c'est peut être le même problème avec le discard.setValue (la matrice discard n'étant pas définie dans la même boucle).
Camille Le 6 juin 2011 14:03, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 06/06/2011 13:00, camille de la Vega a écrit :
Sorry ! Le voila ! Camille N'est pas peur de lire le debug si tu y arrive, car normalement quand ca plante, il t'informe sur ce qui ne va pas.
Dans ce cas, l'erreur est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:zone metier merlu-seiche in [zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere] at org.nuiton.math.matrix.MatrixHelper.indexOf(MatrixHelper.java:234) at
org.nuiton.math.matrix.MatrixHelper.semanticsToDimension(MatrixHelper.java:208) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:380) at org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:402) at rules.Ogive_de_Trie.aw <http://rules.ogive_de_trie.aw/> $original$_AW_$postAction$_AW_$rules_Ogive_de_Trie(Ogive_de_Trie.java:206)
A la ligne Ogive_de_Trie : discard.setValue(str, metier, group, zone, sanstrie); dans ce cas, la zone ne semble pas être une zone qui a servit a définir la matrice Catch.
"merlu-seiche" par rapport à zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere ?
J'essayerais en remplacant : List<Zone> zones = siMatrix.getZones(date); par List<Zone> zones = pop.getZones();
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ Isis-fish-users mailing list Isis-fish-users@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-users
Merci Sigrid. Mais ça ne change rien d'inverser les boucles. Les rejets sont toujours beaucoup plus élevés que les captures. J'ai vérifé les captures sans la règle sont les mêmes que les captures avec la règle. C'est donc bien les rejets qui sont mal calculé mais ça doit être au moment du remplissage de la matrice parce que les étapes d'avant donnent des valeurs cohérentes. Je vais essayer de faire le script avec Matrix Interator. Mais je comprends pas pourquoi ça marche pas avec les boucles... ++ Le 6 juin 2011 19:33, <Sigrid.Lehuta@ifremer.fr> a écrit :
Hello,
je ne sais pas si ca resoudra ton pb, mais l ordre dans lequel tu boucles avec strategie au debut est bisarre. j ai peur que tu ecrases l ancienne matrice discard a chaque nouvelle strategie...
je ferais plutot : for(pop){ if(pop){ for(str){ for(grp){ for(zone){ if (met){ }}}}}}
ensuite je me rappelle plus si c est important mais ligne 203 je fermerais la parenthese devant le else ("}else{")
sinon pour eviter les boucles je ferais bien un matrixIterator... mais essaies deja comme ca. A+
camille de la Vega <cam.delavega@gmail.com> a écrit :
J'ai un nouveau problème : les valeurs de rejets sont beaucoup plus
grande que les valeurs des captures... J'ai affiché dans le debug les pourcentages à rejeter ("rejet") qui sont bon (entre 0 et 1) et les valeurs des rejets ("value") qui sont cohérent aussi... Mais les valeurs des rejets dans result export sont de l'ordre 10E7 alors que les captures sont de l'ordre 10E4. Le problème vient peut être de discard.setValue qui n'est pas au bon endroit dans la boucle ? Les valeurs des pourcentages à rejeter n'étaient pas bonnes jusqu'à ce que je mette directement "1-trie" dans le code sans créer la variable "rejet=1" au début des boucles "for". Je crois que la valeur mise dans rejet par le code "rejet=rejet-trie" était reprise dans la boucle et n'était pas remise à 1. Donc je me dis que c'est peut être le même problème avec le discard.setValue (la matrice discard n'étant pas définie dans la même boucle).
Camille Le 6 juin 2011 14:03, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 06/06/2011 13:00, camille de la Vega a écrit :
Sorry ! Le voila ! Camille N'est pas peur de lire le debug si tu y arrive, car normalement quand ca plante, il t'informe sur ce qui ne va pas.
Dans ce cas, l'erreur est : java.util.NoSuchElementException: L'objet passé en argument n'a pas été retrouvé ou la dimension donnée ne convient pas:zone metier merlu-seiche in [zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere] at org.nuiton.math.matrix.MatrixHelper.indexOf(MatrixHelper.java:234) at
org.nuiton.math.matrix.MatrixHelper.semanticsToDimension(MatrixHelper.java:208) at
org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:380) at
org.nuiton.math.matrix.AbstractMatrixND.setValue(AbstractMatrixND.java:402) at rules.Ogive_de_Trie.aw <http://rules.ogive_de_trie.aw/> < http://rules.ogive_de_trie.aw/>
$original$_AW_$postAction$_AW_$rules_Ogive_de_Trie(Ogive_de_Trie.java:206)
A la ligne Ogive_de_Trie : discard.setValue(str, metier, group, zone, sanstrie); dans ce cas, la zone ne semble pas être une zone qui a servit a définir la matrice Catch.
"merlu-seiche" par rapport à zone_merlu_presence, zone_merlu_recrutement, zone_merlu_reproduction, zone_merlu_cotiere ?
J'essayerais en remplacant : List<Zone> zones = siMatrix.getZones(date); par List<Zone> zones = pop.getZones();
-- Éric Chatellier <chatellier@codelutin.com> Tel: 02.40.50.29.28 http://www.codelutin.com
_______________________________________________ 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
participants (3)
-
camille de la Vega -
Eric Chatellier -
Sigrid.Lehuta@ifremer.fr