close Warning: Can't synchronize with repository "(default)" (/var/svn/mms does not appear to be a Subversion repository.). Look in the Trac log for more information.

Ticket #894: alternative.tol

File alternative.tol, 4.4 KB (added by Pedro Gea, 13 years ago)
Line 
1//////////////////////////////////////////////////////////////////////////////
2// Alternativas a las funciones sugeridas en el tique #894
3
4// Partimos de la instancia del modelo: 'model'
5MMS::@Model model = MMS::Container::GetForecast(1)::GetModel(?);
6
7//////////////////////////////////////////////////////////////////////////////
8// [FindProb]
9
10Set FindProb(model);
11
12// Para encontrar la lista de variables independientes que dan problemas
13// podemos hacer lo siguiente:
14
15// Tomar el conjunto de variables independientes:
16Set variablesI = model::GetDataSet(?)::GetVariablesI(?);
17 
18// Encontrar las que dan error apoyándonos en una función de tipo más
19// general habilitada al efecto:
20Set Include("checkErrors.tol");
21Set varsI_Prob = CheckErrors(variablesI, Anything (MMS::@Variable v) {
22  v::GetData(?)
23}, 1/50); // traza 1 de cada 50
24
25// Para obtener la lista con sus identificadores (aunque si trabajamos
26// directamente con las instancias no nos hará falta) basta con:
27Set varsI_Prob_Ids = EvalSet(varsI_Prob, Text (MMS::@Variable variable) {
28  variable::GetIdentifier(?)
29});
30
31//////////////////////////////////////////////////////////////////////////////
32// [OffByName]
33// [OffMiss]
34// [OffFlat]
35// [OffBeginEnd]
36
37Set OffByName(varsI_Prob_Ids, model);
38Set OffMiss(model);
39Set OffFlat(model);
40  Date begin = y2006;
41  Date end = y2012;
42Set OffBeginEnd(model, begin, end);
43
44// Para desactivar un conjunto de términos explicativos (y por tanto sus
45// parámetros) hemos de localizarlos siguiendo algún criterio.
46
47// Para estos casos es especialmente útil disponer de un método que nos
48// devuelva el conjunto de términos explicativos activos cuyo input
49// responda a un determinado criterio.
50
51// Nos apoyamos en una función auxiliar preparada al efecto:
52Set Include("selectExpTermsActive_ByInputTest.tol");
53// Set SelectExpTermsActive_ByInputTest(MMS::@Model model, Code inputTest)
54
55Set offByName = SelectExpTermsActive_ByInputTest(model,
56  Real (MMS::@MVariable input) {
57  // Encontramos todas las dependencias independientes del input:
58  Set depsI = input::GetVariable(?)::GetDependencesI(?);
59  // Comprobamos si hay alguna que esté en el conjunto de variables
60  // problemáticas:
61  Card(MMS::Intersection_Eq(depsI, varsI_Prob, SameNameBlock))
62});
63// Desactivamos los términos anteriores:
64Set EvalSet(offByName, Real (MMS::@ExpTerm expTerm) {
65  expTerm::SetIsActive(False)
66});
67
68Set offMiss = SelectExpTermsActive_ByInputTest(model,
69  Real (MMS::@MVariable input) {
70  // Comprobamos si el input presenta omitidos
71  HasUnknown(input::GetData(?))
72});
73// Desactivamos los términos anteriores:
74Set EvalSet(offMiss, Real (MMS::@ExpTerm expTerm) {
75  expTerm::SetIsActive(False)
76});
77
78Set offFlat = SelectExpTermsActive_ByInputTest(model,
79  Real (MMS::@MVariable input) {
80  // Comprobamos si el input es constante
81  Serie data = input::GetData(?);
82  MaxS(data) == MinS(data)
83});
84// Desactivamos los términos anteriores:
85Set EvalSet(offFlat, Real (MMS::@ExpTerm expTerm) {
86  expTerm::SetIsActive(False)
87});
88
89Set offBeginEnd = SelectExpTermsActive_ByInputTest(model,
90  Real (MMS::@MVariable input) {
91  // Comprobamos si el input es constante
92  Serie data = input::GetData(?);
93  Date first = First(data);
94  Date last = Last(data);
95  (first > begin) | (last < end)
96});
97// Desactivamos los términos anteriores:
98Set EvalSet(offBeginEnd, Real (MMS::@ExpTerm expTerm) {
99  expTerm::SetIsActive(False)
100});
101
102//////////////////////////////////////////////////////////////////////////////
103// [SelectDepend]
104
105Set SelectDepend(varsI_Prob_Ids, model);
106
107// Para seleccionar la lista de variables dependientes de un determinado
108// conjunto basta hacer:
109
110Set varsI_Prob_Dependents = MMS::Unique_Eq(SetConcat(EvalSet(varsI_Prob,
111  Set (MMS::@Variable variable) {
112  variable::GetDependents_ToLevel(?)
113})), SameNameBlock);
114
115// La lista total de problemáticas será:
116
117Set vars_Prob = varsI_Prob << varsI_Prob_Dependents;
118
119Set vars_Prob_Ids = EvalSet(varsI_Prob, Text (MMS::@Variable variable) {
120  variable::GetIdentifier(?)
121});
122
123//////////////////////////////////////////////////////////////////////////////
124// [RemoveByName]
125
126Set RemoveByName(vars_Prob_Ids, model);
127
128// Para borrar las variables basta con hacer:
129Set EvalSet(vars_Prob, Real (MMS::@Variable variable) {
130  variable::Delete(?)
131});
132
133//////////////////////////////////////////////////////////////////////////////
134
135