package rules; import java.io.*; import java.util.regex.Pattern; import org.nuiton.math.matrix.*; import fr.ifremer.isisfish.simulator.SimulationContext; import fr.ifremer.isisfish.rule.AbstractRule; import fr.ifremer.isisfish.annotations.Doc; import fr.ifremer.isisfish.entities.*; import fr.ifremer.isisfish.types.*; import static scripts.PTAtoolbox.expandEnvirVar; /** * lors pr��simul: changer q * * Auteure: LEFORESTIER Sophie, 2018 * Derni��re modif: PHAN Tuan Anh, 2022: * - ajouter la fonctionnalit�� qui permet de d���utiliser les variables d���environnement, * (il faut ��tre accompagn�� du script PTAtoolbox) * - on n���est plus oblig�� d���exclure underscore _ dans le nom de simulation */ public class ChgmtQ_variable extends AbstractRule { @Doc("README") public String param_README = String.join(" ��������� ", "auteure: LEFORESTIER Sophie, 2018", "derni��re modif: PHAN Tuan Anh, 2022" ); @Doc("Path") public String param_path = "${PBS_O_WORKDIR}/RUN"; public String[] necessaryResult = {}; // must be initialized, error if not public String[] getNecessaryResult() { return this.necessaryResult; } /** Permet d���afficher �� l���utilisateur une aide sur la r��gle */ public String getDescription() { return "Change capturability parameters from a matrix"; } /** * Appel�� au d��marrage de la simulation, cette m��thode permet d���initialiser des valeurs. * * @param context la simulation pour lequel on utilise cette r��gle */ public void init(SimulationContext context) throws Exception { String simu = context.getSimulationControl().getId(); // String simu = "simu_i0"; System.out.println("nom de la simu en cours : " + simu); Pattern simulNamePattern = Pattern.compile("^(.+)_(i\\d+)$"); String path = simulNamePattern.matcher(simu).replaceAll("_$1/$2/q.csv"); // exemple : "simu_i0" devient "RUN_simu/i0/q.csv" param_path = expandEnvirVar.replace(param_path); File Accessibility = new File(param_path + path); MatrixND matAccessibility = MatrixFactory.getInstance().create(Accessibility); System.out.println("matrice import��e " + matAccessibility); for (Population pop : context.getSimulationStorage().getParameter().getPopulations()) { // pop = (Population) context.getDB().findByTopiaId(pop.getTopiaId()); // r��cup��re population cibl��e MatrixND c = pop.getCapturability(); System.out.println("ancienne matrice " + pop + c); for (MatrixIterator i = c.iterator(); i.hasNext();) { i.next(); PopulationGroup group = (PopulationGroup) i.getSemanticsCoordinates()[0]; double q = matAccessibility.getValue(group.getId()); i.setValue(q); } System.out.println("Nouvelle matrice " + pop + c); } } /** * La condition qui doit ��tre vraie pour faire les actions. * * @param context la simulation pour laquelle on utilise cette r��gle * @param step le pas de temps courant * @param metier le m��tier concern�� * @return vrai si on souhaite que les actions soit faites */ public boolean condition(SimulationContext context, TimeStep step, Metier metier) { // on va afficher matrice accessibilit�� pour assurer que la r��gle marche bien return true; } /** Si la condition est vraie alors cette action est ex��cut��e avant le pas de temps de la simulation. */ public void preAction(SimulationContext context, TimeStep step, Metier metier) { for (Population pop : context.getSimulationStorage().getParameter().getPopulations()) { MatrixND c = pop.getCapturability(); System.out.println("accessibilit�� " + pop + c); } } /** Si la condition est vraie alors cette action est ex��cut��e apr��s le pas de temps de la simulation. */ public void postAction(SimulationContext context, TimeStep step, Metier metier) {} }