Пример #1
0
        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); //$
        }
Пример #2
0
        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;
        }