test equation de recruitment passé avec (presque total) succes ! - Ca fait ce qu'on veut ! - Le probleme est independant de l equation de recrutement et concerne les multiplications de matrice. En effet, la multiplication de la matrice de repro par la matrice MappingReproRecu cf code en dessous ( zrzr.transpose().mult(oeufsm);) ne fonctionne pas. impossible de comprendre comment utiliser .mult efficacement. j ai essayé d'échanger les matrices et de transposer, rien a faire! L'API dit que .mult(matrixND) s applique a 2 matrice 2D. ici on a une matrice 1D et une matrice 2D, peut etre est ce la raison de l echec. on doit pouvoir multiplier une 2D par une 1d aussi normalement... Qu'en dit le fabriquant de la librairie MatrixND? Du coup obligé de passer par un iterateur pour faire ce qu on veut. c'est dommage. Je check FOther. A++ CODE de L EQUATION /// exemple oeufs 2 mois de repro // on veut appliquer une serie temporelle de M MatrixND zrzr = pop.getMappingZoneReproZoneRecru(); int y = context.getSimulationControl().getStep().getYear(); if(y%2 == 1){ zrzr = zrzr.divs(2); } for(MatrixIterator i = result.iterator(); i.hasNext();) { i.next(); i.setValue(0);} MatrixHelper.fill(result,0); double nbM = recruitmentInputs.size(); double res = 0; PopulationGroup g0 = pop.getPopulationGroup().get(0); for(int m=0; m<nbM; m++){ Double p = recruitmentInputs.get(m).getRecruitementContribution(); if(p !=null){ MatrixND oeufsm = recruitmentInputs.get(m).getRepro().copy(); // ATTENTION a ne pas modifier la matrice originale oeufsm = oeufsm.mults(p); zrzr.transpose().mult(oeufsm); for(MatrixIterator it = oeufsm.iterator(); it.hasNext();) { it.next(); result.setValue(g0,it.getSemanticsCoordinates()[0], it.getValue()+result.getValue(g0,it.getSemanticsCoordinates()[0])); } } } return 0; Le 22 octobre 2015 17:19, Sigrid Lehuta <sigridlehuta@gmail.com> a écrit :
Déjà !!! Super! par contre je vais surement pas pouvoir tester avant lundi... je suis impatiente !
Le 22 octobre 2015 14:07, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 22/10/2015 11:42, Sigrid Lehuta a écrit :
Ou doit se trouver l'équation ?
Espece/Population/Stocks en dessous de Calcul de F
Quel sont ses parametres ?
Les mêmes que pour l'equation de mortalité Naturelle : context, pop,
group, zone.
Et qui/comment s'appele l'equation ? (ou comment influt-elle sur la simulation).
Elle s'appelle fishingMortalityOtherFleets (Foth) (dans nombreux cas elle retourne une matrice de 0, c'est la valeur par
défaut)
et partout où l'equation de mortalité natuelle est appelée, tu appelles
aussi
Foth et tu sommes les 2 avant de faire le calcul.
OK?
C'est fait ici :
http://forge.codelutin.com/attachments/download/3445/isis-fish-4.4.0.0-r4307...
Tu va devoir supprimer les regions, pour qu'elles soient à nouveau migrées en version 4.4 depuis une version 4.3
-- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
_______________________________________________ Isis-fish-devel mailing list Isis-fish-devel@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-devel
Le 26/10/2015 18:07, Sigrid Lehuta a écrit :
- Le probleme est independant de l equation de recrutement et concerne les multiplications de matrice. En effet, la multiplication de la matrice de repro par la matrice MappingReproRecu cf code en dessous ( zrzr.transpose().mult(oeufsm);) ne fonctionne pas. impossible de comprendre comment utiliser .mult efficacement. j ai essayé d'échanger les matrices et de transposer, rien a faire! L'API dit que .mult(matrixND) s applique a 2 matrice 2D. ici on a une matrice 1D et une matrice 2D, peut etre est ce la raison de l echec. on doit pouvoir multiplier une 2D par une 1d aussi normalement... Qu'en dit le fabriquant de la librairie MatrixND?
zrzr est une matrice zone repro / zone recru et oeufsm une matrice zone repro La multiplication de zrzr.mult(oeufsm); ne semble pas avoir de sens et zrzr.transpose().mult(oeufsm); non plus (parce que les zone recru et zone repro ne sont pas des sémantiques compatibles) par contre, l'inverse, oeufsm.mult(zrzr) en a plus car les semantiques sont compatible, ce n'est pas ca que tu veux ? -- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
Je suis bien d'accord, mais hélas ça ne marche pas (j'ai essayé toutes les combinaisons!). J'ai des 0 partout pour le recrutement. Je te mets le debug, au cas où la raison s'y cacherait. quand cette meme opération est faite dans populationMonitor (recrutement par défaut)n, mult n'est pas utilisé et on passe par un iterator. Peut etre est-ce parce que mult marche pas... ??? Merci d'avance ! Le 27 octobre 2015 10:42, Eric Chatellier <chatellier@codelutin.com> a écrit :
Le 26/10/2015 18:07, Sigrid Lehuta a écrit :
- Le probleme est independant de l equation de recrutement et concerne
multiplications de matrice. En effet, la multiplication de la matrice de repro par la matrice MappingReproRecu cf code en dessous ( zrzr.transpose().mult(oeufsm);) ne fonctionne pas. impossible de comprendre comment utiliser .mult efficacement. j ai essayé d'échanger les matrices et de transposer, rien a faire! L'API dit que .mult(matrixND) s applique a 2 matrice 2D. ici on a une matrice 1D et une matrice 2D, peut etre est ce la raison de l echec. on doit
les pouvoir
multiplier une 2D par une 1d aussi normalement... Qu'en dit le fabriquant de la librairie MatrixND?
zrzr est une matrice zone repro / zone recru et oeufsm une matrice zone repro
La multiplication de zrzr.mult(oeufsm); ne semble pas avoir de sens et zrzr.transpose().mult(oeufsm); non plus (parce que les zone recru et zone repro ne sont pas des sémantiques compatibles)
par contre, l'inverse, oeufsm.mult(zrzr) en a plus car les semantiques sont compatible, ce n'est pas ca que tu veux ?
-- Éric Chatellier - www.codelutin.com - 02.40.50.29.28
_______________________________________________ Isis-fish-devel mailing list Isis-fish-devel@list.isis-fish.org http://list.isis-fish.org/cgi-bin/mailman/listinfo/isis-fish-devel
participants (2)
-
Eric Chatellier -
Sigrid Lehuta