miércoles, 22 de septiembre de 2010

Montecarlo

Esta es la ultima libreria aqui les dejo el codigo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Montecarlo
{
    public class montecarloSimulacion
    {
        public string prob1;
        public string prob2;
        public string prob3;
        public string prob4;
        public string prob5;
        public string probac1;
        public string probac2;
        public string probac3;
        public string probac4;
        public string probac5;
        public string intervalo1;
        public string intervalo2;
        public string intervalo3;
        public string intervalo4;
        public string intervalo5;
        public double[] Resultado;
        public string ProbaSimulada;
        public string ProbaEsperada;

        public void realizar(double digitos, double tamanio, double[] numerosaleatorios, double demanda1, double demanda2, double demanda3, double demanda4, double demanda5, double dias1, double dias2, double dias3, double dias4, double dias5)
        {



            string aumentadigitos = "1";
            string inicia = "0";

            for (int i = 2; i < int.Parse(digitos.ToString()); i++)
            {
                aumentadigitos = aumentadigitos + "0";
                inicia = inicia + "0";
            }

            aumentadigitos = aumentadigitos + ".00";
            inicia = inicia + "1";

            double demandado1 = demanda1;
            double demandado2 = demanda2;
            double demandado3 = demanda3;
            double demandado4 = demanda4;
            double demandado5 = demanda5;

            double frecdias1 = dias1;
            double frecdias2 = dias2;
            double frecdias3 = dias3;
            double frecdias4 = dias4;
            double frecdias5 = dias5;

            double totaldias = frecdias1 + frecdias2 + frecdias3 + frecdias4 + frecdias5;
            double acumulada1 = (frecdias1 / totaldias);
            double acumulada2 = (frecdias2 / totaldias);
            double acumulada3 = (frecdias3 / totaldias);
            double acumulada4 = (frecdias4 / totaldias);
            double acumulada5 = (frecdias5 / totaldias);

            double promedioReal = (demandado1 * acumulada1) + (demandado2 * acumulada2) + (demandado3 * acumulada3) + (demandado4 * acumulada4) + (demandado5 * acumulada5);

            prob1 = acumulada1.ToString(".##");
            prob2 = acumulada2.ToString(".##");
            prob3 = acumulada3.ToString(".##");
            prob4 = acumulada4.ToString(".##");
            prob5 = acumulada5.ToString(".##");

            probac1 = acumulada1.ToString(".##");
            probac2 = (acumulada1 + acumulada2).ToString(".##");
            probac3 = (acumulada1 + acumulada2 + acumulada3).ToString(".##");
            probac4 = (acumulada1 + acumulada2 + acumulada3 + acumulada4).ToString(".##");
            probac5 = (acumulada1 + acumulada2 + acumulada3 + acumulada4 + acumulada5).ToString(".##") + ".00";

            intervalo1 = inicia + " - " + ((double.Parse(probac1) * 100.00) * (double.Parse(aumentadigitos))).ToString();

            intervalo2 = ((((double.Parse(probac1) * 100.00)) * (double.Parse(aumentadigitos))) + 1).ToString() + " - " + ((double.Parse(probac2) * 100.00) * (double.Parse(aumentadigitos))).ToString();
            intervalo3 = ((((double.Parse(probac2) * 100.00)) * (double.Parse(aumentadigitos))) + 1).ToString() + " - " + ((double.Parse(probac3) * 100.00) * (double.Parse(aumentadigitos))).ToString();
            intervalo4 = ((((double.Parse(probac3) * 100.00)) * (double.Parse(aumentadigitos))) + 1).ToString() + " - " + ((double.Parse(probac4) * 100.00) * (double.Parse(aumentadigitos))).ToString();
            intervalo5 = ((((double.Parse(probac4) * 100.00)) * (double.Parse(aumentadigitos))) + 1).ToString() + " - " + (100.00 * (double.Parse(aumentadigitos))).ToString();

            double a1 = ((double.Parse(probac1) * 100.00) * (double.Parse(aumentadigitos)));
            double a2 = ((double.Parse(probac2) * 100.00) * (double.Parse(aumentadigitos)));
            double a3 = ((double.Parse(probac3) * 100.00) * (double.Parse(aumentadigitos)));
            double a4 = ((double.Parse(probac4) * 100.00) * (double.Parse(aumentadigitos)));
            double a5 = (100.00 * (double.Parse(aumentadigitos)));


            Resultado = new double[int.Parse(tamanio.ToString())];
            double promedio = 0.00;


            for (int i = 0; i < int.Parse(tamanio.ToString()); i++)
            {
                if (numerosaleatorios[i] > 1 && numerosaleatorios[i] <= a1)
                {
                    Resultado[i] = demandado1;
                }
                else
                    if (numerosaleatorios[i] > a1 && numerosaleatorios[i] <= a2)
                    {

                        Resultado[i] = demandado2;
                    }
                    else
                        if (numerosaleatorios[i] > a2 && numerosaleatorios[i] <= a3)
                        {
                            Resultado[i] = demandado3;
                        }
                        else
                            if (numerosaleatorios[i] > a3 && numerosaleatorios[i] <= a4)
                            {
                                Resultado[i] = demandado4;
                            }
                            else
                                if (numerosaleatorios[i] > a4 && numerosaleatorios[i] <= a5)
                                {
                                    Resultado[i] = demandado5;
                                }
                                else { }
                promedio = promedio + Resultado[i];
            }

            promedio = promedio / int.Parse(tamanio.ToString());
            ProbaSimulada = promedio.ToString(".####");
            ProbaEsperada = promedioReal.ToString(".####");



        }


    }
}



con esto acabamos por completo toda la simulacion de montecarlo
espero que les sea de utilidad para sus programas

saludos


No hay comentarios:

Publicar un comentario