| [83a1cc2] | 1 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 2 | // AnalisisDeCostesDeProduccion.tol |
|---|
| 3 | // Análisis de costes de las diferentes opciones |
|---|
| 4 | // A- Mantener y hacer crecer el TOL actual |
|---|
| 5 | // B- Migrar todo a uno o varios lenguajes (R, bugs, ...) y adpatarlos |
|---|
| 6 | // C- Crear un nuevo lenguaje TOL2/MOLE |
|---|
| 7 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 8 | |
|---|
| 9 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 10 | //Estructura de definición de cada componente del coste |
|---|
| 11 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 12 | Struct CosteOpcionStr |
|---|
| 13 | { |
|---|
| 14 | Text Clave, //Clave de la componente de coste |
|---|
| 15 | Text Concepto, //Nombre descriptivo de la componente |
|---|
| 16 | Text Relacion, //Relación de orden entre el coste de las opciones |
|---|
| 17 | Real CosteBaseMin, //Mínimo coste base en unidades arbitrarias |
|---|
| 18 | Real CosteBaseMax //Máximo coste base en unidades arbitrarias |
|---|
| 19 | }; |
|---|
| 20 | |
|---|
| 21 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 22 | Set DefCoste = |
|---|
| 23 | // Se definen las características de cada componente de coste asignándoles de |
|---|
| 24 | // forma arbitaria pero con ciertos visos de racionalidad |
|---|
| 25 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 26 | [[ |
|---|
| 27 | CosteOpcionStr("C1","DESARROLLO", "B<<A<=C", 1.00, 2.00), |
|---|
| 28 | CosteOpcionStr("C2","IMPLANTACION", "A<=C<<B", 0.50, 1.00), |
|---|
| 29 | CosteOpcionStr("C3","APRENDIZAJE", "B<<A<=C", 0.10, 0.30), |
|---|
| 30 | CosteOpcionStr("C4","MANTENIMIENTO","B<=C<<A", 0.50, 1.00), |
|---|
| 31 | CosteOpcionStr("C5","DEPENDENCIA", "C==A<<B", 1.00, 2.00) |
|---|
| 32 | ]]; |
|---|
| 33 | |
|---|
| 34 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 35 | //Estructura de definición de los factores de conversión de las relaciones de |
|---|
| 36 | //orden |
|---|
| 37 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 38 | Struct FactorRelacionStr |
|---|
| 39 | { |
|---|
| 40 | Text Relacion, //Igual:"==", Algo menor:"<=", Mucho menor:"<<" |
|---|
| 41 | Real FactorMin, //Factor mínimo de coste adjudicado a la relación |
|---|
| 42 | Real FactorMax //Factor máximo de coste adjudicado a la relación |
|---|
| 43 | }; |
|---|
| 44 | |
|---|
| 45 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 46 | Set DefFactor = |
|---|
| 47 | // Se definen las características de cada componente de coste asignándoles de |
|---|
| 48 | // forma arbitaria pero con ciertos visos de racionalidad |
|---|
| 49 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 50 | [[ |
|---|
| 51 | FactorRelacionStr("==", 1.00, 1.00), |
|---|
| 52 | FactorRelacionStr("<=", 1.01, 1.25), |
|---|
| 53 | FactorRelacionStr("<<", 1.25, 2.00) |
|---|
| 54 | ]]; |
|---|
| 55 | |
|---|
| 56 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 57 | //Estructura de los resultados de la evaluación de costes |
|---|
| 58 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 59 | Struct EvalCosteStr |
|---|
| 60 | { |
|---|
| 61 | Real CosteBase1, //Coste base de la componente C1: DESARROLLO |
|---|
| 62 | Real CosteBase2, //Coste base de la componente C2: IMPLANTACION |
|---|
| 63 | Real CosteBase3, //Coste base de la componente C3: APRENDIZAJE |
|---|
| 64 | Real CosteBase4, //Coste base de la componente C4: MANTENIMIENTO |
|---|
| 65 | Real CosteBase5, //Coste base de la componente C5: DEPENDENCIA |
|---|
| 66 | Real Alfa, //Factor de coste adjudicado a una relación <= |
|---|
| 67 | Real Beta, //Factor de coste adjudicado a una relación << |
|---|
| 68 | Real CosteA, //Coste relativo de la opción A (TOL1) |
|---|
| 69 | Real CosteB, //Coste relativo de la opción B (R+Bugs+...) |
|---|
| 70 | Real CosteC //Coste relativo de la opción C (TOL2/MOLE) |
|---|
| 71 | }; |
|---|
| 72 | |
|---|
| 73 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 74 | Real CosteFactor(Text rel, Real alfa, Real beta) |
|---|
| 75 | // PURPOSE: Establece una relación cuantitativa asociada a una relación de |
|---|
| 76 | // orden en virtud de los siguientes factores de conversión: |
|---|
| 77 | // 1 : factor de coste adjudicado a una relación == |
|---|
| 78 | // alfa : factor de coste adjudicado a una relación <= |
|---|
| 79 | // beta : factor de coste adjudicado a una relación << |
|---|
| 80 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 81 | { |
|---|
| 82 | Case(rel=="==",1, |
|---|
| 83 | rel=="<=",alfa, |
|---|
| 84 | rel=="<<",beta) |
|---|
| 85 | }; |
|---|
| 86 | |
|---|
| 87 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 88 | Set SimulaCostes(Real unused) |
|---|
| 89 | // PURPOSE: Simula los parámetros de la estructura de costes como uniformes |
|---|
| 90 | // dentro del rango de cada uno y evalua los costes asociados |
|---|
| 91 | ////////////////////////////////////////////////////////////////////////////// |
|---|
| 92 | { |
|---|
| 93 | Set cb = For(1,Card(DefCoste),Real(Real k) |
|---|
| 94 | { |
|---|
| 95 | Rand(DefCoste[k]->CosteBaseMin, DefCoste[k]->CosteBaseMax) |
|---|
| 96 | }); |
|---|
| 97 | Real alfa = Rand(DefFactor[2]->FactorMin, DefFactor[2]->FactorMax); |
|---|
| 98 | Real beta = Rand(DefFactor[3]->FactorMin, DefFactor[3]->FactorMax); |
|---|
| 99 | |
|---|
| 100 | Real CA = 0; |
|---|
| 101 | Real CB = 0; |
|---|
| 102 | Real CC = 0; |
|---|
| 103 | |
|---|
| 104 | Text ev = SetSum(For(1,Card(DefCoste),Text(Real k) |
|---|
| 105 | { |
|---|
| 106 | //WriteLn("SimulaCostes("<<alfa<<","<<beta<<") ["<<k<<"]"); |
|---|
| 107 | Text rel = DefCoste[k]->Relacion; |
|---|
| 108 | Real base = cb[k]; |
|---|
| 109 | Text Opt1 = Sub(rel,1,1); |
|---|
| 110 | Text Rel1 = Sub(rel,2,3); |
|---|
| 111 | Text Opt2 = Sub(rel,4,4); |
|---|
| 112 | Text Rel2 = Sub(rel,5,6); |
|---|
| 113 | Text Opt3 = Sub(rel,7,7); |
|---|
| 114 | |
|---|
| 115 | Real C1 = base; |
|---|
| 116 | Real C2 = C1*CosteFactor(Rel1, alfa, beta); |
|---|
| 117 | Real C3 = C2*CosteFactor(Rel2, alfa, beta); |
|---|
| 118 | |
|---|
| 119 | Text ev = |
|---|
| 120 | "Real C"+Opt1+":= C"+Opt1+" + "<<C1<<";\n"+ |
|---|
| 121 | "Real C"+Opt2+":= C"+Opt2+" + "<<C2<<";\n"+ |
|---|
| 122 | "Real C"+Opt3+":= C"+Opt3+" + "<<C3<<";\n"; |
|---|
| 123 | //WriteLn(ev); |
|---|
| 124 | ev |
|---|
| 125 | })); |
|---|
| 126 | Set IncludeText(ev); |
|---|
| 127 | Real min = Min(CA,CB,CC); |
|---|
| 128 | Real CA := CA/min; |
|---|
| 129 | Real CB := CB/min; |
|---|
| 130 | Real CC := CC/min; |
|---|
| 131 | EvalCosteStr(Copy(cb[1]),Copy(cb[2]),Copy(cb[3]),Copy(cb[4]),Copy(cb[5]), |
|---|
| 132 | Copy(alfa),Copy(beta), |
|---|
| 133 | Copy(CA),Copy(CB),Copy(CC)) |
|---|
| 134 | }; |
|---|
| 135 | |
|---|
| 136 | |
|---|
| 137 | Set Simulacion = For(1,10000,Set(Real k) |
|---|
| 138 | { |
|---|
| 139 | SimulaCostes(0) |
|---|
| 140 | }); |
|---|
| 141 | |
|---|
| 142 | Matrix Sim = SetMat(Simulacion); |
|---|
| 143 | Real CosteA = MatSum(SubCol(Sim,[[ 8]]))/Card(Simulacion); |
|---|
| 144 | Real CosteB = MatSum(SubCol(Sim,[[ 9]]))/Card(Simulacion); |
|---|
| 145 | Real CosteC = MatSum(SubCol(Sim,[[10]]))/Card(Simulacion); |
|---|
| 146 | |
|---|
| 147 | WriteLn( |
|---|
| 148 | "\nCoste Opción A = "<<CosteA+ |
|---|
| 149 | "\nCoste Opción B = "<<CosteB+ |
|---|
| 150 | "\nCoste Opción C = "<<CosteC); |
|---|
| 151 | |
|---|
| 152 | |
|---|
| 153 | /* */ |
|---|