//Armazena a celula do elemento permissivel encontrado no decorrer do algoritmo. //public Point PermElementoPos { get; set; } //Variavel para guardar a posição do elemento permissível quando encontrado. public Quadro(FObjetivo FuncaoObj) { Matriz = new Celula[FuncaoObj.VariaveisBasicas.Count + 1, FuncaoObj.Variaveis.Count + 1]; ColunaHeader = new string[FuncaoObj.Variaveis.Count + 1]; //+1 para o Bj LinhaHeader = new string[FuncaoObj.VariaveisBasicas.Count + 1]; //+1 para funcao obj buildHeaders(FuncaoObj); buildMatriz(FuncaoObj); }
private void buildMatriz(FObjetivo FuncaoObj) { //Linha da funcao objetivo Matriz[0, 0] = new Celula { ValorSuperior = FuncaoObj.TermoLivre }; for (int i = 1; i <= FuncaoObj.Variaveis.Count; i++) { Matriz[0, i] = new Celula { ValorSuperior = FuncaoObj.Variaveis.ToList()[i - 1].Value.Coeficiente }; } int linha = 1; foreach (Restricao rest in FuncaoObj.Restricoes.OrderBy(m => m.Key).Select(m => m.Value)) { // Coluna 0 sera o termo livre Matriz[linha, 0] = new Celula { ValorSuperior = rest.TermoLivre }; for (int col = 1; col < this.ColunaHeader.Length; col++) { var nomeVariavel = this.ColunaHeader[col]; Matriz[linha, col] = new Celula { ValorSuperior = rest.Variaveis.ContainsKey(nomeVariavel) ? rest.Variaveis[nomeVariavel].Coeficiente : 0.0 }; } linha += 1; } }