/// <summary> /// Método que define a função objetivo da operação /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void funcaoObjetivoButton_Click(object sender, EventArgs e) { try { funObj = new FuncaoObjetivo() { NomeVarX = nomeXTextBox.Text.Trim(), NomeVarY = nomeYTextBox.Text.Trim(), ValidaOperacao = maximizacaoRadioButton.Checked ? "Maximização" : "Minimização" }; if (valorXTextBox.Text.Equals("")) { throw new InvalidOperationException("Variável X não possui valor para calcular."); } funObj.ValorX = double.Parse(valorXTextBox.Text.Trim()); if (valorYTextBox.Text.Equals("")) { throw new InvalidOperationException("Variável Y não possui valor para calcular."); } funObj.ValorY = double.Parse(valorYTextBox.Text.Trim()); MessageBox.Show("Função Objetivo definida com sucesso!", "Sucesso"); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
/// <summary> /// Método para resetar tudo /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void resetOperaçãoButton_Click(object sender, EventArgs e) { try { funObj = new FuncaoObjetivo(); restricoes.Clear(); nomeXTextBox.Text = nomeYTextBox.Text = valorXTextBox.Text = valorYTextBox.Text = restricaoXTextBox.Text = restricaoYTextBox.Text = limiteRestricaoTextBox.Text = resultadoTextBox.Text = ""; restricaoInequaComboBox.SelectedIndex = -1; restricoesListBox.Items.Clear(); maximizacaoRadioButton.Checked = true; MessageBox.Show("Funções resetadas com sucesso!"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } }
/// <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)); }
public int CompareTo(Individuo individuo) => FuncaoObjetivo.CompareTo(individuo.FuncaoObjetivo);