コード例 #1
0
        /// <summary>
        /// Método para resolução do problema previamente digitado
        /// </summary>
        /// <param name="f"></param>
        /// <param name="restr"></param>
        /// <returns></returns>
        public string SolucaoOtima(FuncaoObjetivo f, List <Restricoes> restr)
        {
            if (funObj == null)
            {
                throw new InvalidOperationException("Não há função objetivo definida");
            }
            double x, y, z, a;

            switch (restricoesListBox.Items.Count)
            {
            case 2:
                a   = Matriz.MatrizDeterminanteA2x2(Matriz.DefinirMatriz(restr));
                x   = Matriz.MatrizDeterminanteX2x2(Matriz.DefinirMatriz(restr)) / a;
                y   = Matriz.MatrizDeterminanteY2x2(Matriz.DefinirMatriz(restr)) / a;
                f.X = x < 0 ? x * -1 : x;
                f.Y = y < 0 ? y * -1 : y;
                break;

            case 3:
                a   = Matriz.MatrizDeterminanteA3x3(Matriz.DefinirMatriz(restr));
                x   = Matriz.MatrizDeterminanteX3x3(Matriz.DefinirMatriz(restr)) / a;
                y   = Matriz.MatrizDeterminanteY3x3(Matriz.DefinirMatriz(restr)) / a;
                f.X = x < 0 ? x * -1 : x;
                f.Y = y < 0 ? y * -1 : y;
                break;

            //case 4:
            //    a = Matriz.MatrizDeterminanteA4x4(Matriz.DefinirMatriz(restr));
            //    x = Matriz.MatrizDeterminanteX4x4(Matriz.DefinirMatriz(restr)) / a;
            //    y = Matriz.MatrizDeterminanteY4x4(Matriz.DefinirMatriz(restr)) / a;
            //    f.X = x < 0 ? x * -1 : x;
            //    f.Y = y < 0 ? y * -1 : y;
            //    break;
            //case 5:
            //    a = Matriz.MatrizDeterminanteA5x5(Matriz.DefinirMatriz(restr));
            //    x = Matriz.MatrizDeterminanteX5x5(Matriz.DefinirMatriz(restr)) / a;
            //    y = Matriz.MatrizDeterminanteY5x5(Matriz.DefinirMatriz(restr)) / a;
            //    f.X = x < 0 ? x * -1 : x;
            //    f.Y = y < 0 ? y * -1 : y;
            //    break;
            default:
                a   = Matriz.MatrizDeterminanteA3x3(Matriz.DefinirMatriz(restr));
                x   = Matriz.MatrizDeterminanteX3x3(Matriz.DefinirMatriz(restr)) / a;
                y   = Matriz.MatrizDeterminanteY3x3(Matriz.DefinirMatriz(restr)) / a;
                f.X = x < 0 ? x * -1 : x;
                f.Y = y < 0 ? y * -1 : y;
                break;
            }
            if (maximizacaoRadioButton.Checked)
            {
                f.ValidaOperacao = "maximização";
            }
            else if (minimizacaoRadioButton.Checked)
            {
                f.ValidaOperacao = "minimização";
            }
            else
            {
                throw new InvalidOperationException("Não há operação de otimização selecionada");
            }
            f.ValorOtimo = f.ValorX * f.X + f.ValorY * f.Y;
            return(string.Format("A Solução ótima desta operação será:{6}{0:n2} {1}{6}{2:n2} {3} para {4} esta operação.{6}Total:{5:n2}", f.X, f.NomeVarX, f.Y, f.NomeVarY, f.ValidaOperacao, f.ValorOtimo, Environment.NewLine));
        }