/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _pala0 = _propPala0.GetState(context); double pala0 = Convert.ToDouble(_pala0.StateValue); IState _pala1 = _propPala1.GetState(context); double pala1 = Convert.ToDouble(_pala1.StateValue); IState _pala2 = _propPala2.GetState(context); double pala2 = Convert.ToDouble(_pala2.StateValue); IState _pala3 = _propPala3.GetState(context); double pala3 = Convert.ToDouble(_pala3.StateValue); IState _pala4 = _propPala4.GetState(context); double pala4 = Convert.ToDouble(_pala4.StateValue); IState _pala5 = _propPala5.GetState(context); double pala5 = Convert.ToDouble(_pala5.StateValue); IState _pala6 = _propPala6.GetState(context); double pala6 = Convert.ToDouble(_pala6.StateValue); IState _pala7 = _propPala7.GetState(context); double pala7 = Convert.ToDouble(_pala7.StateValue); IState _pala8 = _propPala8.GetState(context); double pala8 = Convert.ToDouble(_pala8.StateValue); IState _pala9 = _propPala9.GetState(context); double pala9 = Convert.ToDouble(_pala9.StateValue); IState _pala10 = _propPala10.GetState(context); double pala10 = Convert.ToDouble(_pala10.StateValue); IState _pala11 = _propPala11.GetState(context); double pala11 = Convert.ToDouble(_pala11.StateValue); IState _pala12 = _propPala12.GetState(context); double pala12 = Convert.ToDouble(_pala12.StateValue); IState _pala13 = _propPala13.GetState(context); double pala13 = Convert.ToDouble(_pala13.StateValue); IState _pala14 = _propPala14.GetState(context); double pala14 = Convert.ToDouble(_pala14.StateValue); IState _pala15 = _propPala15.GetState(context); double pala15 = Convert.ToDouble(_pala15.StateValue); IState _pala16 = _propPala16.GetState(context); double pala16 = Convert.ToDouble(_pala16.StateValue); IState _pala17 = _propPala17.GetState(context); double pala17 = Convert.ToDouble(_pala17.StateValue); IState _pala18 = _propPala18.GetState(context); double pala18 = Convert.ToDouble(_pala18.StateValue); IState _pala19 = _propPala19.GetState(context); double pala19 = Convert.ToDouble(_pala19.StateValue); IState _pala20 = _propPala20.GetState(context); double pala20 = Convert.ToDouble(_pala20.StateValue); SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; vectores.Lastrealocado = v.Lastrealocado; } if (pala0 == 0) { for (int x = 0; x < 30; x = x + 1) { vectores.Din1[x, 4] = pala1; vectores.Din1[x + 30, 4] = pala2; vectores.Din1[x + 60, 4] = pala3; vectores.Din1[x + 90, 4] = pala4; vectores.Din1[x + 120, 4] = pala5; vectores.Din1[x + 150, 4] = pala6; vectores.Din1[x + 180, 4] = pala7; vectores.Din1[x + 210, 4] = pala8; vectores.Din1[x + 240, 4] = pala9; vectores.Din1[x + 270, 4] = pala10; vectores.Din1[x + 300, 4] = pala11; vectores.Din1[x + 330, 4] = pala12; vectores.Din1[x + 360, 4] = pala13; vectores.Din1[x + 390, 4] = pala14; vectores.Din1[x + 420, 4] = pala15; vectores.Din1[x + 450, 4] = pala16; vectores.Din1[x + 480, 4] = pala17; vectores.Din1[x + 510, 4] = pala18; vectores.Din1[x + 540, 4] = pala19; vectores.Din1[x + 570, 4] = pala20; } } //filas else if (pala0 == 1) { vectores.Fila[0] = pala1; vectores.Fila[1] = pala2; vectores.Fila[2] = pala3; vectores.Fila[3] = pala4; vectores.Fila[4] = pala5; vectores.Fila[5] = pala6; vectores.Fila[6] = pala7; vectores.Fila[7] = pala8; vectores.Fila[8] = pala9; vectores.Fila[9] = pala10; vectores.Fila[10] = pala11; vectores.Fila[11] = pala12; vectores.Fila[12] = pala13; vectores.Fila[13] = pala14; vectores.Fila[14] = pala15; vectores.Fila[15] = pala16; vectores.Fila[16] = pala17; vectores.Fila[17] = pala18; vectores.Fila[18] = pala19; vectores.Fila[19] = pala20; } //numero alocados else if (pala0 == 3) { for (int x = 0; x < 30; x = x + 1) { vectores.Din1[x, 5] = pala1; vectores.Din1[x + 30, 5] = pala2; vectores.Din1[x + 60, 5] = pala3; vectores.Din1[x + 90, 5] = pala4; vectores.Din1[x + 120, 5] = pala5; vectores.Din1[x + 150, 5] = pala6; vectores.Din1[x + 180, 5] = pala7; vectores.Din1[x + 210, 5] = pala8; vectores.Din1[x + 240, 5] = pala9; vectores.Din1[x + 270, 5] = pala10; vectores.Din1[x + 300, 5] = pala11; vectores.Din1[x + 330, 5] = pala12; vectores.Din1[x + 360, 5] = pala13; vectores.Din1[x + 390, 5] = pala14; vectores.Din1[x + 420, 5] = pala15; vectores.Din1[x + 450, 5] = pala16; vectores.Din1[x + 480, 5] = pala17; vectores.Din1[x + 510, 5] = pala18; vectores.Din1[x + 540, 5] = pala19; vectores.Din1[x + 570, 5] = pala20; } } else if (pala0 == 4) //Si es de mineral 0, si es de esteril 1 { vectores.Mine[0] = pala1; vectores.Mine[1] = pala2; vectores.Mine[2] = pala3; vectores.Mine[3] = pala4; vectores.Mine[4] = pala5; vectores.Mine[5] = pala6; vectores.Mine[6] = pala7; vectores.Mine[7] = pala8; vectores.Mine[8] = pala9; vectores.Mine[9] = pala10; vectores.Mine[10] = pala11; vectores.Mine[11] = pala12; vectores.Mine[12] = pala13; vectores.Mine[13] = pala14; vectores.Mine[14] = pala15; vectores.Mine[15] = pala16; vectores.Mine[16] = pala17; vectores.Mine[17] = pala18; vectores.Mine[18] = pala19; vectores.Mine[19] = pala20; } else if (pala0 == 5) //numero de camiones que salieron de cada pala hacia el chancador { vectores.Mineralocado[0] = pala1; vectores.Mineralocado[1] = pala2; vectores.Mineralocado[2] = pala3; vectores.Mineralocado[3] = pala4; vectores.Mineralocado[4] = pala5; vectores.Mineralocado[5] = pala6; vectores.Mineralocado[6] = pala7; vectores.Mineralocado[7] = pala8; vectores.Mineralocado[8] = pala9; vectores.Mineralocado[9] = pala10; vectores.Mineralocado[10] = pala11; vectores.Mineralocado[11] = pala12; vectores.Mineralocado[12] = pala13; vectores.Mineralocado[13] = pala14; vectores.Mineralocado[14] = pala15; vectores.Mineralocado[15] = pala16; vectores.Mineralocado[16] = pala17; vectores.Mineralocado[17] = pala18; vectores.Mineralocado[18] = pala19; vectores.Mineralocado[19] = pala20; } else if (pala0 == 6) //numero de camiones que salieron de cada pala el esteril { vectores.Lastrealocado[0] = pala1 * vectores.Mine[0]; vectores.Lastrealocado[1] = pala2 * vectores.Mine[1]; vectores.Lastrealocado[2] = pala3 * vectores.Mine[2]; vectores.Lastrealocado[3] = pala4 * vectores.Mine[3]; vectores.Lastrealocado[4] = pala5 * vectores.Mine[4]; vectores.Lastrealocado[5] = pala6 * vectores.Mine[5]; vectores.Lastrealocado[6] = pala7 * vectores.Mine[6]; vectores.Lastrealocado[7] = pala8 * vectores.Mine[7]; vectores.Lastrealocado[8] = pala9 * vectores.Mine[8]; vectores.Lastrealocado[9] = pala10 * vectores.Mine[9]; vectores.Lastrealocado[10] = pala11 * vectores.Mine[10]; vectores.Lastrealocado[11] = pala12 * vectores.Mine[11]; vectores.Lastrealocado[12] = pala13 * vectores.Mine[12]; vectores.Lastrealocado[13] = pala14 * vectores.Mine[13]; vectores.Lastrealocado[14] = pala15 * vectores.Mine[14]; vectores.Lastrealocado[15] = pala16 * vectores.Mine[15]; vectores.Lastrealocado[16] = pala17 * vectores.Mine[16]; vectores.Lastrealocado[17] = pala18 * vectores.Mine[17]; vectores.Lastrealocado[18] = pala19 * vectores.Mine[18]; vectores.Lastrealocado[19] = pala20 * vectores.Mine[19]; } sr.serializa(vectores); sr.closeStream(); return(ExitType.FirstExit); }
/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _timenow = _propTimenow.GetState(context); double timenow = Convert.ToDouble(_timenow.StateValue); IState _salida = _propSalida.GetState(context); double salida = Convert.ToDouble(_salida.StateValue); IState _aux = _propAux.GetState(context); double aux = Convert.ToDouble(_aux.StateValue); SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; vectores.Lastrealocado = v.Lastrealocado; } /* programa aca*/ int[,] Resultado = new int[20 + 1, 3]; int[] VectorResultado = new int[20 + 1]; Parallel.For(1, 3, m => { VectorResultado = Simulacion(m, timenow); for (int i = 0; i < 20 + 1; i++) { Resultado[i, m - 1] = VectorResultado[i]; } } ) ; sr.serializa(vectores); sr.closeStream(); return(ExitType.FirstExit); }
/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _timenow = _propTimenow.GetState(context); double timenow = Convert.ToDouble(_timenow.StateValue); IState _salida = _propSalida.GetState(context); double salida = Convert.ToDouble(_salida.StateValue); IState _aux = _propAux.GetState(context); double aux = Convert.ToDouble(_aux.StateValue); SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; vectores.Lastrealocado = v.Lastrealocado; } /* * vectores.PlTc[30, 0]; #flujo pala 1 * vectores.PlTc[30, 1]; #flujo pala 2 * etc etc * * vectores.Din1[x, 4] = pala1; #Ultimo tiempo que pala 1 tuvo una asignacion * vectores.Din1[x + 30, 4] = pala2; #Ultimo tiempo que pala 2 tuvo una asignacion * vectores.Din1[x + 60, 4] = pala3; etc * vectores.Din1[x + 90, 4] = pala4; * vectores.Din1[x + 120, 4] = pala5; * vectores.Din1[x + 150, 4] = pala6; * vectores.Din1[x + 180, 4] = pala7; * vectores.Din1[x + 210, 4] = pala8; * vectores.Din1[x + 240, 4] = pala9; * vectores.Din1[x + 270, 4] = pala10; * vectores.Din1[x + 300, 4] = pala11; * vectores.Din1[x + 330, 4] = pala12; * vectores.Din1[x + 360, 4] = pala13; * vectores.Din1[x + 390, 4] = pala14; * vectores.Din1[x + 420, 4] = pala15; * vectores.Din1[x + 450, 4] = pala16; * vectores.Din1[x + 480, 4] = pala17; * vectores.Din1[x + 510, 4] = pala18; * vectores.Din1[x + 540, 4] = pala19; * vectores.Din1[x + 570, 4] = pala20; * * timenow; #tiempo actual * * * */ double[] tij_op = new double[20]; double[] desv_tij = new double[20]; double[] Puntaje = new double[20] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; double Pmax = -10000000000; double Destino = 0; double botadero = 0; for (int i = 0; i < 20; i++) { if (vectores.Din1[30 * i, 4] > 0) { tij_op[i] = 1 / ((vectores.PlTc[30, i] + 1) / 300); desv_tij[i] = (timenow - vectores.Din1[30 * i, 4]) - tij_op[i]; Puntaje[i] = desv_tij[i] / tij_op[i]; } } for (int j = 0; j < 20; j++) { if (vectores.Din1[30 * j, 4] > 0) { { if (Puntaje[j] > Pmax) { Pmax = Puntaje[j]; Destino = j + 1; } } } } if (Destino == 4 || Destino == 5 || Destino == 6 || Destino == 10 || Destino == 17 || Destino == 18) { botadero = 1; } else if (Destino == 7 || Destino == 8 || Destino == 12) { botadero = 4; } else if (Destino == 1 || Destino == 2 || Destino == 3 || Destino == 11) { botadero = 8; } else { Destino = Pmax; botadero = 3; } _salida.StateValue = Destino; _aux.StateValue = botadero; sr.serializa(vectores); sr.closeStream(); return(ExitType.FirstExit); }
/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _pala0 = _propPala0.GetState(context); double pala0 = Convert.ToDouble(_pala0.StateValue); IState _pala1 = _propPala1.GetState(context); double pala1 = Convert.ToDouble(_pala1.StateValue); IState _pala2 = _propPala2.GetState(context); double pala2 = Convert.ToDouble(_pala2.StateValue); IState _pala3 = _propPala3.GetState(context); double pala3 = Convert.ToDouble(_pala3.StateValue); IState _pala4 = _propPala4.GetState(context); double pala4 = Convert.ToDouble(_pala4.StateValue); IState _pala5 = _propPala5.GetState(context); double pala5 = Convert.ToDouble(_pala5.StateValue); IState _pala6 = _propPala6.GetState(context); double pala6 = Convert.ToDouble(_pala6.StateValue); IState _pala7 = _propPala7.GetState(context); double pala7 = Convert.ToDouble(_pala7.StateValue); IState _pala8 = _propPala8.GetState(context); double pala8 = Convert.ToDouble(_pala8.StateValue); IState _pala9 = _propPala9.GetState(context); double pala9 = Convert.ToDouble(_pala9.StateValue); IState _pala10 = _propPala10.GetState(context); double pala10 = Convert.ToDouble(_pala10.StateValue); IState _pala11 = _propPala11.GetState(context); double pala11 = Convert.ToDouble(_pala11.StateValue); IState _pala12 = _propPala12.GetState(context); double pala12 = Convert.ToDouble(_pala12.StateValue); IState _pala13 = _propPala13.GetState(context); double pala13 = Convert.ToDouble(_pala13.StateValue); IState _pala14 = _propPala14.GetState(context); double pala14 = Convert.ToDouble(_pala14.StateValue); IState _pala15 = _propPala15.GetState(context); double pala15 = Convert.ToDouble(_pala15.StateValue); IState _pala16 = _propPala16.GetState(context); double pala16 = Convert.ToDouble(_pala16.StateValue); IState _pala17 = _propPala17.GetState(context); double pala17 = Convert.ToDouble(_pala17.StateValue); IState _pala18 = _propPala18.GetState(context); double pala18 = Convert.ToDouble(_pala18.StateValue); IState _pala19 = _propPala19.GetState(context); double pala19 = Convert.ToDouble(_pala19.StateValue); IState _pala20 = _propPala20.GetState(context); double pala20 = Convert.ToDouble(_pala20.StateValue); IState _pala21 = _propPala21.GetState(context); double pala21 = Convert.ToDouble(_pala21.StateValue); IState _pala22 = _propPala22.GetState(context); double pala22 = Convert.ToDouble(_pala22.StateValue); IState _pala23 = _propPala23.GetState(context); double pala23 = Convert.ToDouble(_pala23.StateValue); IState _pala24 = _propPala24.GetState(context); double pala24 = Convert.ToDouble(_pala24.StateValue); IState _pala25 = _propPala25.GetState(context); double pala25 = Convert.ToDouble(_pala25.StateValue); IState _pala26 = _propPala26.GetState(context); double pala26 = Convert.ToDouble(_pala26.StateValue); IState _pala27 = _propPala27.GetState(context); double pala27 = Convert.ToDouble(_pala27.StateValue); IState _pala28 = _propPala28.GetState(context); double pala28 = Convert.ToDouble(_pala28.StateValue); IState _pala29 = _propPala29.GetState(context); double pala29 = Convert.ToDouble(_pala29.StateValue); IState _pala30 = _propPala30.GetState(context); double pala30 = Convert.ToDouble(_pala30.StateValue); IState _pala31 = _propPala31.GetState(context); double pala31 = Convert.ToDouble(_pala31.StateValue); IState _pala32 = _propPala32.GetState(context); double pala32 = Convert.ToDouble(_pala32.StateValue); IState _pala33 = _propPala33.GetState(context); double pala33 = Convert.ToDouble(_pala33.StateValue); IState _pala34 = _propPala34.GetState(context); double pala34 = Convert.ToDouble(_pala34.StateValue); IState _pala35 = _propPala35.GetState(context); double pala35 = Convert.ToDouble(_pala35.StateValue); IState _pala36 = _propPala36.GetState(context); double pala36 = Convert.ToDouble(_pala36.StateValue); IState _pala37 = _propPala37.GetState(context); double pala37 = Convert.ToDouble(_pala37.StateValue); IState _pala38 = _propPala38.GetState(context); double pala38 = Convert.ToDouble(_pala38.StateValue); IState _pala39 = _propPala39.GetState(context); double pala39 = Convert.ToDouble(_pala39.StateValue); IState _pala40 = _propPala40.GetState(context); double pala40 = Convert.ToDouble(_pala40.StateValue); IState _pala41 = _propPala41.GetState(context); double pala41 = Convert.ToDouble(_pala41.StateValue); IState _pala42 = _propPala42.GetState(context); double pala42 = Convert.ToDouble(_pala42.StateValue); IState _pala43 = _propPala43.GetState(context); double pala43 = Convert.ToDouble(_pala43.StateValue); IState _pala44 = _propPala44.GetState(context); double pala44 = Convert.ToDouble(_pala44.StateValue); IState _pala45 = _propPala45.GetState(context); double pala45 = Convert.ToDouble(_pala45.StateValue); IState _pala46 = _propPala46.GetState(context); double pala46 = Convert.ToDouble(_pala46.StateValue); IState _pala47 = _propPala47.GetState(context); double pala47 = Convert.ToDouble(_pala47.StateValue); IState _pala48 = _propPala48.GetState(context); double pala48 = Convert.ToDouble(_pala48.StateValue); IState _pala49 = _propPala49.GetState(context); double pala49 = Convert.ToDouble(_pala49.StateValue); IState _pala50 = _propPala50.GetState(context); double pala50 = Convert.ToDouble(_pala50.StateValue); IState _pala51 = _propPala51.GetState(context); double pala51 = Convert.ToDouble(_pala51.StateValue); IState _pala52 = _propPala52.GetState(context); double pala52 = Convert.ToDouble(_pala52.StateValue); IState _pala53 = _propPala53.GetState(context); double pala53 = Convert.ToDouble(_pala53.StateValue); IState _pala54 = _propPala54.GetState(context); double pala54 = Convert.ToDouble(_pala54.StateValue); IState _pala55 = _propPala55.GetState(context); double pala55 = Convert.ToDouble(_pala55.StateValue); IState _pala56 = _propPala56.GetState(context); double pala56 = Convert.ToDouble(_pala56.StateValue); IState _pala57 = _propPala57.GetState(context); double pala57 = Convert.ToDouble(_pala57.StateValue); IState _pala58 = _propPala58.GetState(context); double pala58 = Convert.ToDouble(_pala58.StateValue); IState _pala59 = _propPala59.GetState(context); double pala59 = Convert.ToDouble(_pala59.StateValue); IState _pala60 = _propPala60.GetState(context); double pala60 = Convert.ToDouble(_pala60.StateValue); // Example of how to get the value of a step property. SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; vectores.Lastrealocado = v.Lastrealocado; } /* * //tiempos * * vectores.Din1[0, 7] = pala0; * vectores.Din1[30, 7] = pala1; * vectores.Din1[60, 7] = pala2; * vectores.Din1[90, 7] = pala3; * vectores.Din1[120, 7] = pala4; * vectores.Din1[150, 7] = pala5; * vectores.Din1[180, 7] = pala6; * vectores.Din1[210, 7] = pala7; * vectores.Din1[480, 7] = pala8; * vectores.Din1[510, 7] = pala9; * * vectores.Din1[3, 7] = pala10; * vectores.Din1[33, 7] = pala11; * vectores.Din1[63, 7] = pala12; * vectores.Din1[93, 7] = pala13; * vectores.Din1[123, 7] = pala14; * vectores.Din1[153, 7] = pala15; * vectores.Din1[183, 7] = pala16; * vectores.Din1[213, 7] = pala17; * vectores.Din1[483, 7] = pala18; * vectores.Din1[513, 7] = pala19; * * vectores.Din1[7, 7] = pala20; * vectores.Din1[37, 7] = pala31; * vectores.Din1[67, 7] = pala32; * vectores.Din1[97, 7] = pala33; * vectores.Din1[127, 7] = pala34; * vectores.Din1[157, 7] = pala35; * vectores.Din1[187, 7] = pala36; * vectores.Din1[217, 7] = pala37; * vectores.Din1[487, 7] = pala38; * vectores.Din1[517, 7] = pala39; * * vectores.Din1[17, 7] = pala40; * vectores.Din1[47, 7] = pala41; * vectores.Din1[77, 7] = pala42; * vectores.Din1[107, 7] = pala43; * vectores.Din1[137, 7] = pala44; * vectores.Din1[167, 7] = pala45; * vectores.Din1[197, 7] = pala46; * vectores.Din1[227, 7] = pala47; * vectores.Din1[497, 7] = pala48; * vectores.Din1[527, 7] = pala49; */ for (int x = 0; x < 30; x = x + 1) { vectores.Din1[x, 4] = pala1; vectores.Din1[x + 30, 4] = pala2; vectores.Din1[x + 60, 4] = pala3; vectores.Din1[x + 90, 4] = pala4; vectores.Din1[x + 120, 4] = pala5; vectores.Din1[x + 150, 4] = pala6; vectores.Din1[x + 180, 4] = pala7; vectores.Din1[x + 210, 4] = pala8; vectores.Din1[x + 240, 4] = pala9; vectores.Din1[x + 270, 4] = pala10; vectores.Din1[x + 300, 4] = pala11; vectores.Din1[x + 330, 4] = pala12; vectores.Din1[x + 360, 4] = pala13; vectores.Din1[x + 390, 4] = pala14; vectores.Din1[x + 420, 4] = pala15; vectores.Din1[x + 450, 4] = pala16; vectores.Din1[x + 480, 4] = pala17; vectores.Din1[x + 510, 4] = pala18; vectores.Din1[x + 540, 4] = pala19; vectores.Din1[x + 570, 4] = pala20; } vectores.Fila[0] = pala21; vectores.Fila[1] = pala22; vectores.Fila[2] = pala23; vectores.Fila[3] = pala24; vectores.Fila[4] = pala25; vectores.Fila[5] = pala26; vectores.Fila[6] = pala27; vectores.Fila[7] = pala28; vectores.Fila[8] = pala29; vectores.Fila[9] = pala30; vectores.Fila[10] = pala31; vectores.Fila[11] = pala32; vectores.Fila[12] = pala33; vectores.Fila[13] = pala34; vectores.Fila[14] = pala35; vectores.Fila[15] = pala36; vectores.Fila[16] = pala37; vectores.Fila[17] = pala38; vectores.Fila[18] = pala39; vectores.Fila[19] = pala40; for (int x = 0; x < 30; x = x + 1) { vectores.Din1[x, 5] = pala41; vectores.Din1[x + 30, 5] = pala42; vectores.Din1[x + 60, 5] = pala43; vectores.Din1[x + 90, 5] = pala44; vectores.Din1[x + 120, 5] = pala45; vectores.Din1[x + 150, 5] = pala46; vectores.Din1[x + 180, 5] = pala47; vectores.Din1[x + 210, 5] = pala48; vectores.Din1[x + 240, 5] = pala49; vectores.Din1[x + 270, 5] = pala50; vectores.Din1[x + 300, 5] = pala51; vectores.Din1[x + 330, 5] = pala52; vectores.Din1[x + 360, 5] = pala53; vectores.Din1[x + 390, 5] = pala54; vectores.Din1[x + 420, 5] = pala55; vectores.Din1[x + 450, 5] = pala56; vectores.Din1[x + 480, 5] = pala57; vectores.Din1[x + 510, 5] = pala58; vectores.Din1[x + 540, 5] = pala59; vectores.Din1[x + 570, 5] = pala60; } sr.serializa(vectores); sr.closeStream(); return(ExitType.FirstExit); }
/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _timenow = _propTimenow.GetState(context); double timenow = Convert.ToDouble(_timenow.StateValue); SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; vectores.Lastrealocado = v.Lastrealocado; } int i = 30; int j = 20; double TA; TA = 0.0158333333; //tiempo de aculatado double expr; expr = 0; //variable auxiliar GRBEnv env = new GRBEnv(); GRBModel disp = new GRBModel(env); GRBLinExpr L = 320; //Numero auxiliar de velocidad de descarga GRBLinExpr M = 110; //Numero max camiones double[,] Tcvij = new double[30, 20]; double[,] Tccij = new double[30, 20]; for (int a = 0; a < i; a = a + 1) // saca tiempo de viaje total { for (int b = 0; b < j; b = b + 1) { Tcvij[a, b] = vectores.TCV[a, b] + vectores.TDi[a]; if (vectores.Destij[a, b] != 0) { Tccij[a, b] = vectores.TCC[a, b] + vectores.TCj[b] + TA; } else { Tccij[a, b] = 9999; } } } for (int b = 0; b < j; b = b + 1) { expr = 0; for (int a = 0; a < i; a = a + 1) { expr = expr + vectores.Destij[a, b]; } if (expr == 0) { vectores.Uj[b] = 0; } } GRBVar[,] Ycij = new GRBVar[30, 20]; //Camiones cargados de i a j GRBVar[,] Yvij = new GRBVar[30, 20]; //Camiones vacios de i a j GRBVar[,] Tcij = new GRBVar[30, 20]; //Throughtput cargado de i a j GRBVar[,] Tvij = new GRBVar[30, 20]; //Throughtput vacio de i a j for (int a = 0; a < i; a = a + 1) { for (int b = 0; b < j; b = b + 1) { Ycij[a, b] = disp.AddVar(0.0, 1000, 0.0, GRB.CONTINUOUS, "Yc" + a + "_" + b); Yvij[a, b] = disp.AddVar(0.0, 1000, 0.0, GRB.CONTINUOUS, "Yv" + a + "_" + b); Tcij[a, b] = disp.AddVar(0.0, 100000, 0.0, GRB.CONTINUOUS, "Tc" + a + "_" + b); //tonelaje cargado pasando hacia j en toneladas Tvij[a, b] = disp.AddVar(0.0, 100000, 0.0, GRB.CONTINUOUS, "Tv" + a + "_" + b); //tonelaje vacio pasando hacia j en toneladas } } for (int a = 0; a < i; a = a + 1) { for (int b = 0; b < j; b = b + 1) { disp.AddConstr(Tcij[a, b] == ((Ycij[a, b] / Tccij[a, b]) * L), "tonelaje_minimo" + a); disp.AddConstr(Tvij[a, b] == ((Yvij[a, b] / Tcvij[a, b]) * L), "tonelaje_maximo" + b); } } for (int b = 0; b < j; b = b + 1) { GRBLinExpr P = 0; for (int a = 0; a < i; a = a + 1) { P = P + Tcij[a, b]; } disp.AddConstr((vectores.Dj[b] * vectores.Uj[b]), GRB.LESS_EQUAL, P, "tonelaje_minimo_de_palas" + b); } for (int a = 0; a < i; a = a + 1) { GRBLinExpr P = 0; for (int b = 0; b < j; b = b + 1) { P = P + Tcij[a, b]; } disp.AddConstr(P, GRB.LESS_EQUAL, vectores.RUi[a] * vectores.Ui[a], "tonelaje_minimo_a_basureros" + a); } //Restriccion del chancador independiente for (int a = 1; a < i; a = a + 1) { GRBLinExpr P = 0; for (int b = 0; b < j; b = b + 1) { P = P + Tcij[a, b]; } disp.AddConstr(vectores.RLi[a] * vectores.Ui[a], GRB.LESS_EQUAL, P, "tonelajecargado2" + a); } for (int a = 0; a < i; a = a + 1) { GRBLinExpr P = 0; for (int b = 0; b < j; b = b + 1) { P = P + Tcij[a, b]; } disp.AddConstr(vectores.Ui[a] * (vectores.RLi[a] - (vectores.PlTcmalo[0, 3] * (1 - vectores.Uj[3]) + vectores.PlTcmalo[0, 4] * (1 - vectores.Uj[4]) + vectores.PlTcmalo[0, 5] * (1 - vectores.Uj[5]) + vectores.PlTcmalo[0, 16] * (1 - vectores.Uj[16]) + vectores.PlTcmalo[0, 17] * (1 - vectores.Uj[17]))), GRB.LESS_EQUAL, P, "tonelajecargado2" + a); } GRBLinExpr Qonda = 0; for (int a = 0; a < i; a = a + 1) { for (int b = 0; b < j; b = b + 1) { Qonda = (Qonda + Ycij[a, b] + Yvij[a, b]); } } disp.AddConstr(Qonda, GRB.LESS_EQUAL, M, "maximocamiones"); for (int b = 0; b < j; b = b + 1) { GRBLinExpr P1 = 0; GRBLinExpr P2 = 0; for (int a = 0; a < i; a = a + 1) { P1 = P1 + Tcij[a, b]; P2 = P2 + Tvij[a, b]; } disp.AddConstr(P1, GRB.EQUAL, P2, "conservaciondeflujo" + i); } for (int a = 0; a < i; a = a + 1) { GRBLinExpr P1 = 0; GRBLinExpr P2 = 0; for (int b = 0; b < j; b = b + 1) { P1 = P1 + Tcij[a, b]; P2 = P2 + Tvij[a, b]; } disp.AddConstr(P1, GRB.EQUAL, P2, "conservaciondeflujo2" + i); } GRBLinExpr Pobj = 0; for (int a = 0; a < i; a = a + 1) { for (int b = 0; b < j; b = b + 1) { Pobj = Pobj + Ycij[a, b] + Yvij[a, b]; } } disp.Update(); disp.SetObjective(Pobj, GRB.MINIMIZE); disp.Optimize(); double sumayc = 0; double sumayv = 0; double sumatc = 0; double sumatv = 0; for (int a = 0; a < i; a = a + 1) { double sumajyc = 0; double sumajyv = 0; double sumajtc = 0; double sumajtv = 0; for (int b = 0; b < j; b = b + 1) { vectores.PlYc[a, b] = Convert.ToDouble(Ycij[a, b].X); vectores.PlYv[a, b] = Convert.ToDouble(Yvij[a, b].X); vectores.PlTc[a, b] = Convert.ToDouble(Tcij[a, b].X); vectores.PlTv[a, b] = Convert.ToDouble(Tvij[a, b].X); sumayc = sumayc + vectores.PlYc[a, b]; //suma todos los flujos llenos sumayv = sumayv + vectores.PlYv[a, b]; //suma todos los flujos vacios sumatc = sumatc + vectores.PlTc[a, b]; //suma todos los camiones llenos sumatv = sumatv + vectores.PlTv[a, b]; //suma todos los camiones vacios sumajyc = sumajyc + Convert.ToDouble(Ycij[a, b].X); //suma todo el flujo cargado al botadero "a" sumajyv = sumajyv + Convert.ToDouble(Yvij[a, b].X); //suma todo el flujo vacio al botadero "a" sumajtc = sumajtc + Convert.ToDouble(Tcij[a, b].X); //suma todos los camiones cargados yendo a botadero "a" sumajtv = sumajtv + Convert.ToDouble(Tvij[a, b].X); //suma todos los camiones vacios yendo a botadero "a" } vectores.PlYc[a, 20] = sumajyc; // deja total vectores.PlYv[a, 20] = sumajyv; // vectores.PlTc[a, 20] = sumajtc; // vectores.PlTv[a, 20] = sumajtv; // } for (int b = 0; b < j; b = b + 1) { double sumaiyc = 0; double sumaiyv = 0; double sumaitc = 0; double sumaitv = 0; for (int a = 0; a < i; a = a + 1) { sumaiyc = sumaiyc + Convert.ToDouble(Ycij[a, b].X); sumaiyv = sumaiyv + Convert.ToDouble(Yvij[a, b].X); sumaitc = sumaitc + Convert.ToDouble(Tcij[a, b].X); sumaitv = sumaitv + Convert.ToDouble(Tvij[a, b].X); } vectores.PlYc[30, b] = sumaiyc; vectores.PlYv[30, b] = sumaiyv; vectores.PlTc[30, b] = sumaitc; vectores.PlTv[30, b] = sumaitv; } vectores.PlYc[30, 20] = sumayc; vectores.PlYv[30, 20] = sumayv; vectores.PlTc[30, 20] = sumatc; vectores.PlTv[30, 20] = sumatv; _timenow.StateValue = vectores.PlTc[0, 20]; sr.serializa(vectores); sr.closeStream(); disp.Dispose(); env.Dispose(); return(ExitType.FirstExit); }
/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _timenow = _propTimenow.GetState(context); double timenow = Convert.ToDouble(_timenow.StateValue); // Example of how to get the value of a step property. SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; } int periodos = 13 - Convert.ToInt32(Math.Truncate(timenow)); for (int b = 0; b < 21; b = b + 1) { for (int a = 0; a < 31; a = a + 1) { vectores.PlYc[a, b] = vectores.MipYc[a, b, periodos]; vectores.PlYv[a, b] = vectores.MipYv[a, b, periodos]; vectores.PlTc[a, b] = vectores.MipTc[a, b, periodos]; vectores.PlTv[a, b] = vectores.MipTv[a, b, periodos]; } } return(ExitType.FirstExit); }
/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _timenow = _propTimenow.GetState(context); double timenow = Convert.ToDouble(_timenow.StateValue); IState _salida = _propSalida.GetState(context); double salida = Convert.ToDouble(_salida.StateValue); IState _aux = _propAux.GetState(context); double aux = Convert.ToDouble(_aux.StateValue); SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; vectores.Lastrealocado = v.Lastrealocado; } //i Botaderos. j Palas. k Camiones. double[,] Din12 = (double[, ])vectores.Din1.Clone(); double[,] Tij = (double[, ])vectores.PlTc.Clone();//I Tonelaje por turno double[,] xij = new double[30, 20]; //I Tonelaje cumplido hasta el momento de activación del dinámico double[,] yij = new double[30, 20]; //Tonelaje requerido para alcazar R double[,] Rij = new double[30, 20]; //Porcentaje de cumplimienteo del tonelaje double[,] dij = new double[30, 20]; //Desviación del porcentaje de cumplimiento ideal en el momento de activación double[,] Mij = new double[30, 20]; //Demanda de camiones por ruta double[,] rij = new double[30, 20]; //I Matriz de tiempos de viajes double[] tk = new double[81]; //I Tiempo que le toma al camión k llegar al botadero/chancador al que va (si ya está en un botadero este tiempo es 0) double[] dk = new double[81]; //I Tiempo esperado de espera del camión k en el botadero/chancador al que va double[] ej = new double[30]; //I Tiempo promedio de descarga en el botadero j double[] Di = new double[20]; //Demanda de camiones por pala (int?) double[] Li = new double[20]; //I Tiempo promedio de carga en la pala i double[] Ni = new double[20]; //I Número de camiones en la pala i (int?) double[] Ei = new double[20]; //I Camiones en ruta a la pala i (int?) double[] Sk = new double[81]; //I Arreglo de variables binarias que indican si el camión tiene una tarea asignada int[] Bk = new int[81]; //Botadero al que está llendo el camión k int numcam = 81; //Número total de camiones double capacidad = 300; //Capacidad de los camiones int numPalas = 20; //Palas activas? int numBotaderos = 30; //Botaderos o chancador activos? double R = 0; //Se cálcula el porcentaje de cumplimiento de cuota for (int i = 0; i < numBotaderos; i++) { for (int j = 0; j < numPalas; j++) { if (Tij[i, j] != 0) { Rij[i, j] = xij[i, j] / Tij[i, j]; R = R + Rij[i, j]; } } } //Se calcula de déficit o superávit R = R / (numPalas * numBotaderos); for (int i = 0; i < numBotaderos; i++) { for (int j = 0; j < numPalas; j++) { dij[i, j] = Rij[i, j] - R; } } //Se calcula la demanda adeudada para alcanzar R double mij_aux; int mij; for (int i = 0; i < numBotaderos; i++) { for (int j = 0; j < numPalas; j++) { yij[i, j] = R * Tij[i, j] - xij[i, j]; mij_aux = yij[i, j] / capacidad; mij = Convert.ToInt32(mij_aux); Mij[i, j] = mij + 1; } } double DTotal = 0; double di; for (int j = 0; j < numPalas; j++) { di = 0; for (int i = 0; i < numPalas; i++) { di = Mij[i, j] + di; } Di[j] = di; DTotal = DTotal + Di[j]; } //En teoría se debería hacer un chequeo para que la demanda total de camiones no supere //el total disponible. De ocurrir, se deben limitar los flujos del PL (*). //Criterio de asignación de camiones //Se crea el arreglo Wik que contiene los tiempos que demora al camion k llegar a ser //atendido por la pala i. El tamaño de este arreglo depende de los camiones disponibles. double[,] Wik = new double[numPalas, numcam];//Matriz de tiempos esperados del camión k para ser atendido por la pala i for (int k = 0; k < numcam; k++) { if (Sk[k] != 0) //Sólo para los camiones sin tareas asignadas { for (int i = 0; i < numPalas; i++) { Wik[i, k] = Li[i] * (Ni[i] + Ei[i]) - (tk[k] + dk[k] + ej[Bk[k]] + rij[Bk[k], i]); } } } //Modelo GRBEnv env = new GRBEnv(); GRBModel model = new GRBModel(env); model.ModelName = "Asignación Dinámica"; GRBVar[,] X = new GRBVar[numPalas, numcam]; //Binaria que define si el camión k se asigna a la pala i for (int i = 0; i < numPalas; i++) { for (int k = 0; k < numcam; k++) { X[i, k] = model.AddVar(0.0, 1.0, 0.0, GRB.BINARY, "X" + i + "_" + k); } } model.Update(); //Restricciones for (int k = 0; k < numcam; k++) { GRBLinExpr suma_Xik = 0; for (int i = 0; i < numPalas; i++) { suma_Xik = suma_Xik + X[i, k]; } model.AddConstr(suma_Xik, GRB.LESS_EQUAL, Sk[k], "S" + k); } for (int i = 0; i < numPalas; i++) { GRBLinExpr suma_Xik = 0; for (int k = 0; k < numcam; k++) { suma_Xik = suma_Xik + X[i, k]; } model.AddConstr(suma_Xik, GRB.GREATER_EQUAL, Di[i], "D" + i); } model.Update(); GRBLinExpr FO = 0; for (int i = 0; i < numPalas; i++) { for (int k = 0; k < numcam; k++) { FO = FO + Wik[i, k] * X[i, k]; } } model.SetObjective(FO, GRB.MINIMIZE); model.Update(); model.Optimize(); sr.serializa(vectores); sr.closeStream(); return(ExitType.FirstExit); }
/// <summary> /// Method called when a process token executes the step. /// </summary> public ExitType Execute(IStepExecutionContext context) { IState _timenow = _propTimenow.GetState(context); double timenow = Convert.ToDouble(_timenow.StateValue); IState _salida = _propSalida.GetState(context); double salida = Convert.ToDouble(_salida.StateValue); IState _aux = _propAux.GetState(context); double aux = Convert.ToDouble(_aux.StateValue); IState _aux2 = _propAux2.GetState(context); double aux2 = Convert.ToDouble(_aux2.StateValue); IState _numcam = _propNumCam.GetState(context); double numcam = Convert.ToDouble(_numcam.StateValue); IState _needtime = _propNeedtime.GetState(context); double needtime = Convert.ToDouble(_needtime.StateValue); IState _losttones = _propLosttones.GetState(context); double losttones = Convert.ToDouble(_losttones.StateValue); IState _needch = _propNeedch.GetState(context); double needch = Convert.ToDouble(_needch.StateValue); // Example of how to get the value of a step property. SerializarElement sr = new SerializarElement(); if (File.Exists(sr.SerializationFile)) { Vect v = sr.deserializa(); vectores = sr.deserializa(); vectores.MipYc = v.MipYc; vectores.MipYv = v.MipYv; vectores.MipTc = v.MipTc; vectores.MipTv = v.MipTv; vectores.PlYc = v.PlYc; vectores.PlYv = v.PlYv; vectores.PlTc = v.PlTc; vectores.PlTv = v.PlTv; vectores.PlTcmalo = v.PlTcmalo; //Dinamico vectores.Din1 = v.Din1; vectores.DesCam = v.DesCam; vectores.Fila = v.Fila; //LP vectores.TCV = v.TCV; vectores.TCC = v.TCC; vectores.TCj = v.TCj; vectores.TDi = v.TDi; vectores.Destij = v.Destij; vectores.Dj = v.Dj; vectores.Uj = v.Uj; vectores.Ui = v.Ui; vectores.RLi = v.RLi; vectores.RUi = v.RUi; vectores.Mine = v.Mine; vectores.Mineralocado = v.Mineralocado; vectores.Lastrealocado = v.Lastrealocado; } int y; //para entrar al loop int palaneedy = 0; //numero de la pala needy double caminoipalaneedy = 0; double min; //var aux para encontrar pala needy double[,] Din22 = new double[200, 11]; //matriz con datos para encontrar camion con menos lost_tones double[] need_time = new double[600]; //matriz para encontrar al camino mas needy for (int x = 0; x < numcam; x++) //construye lo que falta de la matriz de los camiones (lo que depende de la pala needy) { if (vectores.DesCam[x, 3] == 1) // indicador si necesita pala { Din22[x, 8] = 1; } } for (int vuelta = 0; vuelta < 20; vuelta++) { for (int x = 0; x < 30; x++) { vectores.Din1[x + 30 * (vuelta), 1] = vectores.PlTc[30, vuelta]; //rescatar el haulage por hora de cada camino } } int desesperacion; int desesperacion2; desesperacion = 0; desesperacion2 = 0; for (int x = 0; x < 600; x++) //recupera los tonelajes del PL { vectores.Din1[x, 0] = vectores.PlTc[desesperacion, desesperacion2]; desesperacion = desesperacion + 1; if (desesperacion > 29) { desesperacion2 = desesperacion2 + 1; desesperacion = 0; } } for (int x = 0; x < 200; x++) { Din22[x, 0] = x + 1; //numero camion Din22[x, 1] = 320; //capacidad Din22[x, 2] = vectores.PlTc[30, 20]; //total rate shovels Din22[x, 3] = (vectores.PlYc[30, 20] + vectores.PlYv[30, 20]) * 320; //total trucks en toneladas } int newaux = 0; int camionpiola = 100; min = 999999;//var aux para encontrar pala needy double min3; double[,] Din12 = (double[, ])vectores.Din1.Clone(); //matriz con datos para encontrar camion con menos lost_tones do { min3 = 0; min = 999999; y = 0; int indicemin1 = 900000000; //var aux para encontrar pala needy for (int x = 0; x < 600; x++) { if (Din12[x, 0] != 0) { need_time[x] = Din12[x, 4] + ((Din12[x, 0] / Din12[x, 1]) * (Din12[x, 5] * 300 - Din12[x, 1]) / (Din12[x, 0])); //need_time[x] = Din12[x, 4] + ((Din12[x, 0] / Din12[x, 1]) * (Din12[x, 5] * 300 - Din12[x, 1] * timenow)) / (Din12[x, 7] * 300 / (timenow)); if (need_time[x] < min) //encuentra el menor y lo guarda en palaneedy { indicemin1 = x; palaneedy = Convert.ToInt32(Din12[x, 3]); min = need_time[x]; caminoipalaneedy = Din12[x, 2]; } } } //if (min < timenow) //{ //Din12[indicemin1, 7] = Din12[indicemin1, 7] + 1; for (int x = 0; x < numcam; x++) //construye lo que falta de la matriz de los camiones (lo que depende de la pala needy) { /* * sacar la fila bien * */ vectores.Ui[0] = vectores.Ui[0]; Din22[x, 4] = vectores.Fila[palaneedy - 1] * vectores.TCj[palaneedy - 1] + vectores.DesCam[x, 4]; if (Din22[x, 8] == 1) { Din22[x, 5] = vectores.TCV[Convert.ToInt32(vectores.DesCam[x, 2] - 1), palaneedy - 1]; //recoje tiempo de donde esta a la pala needy } Din22[x, 6] = vectores.PlTc[30, palaneedy - 1]; //tonelaje total asignado a palaneedy if (vectores.Fila[palaneedy - 1] == 0) //si no hay fila { if (Din22[x, 8] == 1) { Din22[x, 7] = vectores.TCV[Convert.ToInt32(vectores.DesCam[x, 2] - 1), palaneedy - 1]; //el shovel idle rate es Tij } } } double min2 = 90000000; camionpiola = 100; //que sea mayor que la ultima linea double[] lost_tones = new double[200]; newaux = 0; for (int x = 0; x < numcam; x++) //calcula lost_tones para los importantes { if (Din22[x, 8] == 1) { lost_tones[x] = ((Din22[x, 1] * Din22[x, 2] / Din22[x, 3]) * (Din22[x, 4] + Din22[x, 5]) + (Din22[x, 6] * Din22[x, 7])); //lost_tones[x] = (Din22[x, 2] / Din22[x, 3]) * (Din22[x, 3] + Din22[x, 4]) + (Din22[x, 5] * Din22[x, 6]); if (lost_tones[x] < min2) //recupera el menor y actualiza el valor { min2 = lost_tones[x]; //camionpiola = Convert.ToInt32(Din22[x, 0]); camionpiola = x + 1; } } else { newaux = newaux + 1; } } Din22[camionpiola - 1, 9] = palaneedy; // asignar camino a camion Din22[camionpiola - 1, 8] = 0; //lo saca de la lista Din22[camionpiola - 1, 10] = caminoipalaneedy; for (int x = 0; x < numcam; x++) { if (Din22[x, 8] == 1) { y = 1; } } for (int x = 0; x < 30; x++) { Din12[x + (palaneedy - 1) * 30, 4] = timenow; Din12[x + (palaneedy - 1) * 30, 5] = Din12[x + (palaneedy - 1) * 30, 5] + 1; } newaux = indicemin1; // } /*else * { * min = 959; * int palapiola = 100; //que sea mayor que la ultima linea * double min2 = 90000000; * for (int palanedy = 1; palanedy < 20; palanedy++) * { * * if (vectores.PlTc[30, palanedy - 1] > 0) * { * * Din22[Convert.ToInt32(aux2 - 1), 4] = vectores.Fila[palanedy - 1] * vectores.TCj[palanedy - 1] + vectores.DesCam[Convert.ToInt32(aux2 - 1), 4]; * * Din22[Convert.ToInt32(aux2 - 1), 5] = vectores.TCV[Convert.ToInt32(vectores.DesCam[Convert.ToInt32(aux2 - 1), 2] - 1), palanedy - 1]; //recoje tiempo de donde esta a la pala needy * * Din22[Convert.ToInt32(aux2 - 1), 6] = vectores.PlTc[30, palanedy - 1]; //tonelaje total asignado a palaneedy * * Din22[Convert.ToInt32(aux2 - 1), 7] = 0; * * if (vectores.Fila[palanedy - 1] == 0) //si no hay fila * { * Din22[Convert.ToInt32(aux2 - 1), 7] = vectores.TCV[Convert.ToInt32(vectores.DesCam[Convert.ToInt32(aux2 - 1), 2] - 1), palanedy - 1]; //el shovel idle rate es Tij } * } * * double lost_tones; * * lost_tones = ((Din22[Convert.ToInt32(aux2 - 1), 1] * Din22[Convert.ToInt32(aux2 - 1), 2] / Din22[Convert.ToInt32(aux2 - 1), 3]) * (Din22[Convert.ToInt32(aux2 - 1), 4] + Din22[Convert.ToInt32(aux2 - 1), 5]) + (Din22[Convert.ToInt32(aux2 - 1), 6] * Din22[Convert.ToInt32(aux2 - 1), 7])); * //lost_tones[x] = (Din22[x, 2] / Din22[x, 3]) * (Din22[x, 3] + Din22[x, 4]) + (Din22[x, 5] * Din22[x, 6]); * * if (lost_tones < min2) //recupera el menor y actualiza el valor * { * * min2 = lost_tones; * * palapiola = palanedy; * * } * } * } * * double min32 = 0; * * for (int l = 0; l < 30; l++) * { * double last_tones = 0; * if (vectores.PlTc[l, palapiola - 1] > 0) * { * last_tones = vectores.PlTc[l, palapiola - 1] / (Din12[(palapiola - 1) * 30 + l, 7] * 300 / timenow); * if (last_tones > min32) * { * * min32 = last_tones; * Din22[Convert.ToInt32(aux2 - 1), 9] = palapiola; * Din22[Convert.ToInt32(aux2 - 1), 10] = l + 1; * * } * } * else * { * if (min2 == 0) * { * Din22[Convert.ToInt32(aux2 - 1), 9] = 21; * } * } * * * } * y = 0; * }*/ }while (y == 1); //for (int x = 0; x < numcam; x++) //DesCam suelta el dato como importante //{ // vectores.DesCam[x, 3] = 0; //} _salida.StateValue = Din22[Convert.ToInt32(aux2 - 1), 9]; if (Din22[Convert.ToInt32(aux2 - 1), 9] == 4 || Din22[Convert.ToInt32(aux2 - 1), 9] == 5 || Din22[Convert.ToInt32(aux2 - 1), 9] == 6 || Din22[Convert.ToInt32(aux2 - 1), 9] == 10 || Din22[Convert.ToInt32(aux2 - 1), 9] == 17 || Din22[Convert.ToInt32(aux2 - 1), 9] == 18) { Din22[Convert.ToInt32(aux2 - 1), 10] = 1; } else if (Din22[Convert.ToInt32(aux2 - 1), 9] == 7 || Din22[Convert.ToInt32(aux2 - 1), 9] == 8 || Din22[Convert.ToInt32(aux2 - 1), 9] == 12) { Din22[Convert.ToInt32(aux2 - 1), 10] = 4; } else if (Din22[Convert.ToInt32(aux2 - 1), 9] == 1 || Din22[Convert.ToInt32(aux2 - 1), 9] == 2 || Din22[Convert.ToInt32(aux2 - 1), 9] == 3 || Din22[Convert.ToInt32(aux2 - 1), 9] == 11) { Din22[Convert.ToInt32(aux2 - 1), 10] = 8; } _aux.StateValue = Din22[Convert.ToInt32(aux2 - 1), 10]; // //_aux2.StateValue = camionpiola; _needtime.StateValue = min; // _losttones.StateValue = ((Din12[33, 0] / Din12[33, 1]) * (Din12[33, 5] * 300 - Din12[33, 1] * timenow)) / (Din12[33, 7] * 300 / timenow); //(Din12[33, 7] * 300 / timenow);// _needch.StateValue = ((Din12[37, 0] / Din12[37, 1]) * (Din12[37, 5] * 300 - Din12[37, 1] * timenow)) / (Din12[37, 7] * 300 / timenow); // sr.serializa(vectores); sr.closeStream(); return(ExitType.FirstExit); }