private static void Inicializar() { Modelo.Crear("Simulador de Mediana Empresa", 1); ExpInf.Usotabla = Tabla.UsoTabla.Reloj; double[] param = { ProductividadMedia, VariacionProdMedia }; GVA.Distribucion d = GVA.Distribucion.Normal; GVA.TipoGenerador t = GVA.TipoGenerador.MarsagliaMWC; GVA VAProductividad = new GVA(d, param, t, 1); Inventario.EstablecerValorInicial(InventarioInicial); Inventario.UpdateFn = () => Funciones.MAX(0, (Inventario.j + (Produccion.k - UnidadesVendidas.k) * Reloj.DT)); Produccion.UpdateFn = () => (VAProductividad.Generar()); Demanda.UpdateFn = () => (PromedioVtasMensuales * (PorcIncVend * CantVendedores) - (ExpInf.k) / 100f * FactorAfecInf * PromedioVtasMensuales); UnidadesVendidas.UpdateFn = () => Funciones.MIN(Demanda.k, Inventario.k); //Unidades Ventas.UpdateFn = () => (Precio * UnidadesVendidas.k); //$ CostoSalarios.UpdateFn = () => (CantVendedores * SalarioPromedio); //$ GananciasNetas.UpdateFn = () => (Ventas.k - (Ventas.k * PorcImpuestos)); //$ CostosInventario.UpdateFn = () => (CostoInvPorUnidadAlmacenada * Inventario.k); //$ CostosTotales.UpdateFn = () => (CostoSalarios.k + CostosInventario.k); //$ Dinero.EstablecerValorInicial(DineroInicial); Dinero.UpdateFn = () => (Dinero.j + (GananciasNetas.k - CostoSalarios.k - CostosInventario.k) * Reloj.DT); //$ }
private static void Inicializar() { //Seteos Modelo.Crear("Simulador de Mediana Empresa", 1); Valor_Esperado_Total.UpdateFn = () => (Valor_Esperado_Pagos.k + Activos_Menos_Deudas.k / Math.Pow(1 + rS, Reloj.TiempoActual)); //Total_PV = Payoff__PV + Asset_less_Debt / (1 + rS) ^ TIME Valor_Esperado_Total.Ecuacion = "Valor_Esperado_Pagos.k + Activos_Menos_Deudas.k / Math.Pow(1 + rS,Reloj.TiempoActual)"; Valor_Esperado_Pagos.UpdateFn = () => (Valor_Esperado_Pagos.j + (Valor_Presente_Dividendos.j * Reloj.DT)); //Nivel Valor_Esperado_Pagos.Ecuacion = "Valor_Presente_Dividendos * Reloj.DT"; Valor_Presente_Dividendos.UpdateFn = () => (Dividendos.k / (Math.Pow(1 + rS, Reloj.TiempoActual))); //Ingreso a Valor Esperado de Pagos Valor_Presente_Dividendos.Ecuacion = "Dividendos/ (Math.Pow(1 + rS,Reloj.TiempoActual))"; Deuda.UpdateFn = () => (Deuda.j + (Interes.k + Emision_de_Deuda.k - Pago_de_Interes.k) * Reloj.DT); //Nivel Deuda.Ecuacion = "Deuda.j + (Interes.k + Emision_de_Deuda.k - Pago_de_Interes.k)*Reloj.DT"; Interes.UpdateFn = () => (Deuda.j * Tasa_Interes_Continua.k); //Ingreso a deuda Interes.Ecuacion = "Deuda.j*Tasa_Interes_Continua.k"; Emision_de_Deuda.UpdateFn = () => (2000 / Ratio_Deuda_Acciones.k); //Ingreso a deuda Emision_de_Deuda.Ecuacion = "2000 / Ratio_Deuda_Acciones.k"; Pago_de_Interes.UpdateFn = () => (Funciones.MIN(Deuda.k * Tasa_Interes_Continua.k, Ganancias_Antes_Int_E_Imp.k)); //Egreso de deuda Pago_de_Interes.Ecuacion = "Funciones.MIN(Deuda.k*Tasa_Interes_Continua.k, Ganancias_Antes_Int_E_Imp.k)"; Acciones.UpdateFn = () => (Acciones.j + (Retencion.k * Reloj.DT)); //Nivel Retencion.UpdateFn = () => (Funciones.PULSE(1, 1, 1) * Funciones.MIN(Ingresos_Netos.k * Ratio_Retencion.k, Ingresos_Netos.k)); //Ingreso a Acciones Ratio_Deuda_Acciones.UpdateFn = () => (Deuda.k / Activos_Menos_Deudas.k); //Auxiliar Ratio_Deuda_Acciones.Ecuacion = "Deuda.k / Activos_Menos_Deudas.k"; Activos_Menos_Deudas.UpdateFn = () => (Activos_Fijos.k + Dinero.k - Deuda.k); //Auxiliar Activos_Menos_Deudas.Ecuacion = "Activos_Fijos.k+Dinero.k-Deuda.k"; Dinero.UpdateFn = () => (Dinero.j + (Dinero_Anadido.k + Inversiones.k - Pagos.k) * Reloj.DT); //Nivel Dinero.Ecuacion = "Dinero.j + (Dinero_Anadido.k + Inversiones.k - Pagos.k)*Reloj.DT"; Dinero_Anadido.UpdateFn = () => (Depreciacion.k + Ganancias_Antes_Impuestos.k + Dinero_de_Prestamo.k); //Ingreso a Dinero Dinero_Anadido.Ecuacion = "Depreciacion.k + Ganancias_Antes_Impuestos.k + Dinero_de_Prestamo.k"; Inversiones.UpdateFn = () => (Funciones.PULSE(Dinero.k * Capital_de_Inversion.k, 1.01, 1)); //Ingreso a Dinero Inversiones.Ecuacion = "Funciones.PULSE(Dinero.k * Capital_de_Inversion.k,1.01,1)"; Pagos.UpdateFn = () => (Dividendos.k + Impuestos.k + Expensas_Generales.k); //Egreso de Dinero Pagos.Ecuacion = "Dividendos.k+Impuestos.k+Expensas_Generales.k"; Dinero_de_Prestamo.UpdateFn = () => (Emision_de_Deuda.k + Interes.k - Pago_de_Interes.k); //Auxiliar Activos_Fijos.UpdateFn = () => (Activos_Fijos.j + (Inversiones.k - Depreciacion.k) * Reloj.DT); //Nivel Inversiones.UpdateFn = () => (Funciones.PULSE(Dinero.k * Capital_de_Inversion.k, 1.01, 1)); //Ingreso a Activos Fijos Depreciacion.UpdateFn = () => (TasaDepreciacion * Activos_Fijos.k); //Egreso de Activos Fijos Ingresos_Netos.UpdateFn = () => (Ingresos_Netos.j + (Ganancias_Antes_Impuestos.k - Dividendos.k - Retencion.k - Impuestos.k) * Reloj.DT); //Nivel Ganancias_Antes_Impuestos.UpdateFn = () => (Ganancias_Antes_Int_E_Imp.k - Interes.k); //Ingreso a Ingresos_Netos Ganancias_Antes_Impuestos.Ecuacion = "Ganancias_Antes_Int_E_Imp.k-Interes.k"; Dividendos.UpdateFn = () => (Funciones.PULSE(1, 1, 1) * Funciones.MAX(Ingresos_Netos.k * (1 - Ratio_Retencion.k), 0)); //Egreso de Ingresos_Netos Retencion.UpdateFn = () => (Funciones.PULSE(1, 1, 1) * Funciones.MIN(Ingresos_Netos.k * Ratio_Retencion.k, Ingresos_Netos.k)); //Egreso de Ingresos_Netos Impuestos.UpdateFn = () => (Funciones.PULSE(1, 0.99, 1) * Tasa_Impuestos * Ingresos_Netos.k); //Egreso de Ingresos_Netos Ganancias_Antes_Int_E_Imp.UpdateFn = () => (Ganancias_Netas.k + Dinero.k * Tasa_Interes_Continua.k - Depreciacion.k - Expensas_Generales.k); //Auxiliar Ganancias_Antes_Int_E_Imp.Ecuacion = "Beneficio_Bruto.k + Dinero.k * Tasa_Interes_Continua.k - Depreciacion.k - Expensas_Generales.k"; Expensas_Generales.UpdateFn = () => (Costos_Adm_Fijos + Presupuesto_Publicidad.k + Presupuesto_Entrenamiento.k + Presupuesto_Inv_Des + Presupuesto_Compensacion + Presupuesto_Procesos.k + Costo_de_Inventario.k); //Auxiliar Beneficio_Bruto.UpdateFn = () => (Ganancias.k - Costos_Variables.k); //Auxiliar Beneficio_Bruto.Ecuacion = "Ganancias.k - Costos_Variables.k"; Ganancias.UpdateFn = () => (Precio * Ventas.k); //Auxiliar Ganancias.Ecuacion = "Precio * Ventas.k"; Costos_Variables.UpdateFn = () => (Costo_Unitario.k * Ventas.k); //Auxiliar Costos_Variables.Ecuacion = "Costo_Unitario.k * Ventas.k"; Costo_Unitario.UpdateFn = () => (Costos_Controlables.k + Costos_Inevitables); //Auxiliar Costo_Unitario.Ecuacion = "Costos_Controlables.k + Costos_Inevitables"; Ganancias_Netas.UpdateFn = () => (Ganancias.k - Costos_Variables.k); //Auxiliar Ganancias_Netas.Ecuacion = "Ganancias.k-Costos_Variables.k"; Inventario.UpdateFn = () => (Inventario.j + (Produccion.k - Ventas.k) * Reloj.DT); //Nivel Inventario.Ecuacion = "Produccion - Ventas"; Produccion.UpdateFn = () => (Capacidad_Produccion.k - Inventario.k); //Entrada a Inventario Produccion.Ecuacion = "Capacidad_Produccion - Inventario"; Ventas.UpdateFn = () => (Tamanio_Mercado.k * Porcion_del_Mercado.k / 100); // Salida de Inventario Ventas.Ecuacion = "Tamanio_Mercado * Porcion_del_Mercado / 100"; Capacidad_Produccion.UpdateFn = () => (Productividad.k * Activos_Fijos.k / 100); // Salida de Inventario Capacidad_Produccion.Ecuacion = "Productividad * Activos Fijos / 100"; Tamanio_Mercado.UpdateFn = () => (Tamanio_Mercado.j + (IncrementoDemanda.k - Sustitucion.k) * Reloj.DT); //Nivel Tamanio_Mercado.Ecuacion = "Tamanio_Mercado.j +(IncrementoDemanda.k - Sustitucion.k) * Reloj.DT"; IncrementoDemanda.UpdateFn = () => (20); // Ingreso a Tamanio_Mercado Sustitucion.UpdateFn = () => (10); // Salida de Tamanio_Mercado Porcion_del_Mercado.UpdateFn = () => (Porcion_del_Mercado.j + (Marketing.k + Satisfaccion.k - Competencia.k) * Reloj.DT); //Nivel Porcion_del_Mercado.Ecuacion = "Porcion_del_Mercado + (Marketing+Satisfaccion-Competencia)*DT"; Marketing.UpdateFn = () => (Presupuesto_Publicidad.k * (100 - Porcion_del_Mercado.k) / 400); //Ingreso a Porcion del Mercado Marketing.Ecuacion = "Presupuesto_Publicidad.k * (100 - Porcion_del_Mercado.k) / 400"; Satisfaccion.UpdateFn = () => ((Calidad.k - Calidad_Estandar.k) - Math.Abs(Calidad.k - Calidad_Estandar.k) * Porcion_del_Mercado.k / 100f); //Ingreso a Porcion del Mercado Satisfaccion.Ecuacion = "Calidad.k - Calidad_Estandar.k) - Math.Abs(Calidad.k - Calidad_Estandar.k) * Porcion_del_Mercado.k / 100"; Competencia.UpdateFn = () => (Porcion_del_Mercado.k * Agresividad); //Salida de Porcion del Mercado Competencia.Ecuacion = "Porcion_del_Mercado.k * Agresividad"; Calidad.UpdateFn = () => (Calidad.j + Mejora.k * Reloj.DT); //Nivel Calidad.Ecuacion = "Calidad.j + Mejora.k * Reloj.DT"; Mejora.UpdateFn = () => (Productividad.k * Presupuesto_Procesos.k / Calidad.k * 10); //Solo ingreso a Calidad Mejora.Ecuacion = "Productividad.k * Presupuesto_Procesos.k / Calidad.k * 10"; Productividad.UpdateFn = () => (Motivacion_RH.k * Habilidades_RH.k * Tecnologia.k); //Auxiliar Productividad.Ecuacion = "Motivacion_RH.k * Habilidades_RH.k * Tecnologia.k"; Motivacion_RH.UpdateFn = () => (Motivacion_RH.j + (Motivacion.k - FaltaMotivacion.k) * Reloj.DT); //Nivel Motivacion_RH.Ecuacion = "Motivacion_RH.j+(Motivacion.k - FaltaMotivacion.k)*Reloj.DT"; Motivacion.UpdateFn = () => (Presupuesto_Compensacion * Efectividad_Compensacion / Motivacion_RH.k); //Ingreso a Motivacion Motivacion.Ecuacion = "Presupuesto_Compensacion * Efectividad_Compensacion / Motivacion_RH.k"; FaltaMotivacion.UpdateFn = () => (Tasa_FaltaMotivacion * Motivacion_RH.k); //Egreso de Motivacion FaltaMotivacion.Ecuacion = "Tasa_FaltaMotivacion * Motivacion_RH.k"; Habilidades_RH.UpdateFn = () => (Habilidades_RH.j + (Entrenamiento.k - Perdida_de_Habilidad.k) * Reloj.DT); //Nivel Habilidades_RH.Ecuacion = "Habilidades_RH.j + (Entrenamiento.k - Perdida_de_Habilidad.k) * Reloj.DT"; Entrenamiento.UpdateFn = () => (Presupuesto_Entrenamiento.k * Efectividad_Entrenamiento / Habilidades_RH.k); //Ingresos a Habilidades RH Entrenamiento.Ecuacion = "Presupuesto_Entrenamiento.k * Efectividad_Entrenamiento/ Habilidades_RH.k"; Perdida_de_Habilidad.UpdateFn = () => (Tasa_Reemplazo * Habilidades_RH.k); //Egresos de Habilidades RH Perdida_de_Habilidad.Ecuacion = "Tasa_Reemplazo * Habilidades_RH.k"; Tecnologia.UpdateFn = () => (Tecnologia.j + (Investigacion_Y_Desarrollo.k * Reloj.DT)); //Nivel Tecnologia.Ecuacion = "Tecnologia.j+(Investigacion_Y_Desarrollo.k*Reloj.DT)"; Investigacion_Y_Desarrollo.UpdateFn = () => (Presupuesto_Inv_Des * Efectividad_Inv_Des / Tecnologia.k); //Ingreso solo a Tecnologia Investigacion_Y_Desarrollo.Ecuacion = "Presupuesto_Inv_Des * Efectividad_Inv_Des / Tecnologia.k"; Costos_Controlables.UpdateFn = () => (60f / Math.Sqrt(Productividad.k)); //Auxiliar Costos_Controlables.Ecuacion = "60 / Math.Sqrt(Productividad.k)"; Presupuesto_Publicidad.UpdateFn = () => (50); //Auxiliar Tasa_Interes_Continua.UpdateFn = () => (Math.Exp(rB) - 1); //Auxiliar Tasa_Interes_Continua.Ecuacion = "Exp(rB)-1"; Costo_de_Inventario.UpdateFn = () => (Inventario.k * 0.01f); //Inventory_Costs = Inventory*0.01 Costo_de_Inventario.Ecuacion = "Inventario.k*0.01"; Presupuesto_Procesos.UpdateFn = () => (100 - Funciones.STEP(100, 15)); //Auxiliar Presupuesto_Procesos.Ecuacion = "100 - Funciones.STEP(100, 15)"; Calidad_Estandar.UpdateFn = () => (Funciones.RAMP(1) * 10 + 100); //Auxiliar Calidad_Estandar.Ecuacion = "Funciones.RAMP(1) * 10 + 100"; Presupuesto_Entrenamiento.UpdateFn = () => (50 - Funciones.STEP(50, 10)); //Auxiliar Presupuesto_Entrenamiento.Ecuacion = "50 - Funciones.STEP(50, 10)"; //Market__Size(t) = Market__Size(t - dt) + (Increase_in__Demand - Substitution) * dt //EBIT = Gross_Profit+Cash*Continuous__Interest_Rate-Depreciation-General_Expenses //Tax = PULSE(1,0.99,1)*Tax_Rate*Net_Income //CapacidadProduccion.Unidades = "Productos/Mes"; //Stock.UpdateFn = () => (Stock.j + (Produccion.j * Reloj.DT) - (Ventas.j * Reloj.DT)); //Produccion.UpdateFn = () => (CapacidadProduccion.k); //Se supone inicialmente que se vende todo //Ventas.UpdateFn = () => (Demanda.k - CapacidadProduccion.k); //No se considera la inflacion directamente sino indirectamente en la suba del precio //por eso es tabla //IngDemanda.UpdateFn = () => (DistDemanda.Generar()); //(3000 - 200 * Precio); //Demanda.UpdateFn = () => (Demanda.j + (IngDemanda.j * Reloj.DT)); Modelo.Inicializado = true; }