View Javadoc
1   /*
2    * #%L
3    * IsisFish
4    * 
5    * $Id: SensitivityAnalysisRandomMock.java 4156 2014-12-09 11:27:18Z echatellier $
6    * $HeadURL: https://svn.codelutin.com/isis-fish/tags/isis-fish-4.4.0.2/src/test/java/fr/ifremer/isisfish/simulator/sensitivity/SensitivityAnalysisRandomMock.java $
7    * %%
8    * Copyright (C) 2009 - 2011 Ifremer, Code Lutin, Chatellier Eric
9    * %%
10   * This program is free software: you can redistribute it and/or modify
11   * it under the terms of the GNU General Public License as
12   * published by the Free Software Foundation, either version 3 of the 
13   * License, or (at your option) any later version.
14   * 
15   * This program is distributed in the hope that it will be useful,
16   * but WITHOUT ANY WARRANTY; without even the implied warranty of
17   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18   * GNU General Public License for more details.
19   * 
20   * You should have received a copy of the GNU General Public 
21   * License along with this program.  If not, see
22   * <http://www.gnu.org/licenses/gpl-3.0.html>.
23   * #L%
24   */
25  
26  package fr.ifremer.isisfish.simulator.sensitivity;
27  
28  import java.io.File;
29  import java.util.List;
30  
31  import org.apache.commons.logging.Log;
32  import org.apache.commons.logging.LogFactory;
33  
34  import fr.ifremer.isisfish.datastore.SimulationStorage;
35  import fr.ifremer.isisfish.simulator.launcher.SimulationServiceTest;
36  import fr.ifremer.isisfish.simulator.sensitivity.domain.ContinuousDomain;
37  import fr.ifremer.isisfish.simulator.sensitivity.domain.DiscreteDomain;
38  
39  /**
40   * Implementation of SensitivityAnalysis that take random value in available
41   * factors.
42   * 
43   * @author chatellier
44   * @version $Revision: 4156 $
45   * 
46   * Last update : $Date: 2014-12-09 12:27:18 +0100 (Tue, 09 Dec 2014) $ By : $Author: echatellier $
47   */
48  public class SensitivityAnalysisRandomMock extends AbstractSensitivityAnalysis {
49  
50      private static final Log log = LogFactory.getLog(SimulationServiceTest.class);
51  
52      public String getDescription() {
53          return "Implementation of random sensibility analysis";
54      }
55  
56      /**
57       * Retourne vrai si le calculateur sait gerer la cardinalité des facteurs
58       * continue.
59       * 
60       * @return <tt>true</tt> s'il sait la gerer
61       */
62      public boolean canManageCardinality() {
63          return false;
64      }
65  
66      /**
67       * Envoi un plan a faire analyser par l'outils d'analyse de sensibilité.
68       * 
69       * Retourne un {@link SensitivityScenarios} qui représente l'ensemble des
70       * scenarios à prendre en compte pour les simulations.
71       * 
72       * @param plan plan a analyser
73       * @param outputdirectory master sensitivity export directory
74       * 
75       * @return un {@link SensitivityScenarios}
76       * @throws SensitivityException if calculator impl fail to execute
77       * 
78       * @see DesignPlan
79       * @see Scenario
80       * @see SensitivityScenarios
81       */
82      public SensitivityScenarios compute(DesignPlan plan, File outputdirectory)
83              throws SensitivityException {
84  
85          if (log.isDebugEnabled()) {
86              log.info("Call random mock compute()");
87          }
88  
89          // return result
90          SensitivityScenarios sensitivityScenarios = new SensitivityScenarios();
91  
92          List<Factor> factors = plan.getFactors();
93          for (int i = 0; i < factors.size() * 2; ++i) {
94  
95              Scenario scenario = new Scenario();
96              // choose a 0 < number <  factors.size()
97              int pickedFactor = (int) (Math.random() * factors.size());
98              Factor factor = factors.get(pickedFactor);
99  
100             Domain domain = factor.getDomain();
101             if (domain instanceof ContinuousDomain) {
102                 ContinuousDomain cDomain = (ContinuousDomain) domain;
103                 Object minValue = 10.5; //cDomain.getMinBound();
104                 Object maxValue = 15.5; //cDomain.getMaxBound();
105 
106                 factor.setValueForIdentifier(minValue);
107                 scenario.addFactor(factor);
108                 factor.setValueForIdentifier(maxValue);
109                 scenario.addFactor(factor);
110             } else {
111                 DiscreteDomain dDomain = (DiscreteDomain) domain;
112                 for (Object sValue : dDomain.getValues().keySet()) {
113                     factor.setValueForIdentifier(sValue);
114                     scenario.addFactor(factor);
115                 }
116             }
117 
118             sensitivityScenarios.getScenarios().add(scenario);
119         }
120 
121         return sensitivityScenarios;
122 
123     }
124 
125     /**
126      * Permet de renvoyer les resultats de simulations à l'outils de d'analyse
127      * de sensibilité.
128      * 
129      * @param simulationStorages
130      *            ensemble des {@link SimulationStorage} qui ont résultés des
131      *            simulations
132      * @param outputdirectory
133      *            master sensitivity export directory
134      * @throws SensitivityException
135      *             if calculator impl fail to execute
136      * 
137      * @see SensitivityScenarios
138      */
139     public void analyzeResult(List<SimulationStorage> simulationStorages,
140             File outputdirectory) throws SensitivityException {
141 
142     }
143 
144 }