private void btnCalcular_Click(object sender, EventArgs e) { truncador = new Truncador(4); GeneradorUniformeLenguaje generador = new GeneradorUniformeLenguaje(truncador); int cantSimulaciones = int.Parse(txtCantSimulaciones.Text); int desde = int.Parse(txtDesde.Text); int hasta = int.Parse(txtHasta.Text); hacerSimulacion(cantSimulaciones, desde, hasta, generador); }
private void hacerSimulacion(int cantSimulaciones, int desde, int hasta, GeneradorUniformeLenguaje generador) { resultados.Clear(); resultados2.Clear(); row1 = resultados.NewRow(); row1[0] = 0; row1[9] = 0; int stockAnterior = 7; row1[10] = stockAnterior; row1[14] = 0; int costoAcumulado = 0; row1[15] = costoAcumulado; resultados.Rows.Add(row1); if (desde == 0) { resultados2.ImportRow(row1); } for (int i = 1; i < cantSimulaciones + 1; i++) { row2 = resultados.NewRow(); int calculoKo = 0; int calculoKm; int calculoKs; row2[0] = i; double random = generador.siguienteAleatorio(); row2[1] = random; int demanda = calcularProbabilidad(random, Demanda); row2[2] = demanda; int faltantes = stockAnterior - demanda; if (faltantes <= R && flagPedido) { flagPedido = false; random = generador.siguienteAleatorio(); row2[3] = random; int diasDemora = calcularProbabilidad(random, Demora); row2[4] = diasDemora; row2[5] = "SI"; llegadaPedido = i + diasDemora; row2[6] = llegadaPedido; calculoKo = Ko; row2[11] = calculoKo; if (faltantes > 0) { row2[10] = faltantes; stockAnterior = faltantes; calculoKm = Km * faltantes; row2[12] = calculoKo; calculoKs = 0; row2[13] = calculoKs; } else { row2[10] = 0; stockAnterior = 0; calculoKm = 0; row2[12] = calculoKm; calculoKs = Ks * (faltantes * -1); row2[13] = calculoKs; } } else if (i == llegadaPedido) { flagPedido = true; random = generador.siguienteAleatorio(); row2[7] = random; int cantRotura = calcularProbabilidad(random, Rotura); row2[8] = cantRotura; row2[9] = Q; int stockActual = stockAnterior + Q - cantRotura - demanda; row2[10] = stockActual; stockAnterior = stockActual; calculoKo = 0; row2[11] = 0; calculoKm = Km * stockActual; row2[12] = calculoKm; calculoKs = 0; row2[13] = calculoKs; } else { row2[9] = 0; calculoKo = 0; row2[11] = calculoKo; if (faltantes > 0) { row2[10] = faltantes; stockAnterior = faltantes; calculoKm = Km * faltantes; row2[12] = calculoKo; calculoKs = 0; row2[13] = calculoKs; } else { row2[10] = 0; stockAnterior = 0; calculoKm = 0; row2[12] = calculoKm; calculoKs = Ks * (faltantes * -1); row2[13] = calculoKs; } } int costoUnitario = calculoKo + calculoKm + calculoKs; row2[14] = costoUnitario; row2[15] = costoAcumulado + costoUnitario; costoAcumulado = costoAcumulado + costoUnitario; rowanterior = row2; if (i == 0) { resultados.Rows.Add(row2); } else if (i % 2 == 0) { resultados.Rows.RemoveAt(0); resultados.Rows.InsertAt(row2, 0); } else { resultados.Rows.RemoveAt(0); resultados.Rows.InsertAt(rowanterior, 0); } if (i >= desde && i <= hasta) { resultados2.ImportRow(row2); } } grdResultados.DataSource = resultados; grdResultados2.DataSource = resultados2; }