package rules; //import static org.nuiton.i18n.I18n._; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; //import scripts.ResultName; import scripts.SiMatrix; import java.util.Arrays; import java.util.ArrayList; import java.util.List; import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.HashMap; import java.util.Map; import java.util.Set; import java.io.File; import java.io.Writer; import java.io.FileWriter; import java.io.BufferedWriter; import java.io.FileReader; import fr.ifremer.isisfish.annotations.Doc; import org.nuiton.math.matrix.*; import fr.ifremer.isisfish.IsisFishDAOHelper; import fr.ifremer.isisfish.simulator.MetierMonitor; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.types.TimeStep; import fr.ifremer.isisfish.types.Month; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.rule.AbstractRule; import fr.ifremer.isisfish.datastore.ResultStorage; import org.nuiton.util.FileUtil; /** * effortObs_MultiSp * * Created: 26 aout 2008 * * @author anonymous * @version $Revision: 1.2 $ * * Last update: $Date: 2013-06-12 08:59:38 $ * by : $Author: 2SY- Sigrid $ */ public class DeriveEfficacite_5ans extends AbstractRule { /** to use log facility, just put in your code: log.info("..."); */ static private Log log = LogFactory.getLog(DeriveEfficacite_5ans.class); @Doc(value= "Valeur de dérive au bout de 5 ans (décimal > -1) ") public double param_derive = 0; protected List allStrategies ; public String [] necessaryResult = { }; public String[] getNecessaryResult() { return this.necessaryResult; } /** * Permet d'afficher a l'utilisateur une aide sur la regle. * @return L'aide ou la description de la regle */ public String getDescription() throws Exception { return ("Force chaque annee les efficacité de pêche a changer pour atteindre l avaleur indiquée en 5 ans"); } /** * Appel * des valeurs * @param simulation La simulation pour lequel on utilise cette regle */ public void init(SimulationContext context) throws Exception { // reccuperation des metiers et strategies SiMatrix siMatrix = SiMatrix.getSiMatrix(context); TimeStep date = new TimeStep(0); // reccuperation des strategies allStrategies = siMatrix.getStrategies(date); }// fin de init /** * La condition qui doit etre vrai pour faire les actions * @param simulation La simulation pour lequel on utilise cette regle * @return vrai si on souhaite que les actions soit faites */ public boolean condition(SimulationContext context, TimeStep step, Metier metier) throws Exception { return step.getYear() >0 ; } /** * Si la condition est vrai alors cette action est execute avant le pas * de temps de la simulation. * @param simulation La simulation pour lequel on utilise cette regle */ // Booleen permettant que ne boucler que sur un seul metier dans la preaction : boolean first = true; public void preAction(SimulationContext context, TimeStep step, Metier metier) throws Exception { //System.out.println("first = " + first+ " ,on passe dans la preaction ?"); if (first){ // on passe dans preaction pour la premiere fois System.out.println("Oui, preaction : "); List dejaFait = new ArrayList (); // Boucle sur les strategies for(Strategy strIndex : allStrategies){ SetOfVessels flt = strIndex.getSetOfVessels(); if(!dejaFait.contains(flt)){ dejaFait.add(flt); System.out.println("passe dans "+flt.getName()); SetOfVessels fltdb = (SetOfVessels)context.getDB().findByTopiaId(flt.getTopiaId()); // Change efficiency equation //--------------------------- double multiplier = 1 + param_derive/4 * step.getYear(); System.out.println("derive annuelle :" + multiplier); String newEq = "return "+multiplier+" ;"; Equation eqEff = fltdb.getTechnicalEfficiencyEquation(); eqEff.setContent(newEq); System.out.println("eff :" + eqEff.getContent()); } }//fin de boucle sur strategies first = false; }// fin de first= true }// fin de pre action /** * Si la condition est vrai alors cette action est strategy=" + str.getName() +", l'anne : "+ date.getYear() + " et le mois = "+date.getMonth()+": newInactivity= "+ newInactivity); // on boucle sur les metiers de la strategie pour initialiser les efforts avec matEffort Collection strMet = str.getSetOfVessels().getPossibleMetiers() ; for (EffortDescription ed : strMet){ Metier strMetier = ed.getPossibleMetiers(); System.out.println("pour le metier=" + strMetier); execut * de temps de la simulation. * @param simulation La simulation pour lequel on utilise cette regle */ public void postAction(SimulationContext context, TimeStep step, Metier metier) throws Exception { first = true ; } }