Author: chatellier Date: 2009-08-25 12:15:04 +0000 (Tue, 25 Aug 2009) New Revision: 167 Added: trunk/rules/EffortReduction.java Log: Ajout de l'export EffortReduction Added: trunk/rules/EffortReduction.java =================================================================== --- trunk/rules/EffortReduction.java (rev 0) +++ trunk/rules/EffortReduction.java 2009-08-25 12:15:04 UTC (rev 167) @@ -0,0 +1,139 @@ +package rules; + +import static org.codelutin.i18n.I18n._; + +import java.util.List; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import scripts.SiMatrix; +import fr.ifremer.isisfish.entities.Metier; +import fr.ifremer.isisfish.entities.Strategy; +import fr.ifremer.isisfish.rule.AbstractRule; +import fr.ifremer.isisfish.simulator.SimulationContext; +import fr.ifremer.isisfish.types.Date; +import fr.ifremer.isisfish.util.Doc; + +/** + * EffortReduction.java + * + * Created: 3 septembre 2008 + * + * @author anonymous <anonymous@labs.libre-entreprise.org> + * @version $Revision$ + */ +public class EffortReduction extends AbstractRule { + + /** to use log facility, just put in your code: log.info("..."); */ + static private Log log = LogFactory.getLog(EffortReduction.class); + + @Doc("Begin date") + public Date param_beginDate = new Date(0); + @Doc("End date") + public Date param_endDate = new Date(59); + + @Doc("Pourcentage de reduction d effort applique.") + public double param_PercentReduction = 0.5; + + boolean first = true; + + protected String[] necessaryResult = {}; + + /** + * @return the 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() { + return _("Reduce monthly effort of each strategy of the percent indicated"); + } + + /** + * Appele au demarrage de la simulation, cette methode permet d'initialiser + * des valeurs. + * @param context La simulation pour lequel on utilise cette regle + */ + public void init(SimulationContext context) throws Exception { + } + + /** + * La condition qui doit etre vrai pour faire les actions + * @param context La simulation pour lequel on utilise cette regle + * @return vrai si on souhaite que les actions soit faites + */ + public boolean condition(SimulationContext context, Date date, Metier metier) + throws Exception { + + boolean result = true; + if (date.before(param_beginDate)) { + result = false; + } else if (date.after(param_endDate)) { + result = false; + } + if (result) + System.out.println("condition vraie"); + return result; + } + + /** + * Si la condition est vrai alors cette action est executee avant le pas + * de temps de la simulation. + * @param context La simulation pour lequel on utilise cette regle + */ + public void preAction(SimulationContext context, Date date, Metier metier) + throws Exception { + // shinte la boucle metier + if (first) { + first = false; + SiMatrix siMatrix = SiMatrix.getSiMatrix(context); + List<Strategy> strs = siMatrix.getStrategies(date); + for (Strategy str : strs) { + System.out.println("strategy evaluee : " + str.getName()); + + /* Dans un premiere temps tant que l inactivit� est un entier on utilise + * la proportion du nombre de bateaux de la strategie pour reduire l effort + * ce qu on ferait aussi pour une mesure de reduction du nombre de bateaux mais + * comme actuellement on ne tient pas compte de l economie... ca revient au meme + * En fait passer par l inactivit� n est pas la meilleure facon de modifier + * l effort le mieux serait d agir sur un autre coeff qui est multipli� a + * l effort (Fstd ou ciblage) car comme ca le code serait generique mais on + * ne verrait pas que l effort nominal est modifi�... + */ + + double propOld = str.getProportionSetOfVessels(); + double newProp = propOld * (1 - param_PercentReduction); + str.setProportionSetOfVessels(newProp); + + /* int Inact = str.getStrategyMonthInfo(date.getMonth()).getMinInactivityDays(); + System.out.println("inactivity old = "+ Inact); + int nbDays = date.getMonth().getNumbersOfDays(); + System.out.println("nbDays = "+nbDays); + double newInact = nbDays-((nbDays-Inact)*(1-param_PercentReduction)); + System.out.println("newInact = "+newInact); + int ni = (int) newInact ; + System.out.println("ni = "+ ni); + str.getStrategyMonthInfo(date.getMonth()).setMinInactivityDays(ni); + System.out.println("setMinInactivityDays : " + str.getStrategyMonthInfo(date.getMonth()).getMinInactivityDays()); + */ + } + } + } + + /** + * Si la condition est vrai alors cette action est executee apres le pas + * de temps de la simulation. + * @param context La simulation pour lequel on utilise cette regle + */ + public void postAction(SimulationContext context, Date date, Metier metier) + throws Exception { + first = true; + } + +} Property changes on: trunk/rules/EffortReduction.java ___________________________________________________________________ Added: svn:keywords + "Author Date Id Revision HeadURL"