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 }