Re j'ai essaye de contourner le probleme en m'attaquant directement au ResulManager dans le Gravity Model mais je bloque ... J'ai defini dans ResultName.java la nouvelle matrice. @Doc(value = "do the doc of Result matrixGrossValueOfLandingsOtherSpeciesPerStrategyMet") static final public String MATRIX_GROSS_VALUE_OF_LANDINGS_OTHERSPECIES_PER_STRATEGY_MET = n_("matrixGrossValueOfLandingsOtherSpeciesPerStrategyMet"); Elle devrait être directement utilisée dans GravityModel.java dans la méthode... private double grossValueOfLandingsPerStrategyMetPerVessel(Strategy str, Metier metier, Date date) throws TopiaException { double grossValueOfLandingsPerStrategyMet = grossValueOfLandingsPerStrategyMet(str, metier, date); // FIXME verifier que c bien cette donnée qu'il faut utiliser dans le doc: PropNbVessels(str, sov) double proportionSetOfVessels = str.getProportionSetOfVessels(); double numberOfVessels = str.getSetOfVessels().getNumberOfVessels(); double grossValueOfLandingsOtherSpeciesPerStrategyMet = grossValueOfLandingsOtherSpeciesPerStrategyMet(str,metier,date); return (grossValueOfLandingsPerStrategyMet + grossValueOfLandingsOtherSpeciesPerStrategyMet) / (proportionSetOfVessels * numberOfVessels); } ...si on pouvait la creer et la calculer dans GravityModel.java public MatrixND matrixGrossValueOfLandingsOtherSpeciesPerStrategyMet(Date date) throws TopiaException{ List<Strategy> strategies = siMatrix.getStrategies(date); List<Metier> metiers = siMatrix.getMetiers(date); MatrixND result = MatrixFactory.getInstance().create( ResultName.MATRIX_GROSS_VALUE_OF_LANDINGS_OTHERSPECIES_PER_STRATEGY_MET, new List[]{strategies, metiers}, new String[]{n_("Strategies"), n_("Metiers")}); A COMPLETER PAR LE CALCUL CI-DESSOUS return result; } MAIS mettre le calcul du grossValueOtherSpecies dans GravityModel n'est pas possible car il est vraiment tres dépendant de la pêcherie. Il est pour l'instant plus souple de le mettre dans une regle. Le soucis est que je ne peux pas mettre à jour le resulManager depuis une regle (si j'ai bien compris les affectations doivent etre faites dans le script GravityModel). Le calcul en question est celui la : Apres lecture de 3 fichiers et stockage de l'info dans 3 matrices matrixCoeffOthers = MatrixFactory.getInstance().create( "matrixCoeffOthers", new List[]{new ArrayList(mesStrategies.values()), metiers, coeffs}, new String[]{"Strategies","Metiers","Coeff"}); On recupere les matrices du resulmanager et on calcul les coef de la nouvelle matrice MatrixND matImport = MatrixFactory.getInstance().create(new int[]{14,2});; for(Strategy str : mesStrategies.values()){ for(Metier met : metiers){ for(String coeff : coeffs){ if ("NephropsLargeLesSables".equals(str.getName())||"NephropsLargeGuilvinec".equals(str.getName())||"NephropsIntermediateLesSables".equals(str.getName())||"NephropsIntermediateGuilvinec".equals(str.getName())) { matImport = matCoeffOthers0; }else if ("HakeLargeLesSables".equals(str.getName())||"HakeLargeGuilvinec".equals(str.getName())||"HakeIntermediateLesSables".equals(str.getName())||"HakeIntermediateGuilvinec".equals(str.getName())) {matImport = matCoeffOthers1; }else if ("BenthicLargeLesSables".equals(str.getName())||"BenthicLargeGuilvinec".equals(str.getName())||"BenthicIntermediateLesSables".equals(str.getName())||"BenthicIntermediateGuilvinec".equals(str.getName())) {matImport = matCoeffOthers2; } matrixCoeffOthers.setValue(str,met, coeff, matImport.getValue(met,coeff)); }// fin de for coeff }// fin de for met MatrixND EffortNominalPerStrMet = null; EffortNominalPerStrMet = resultmanager.getMatrix( date.previousYear(), ResultName.MATRIX_EFFORT_NOMINAL_PER_STRATEGY_MET); System.out.println("EffortNominalPerStrMet calculee "+EffortNominalPerStrMet); //on commence par creer une matrice de valeurs (somme sur ttes les especes capturees) par strategie met MatrixND GrossValuePerStrMet = null; GrossValuePerStrMet = resultmanager.getMatrix( date.previousYear(), ResultName.MATRIX_GROSS_VALUE_OF_LANDINGS_PER_STRATEGY_MET); System.out.println("GrossValuePerStrMet calculee "+GrossValuePerStrMet); //ajouter pour tous les métiers les valeurs liées qux autres espèces calculées par modele lineaire // Boucle sur les strategies de mes strategies List <Strategy> mStr = new ArrayList(mesStrategies.values()); for(Strategy strIndex : mStr){ // interdit de faire des set sur les strategies de la semantique de la matrice, il faut recuperer les strategies de la date courante Strategy str = (Strategy)context.getDB().findByTopiaId(strIndex.getTopiaId()); StrategyMonthInfo smi = str.getStrategyMonthInfo(date.getMonth()); Collection<EffortDescription> strMet = str.getSetOfVessels().getPossibleMetiers() ; //2) calcul les valeurs non simulees du mois l année précédante for (EffortDescription effort : strMet){ Metier met = effort.getPossibleMetiers() ; System.out.println("Boucle metier 1, metier possible: "+met.getName()); double eff = EffortNominalPerStrMet.getValue(str,met); System.out.println("effort str"+str.getName()+met.getName()+" : "+eff); //GrossValueAutres par stratégie // Hypothese 1 = pas de distinction entre les métiers n'agira donc pas sur la gravité) // Hypothese 2 = a distinguer selon les métiers - agira sur la gravité // l'hypothese est le resultat des coef dans la matrice en entrée si tous identiques quelque soit le metier dans la stratégie alors H1 // sinon H2 double valMetLangoustine = matrixCoeffOthers.getValue(str,met,ALPHA_O) + matrixCoeffOthers.getValue(str,met,BETA_O)*eff +GrossValuePerStrMet.getValue(str,met); //System.out.println("valOtherMetAnchois :"+matrixCoeffOthers.getValue(str,met)*eff); //System.out.println("GrossValuePerStrMet avant : "+GrossValuePerStrMet.getValue(str,met)); GrossValuePerStrMet.setValue(str,met,valMetLangoustine); System.out.println("valOtherMetLangoustine : "+ valMetLangoustine); System.out.println("GrossValuePerStrMet apres : "+GrossValuePerStrMet.getValue(str,met)); } } Il faudrait alors mettre le calcul dans la matrice du resulManager resultmanager.addResult(date.previousYear(),ResultName.MATRIX_GROSS_VALUE_OF_LANDINGS_OTHERSPECIES_PER_STRATEGY_MET,GrossValuePerStrMet); SI T'ES ARRIVE JUSQUE LA ALORS PEUT-ETRE VAS TU POUVOIR M'AIDER CAR JE NE VOIS PAS COMMENT FAIRE ... Merci de ton aide stephanie Stephanie MAHEVAS <Stephanie.Mahevas@ifremer.fr> a écrit :
Salut
je souhaite modifier une matrice dans le resulManager j'ai écrit le code suivant qui semble ne pas avoir d'action (matrice GrossValue inchangée).
resultmanager.addResult(date.previousYear(),ResultName.MATRIX_GROSS_VALUE_OF_LANDINGS_PER_STRATEGY_MET,GrossValuePerStrMet);
avec : GrossValuePerStrMet matrice créée dans le script GrossValuePerStrMet = resultmanager.getMatrix( date.previousYear(),
ResultName.MATRIX_GROSS_VALUE_OF_LANDINGS_PER_STRATEGY_MET); et modifiée pour chaque str et met GrossValuePerStrMet.setValue(str,met,valMetLangoustine);
pourquoi ca marche pas? merci Stephanie
...................................................................... Stephanie MAHEVAS (Stephanie.Mahevas@ifremer.fr) IFREMER/EMH (Ecologie et Modèles pour l'Halieutique) Tel: 02 40 37 41 81 Fax: 02 40 37 40 75
o \ o / _ o __| \ / |__ o _ \ o / o /|\ | /\ ___\o \o | o/ o/__ /\ | /|\ / \ / \ | \ /) | ( \ /o\ / ) | (\ / | / \ / \ ...................................................................... _______________________________________________ Isis-fish-devel mailing list Isis-fish-devel@lists.labs.libre-entreprise.org http://lists.labs.libre-entreprise.org/mailman/listinfo/isis-fish-devel