public void Preparo() { //Le agrego la función identidad y conformo los diferentes //vectores para completar el modelo //Creo todos los Y var listvari = ListoVariables(); for (var i = 1; i <= Ecuaciones.Count; i++) { nuevoZ = "Y" + i.ToString(); listTempTerminos.Add(new Termino(nuevoZ, 0)); } // Agrego los Y a las ecuaciones, pero dejando en 1 el valor de la ecuación actual foreach (var ec in Ecuaciones) { // Agrego los X que falten foreach (var t in listvari) { if (!ec.IsByVariable(t)) { ec.Add(new Termino(t, 0)); } } // Agrego matrix identidad foreach (var nz in listTempTerminos) { if (ec.NroEcu == _i) { ec.Add(new Termino(nz.Variable, 1)); ec.VariableBasica = nz.Variable; } else { ec.Add(nz); } _i++; } // Agrego los Z ec.Add(new Termino("Z", 0)); _i = 1; // Marco la ecuación como preparada ec.Preparada = true; } //Preparo la función a Optimizar FuncionAOptimizar.Add(new Termino("Z", 1)); FuncionAOptimizar.VariableBasica = "Z"; foreach (var z in FuncionOriginal.ListoVariables()) { FuncionAOptimizar.Add(new Termino(z, (FuncionOriginal.Get(z).Valor *-1))); } // Agrego las variables de la matriz identidad en la función a optimizar. foreach (var iltt in listTempTerminos) { FuncionAOptimizar.Add(new Termino(iltt.Variable, iltt.Valor * -1)); } }
private void ProcesoModelo(int ecupiv, string colpiv) { IEcuacion ecuPivoteTmp = null; // Proceso las ecuaciones ecuPivoteTmp = ProcesoPivote(ecupiv, colpiv, ecuPivoteTmp); ProcesoEcuacionesNoPivote(ecupiv, colpiv, ecuPivoteTmp); // Proceso Z FuncionAOptimizar.ValorDerecho = FuncionAOptimizar.ValorDerecho - FuncionAOptimizar.Get(colpiv).Valor *ecuPivoteTmp.ValorDerecho; FuncionAOptimizar.ProcesoNoPivote(FuncionAOptimizar.Get(colpiv).Valor, ecuPivoteTmp); }
public void Proceso() { string colpiv; int ecupiv; while (Itero()) { colpiv = FuncionAOptimizar.GetMenor().Variable; ecupiv = BuscoEcuacionPivote(colpiv); ProcesoModelo(ecupiv, colpiv); ReemplazoSalientePorEntrante(ecupiv, colpiv); } }
public string MostrarModelo() { string outPut = ""; outPut += "Modelo :" + Nombre + "\rObjetivo :" + Objetivo + "\r" + "********************\r"; foreach (var item in Ecuaciones) { foreach (var ter in item.MostrarEcuacion()) { if (ter.Valor < 0) { outPut += ter.Valor + ter.Variable; } else { outPut += "+" + ter.Valor + ter.Variable; } } outPut += " = " + item.ValorDerecho + "\r"; } ; outPut += "\r Función a Optimizar Z \r"; foreach (var zitem in FuncionAOptimizar.ListoVariables()) { if (FuncionAOptimizar.Get(zitem).Valor < 0) { outPut += FuncionAOptimizar.Get(zitem).Valor + FuncionAOptimizar.Get(zitem).Variable; } else { outPut += "+" + FuncionAOptimizar.Get(zitem).Valor + FuncionAOptimizar.Get(zitem).Variable; } } outPut += "\r\r Resultado de variables: \r\r"; foreach (var item in Ecuaciones) { outPut += "VarBasica :" + item.VariableBasica + " : " + item.ValorDerecho + "\r"; } outPut += "\r\rResultado Optimizado(Z):" + FuncionAOptimizar.ValorDerecho + "\r"; outPut += "********************"; return(outPut); }
private bool Itero() { // Verifico si existe algún número negativo en Z return(FuncionAOptimizar.GetMenor().Valor < 0); }