Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public void ColocarProblemaNaFormaPadrao()
- {
- precisaDeFaseUm = false;
- /* Vamos colocar o problema na forma padrao */
- foreach (Restricao restricao in listaDeRestricoes)
- {
- /* Verificando se o b e negativo */
- if (restricao.Recurso < 0)
- {
- restricao.MudarSinalDosCoeficientes();
- restricao.Recurso = -restricao.Recurso;
- if (restricao.Sinal.Equals(">=")) restricao.Sinal = "<=";
- else restricao.Sinal = ">=";
- }
- recurso.Add(restricao.Recurso);
- if ((restricao.Sinal.Equals("<=")) || (restricao.Sinal.Equals("<")))
- {
- custosDaFuncaoObjetivo.Add(0);
- restricao.AdicionarNovoCoeficiente(1);
- }
- else if ((restricao.Sinal.Equals(">")) || (restricao.Sinal.Equals(">=")) || (restricao.Sinal.Equals("=")))
- {
- if (!restricao.Sinal.Equals("="))
- {
- custosDaFuncaoObjetivo.Add(0);
- restricao.AdicionarNovoCoeficiente(-1);
- }
- precisaDeFaseUm = true;
- }
- if (!restricao.Sinal.Equals("="))
- {
- foreach (Restricao outrasRestricoes in listaDeRestricoes)
- {
- if (!outrasRestricoes.Equals(restricao)) outrasRestricoes.AdicionarNovoCoeficiente(0);
- }
- quantidadeVariaveisDepoisDaFormulacao++;
- }
- }
- /* Se precisar de fase um, criamos as variaveis artificiais */
- if (precisaDeFaseUm) CriarVariaveisArtificiais();
- /* Criamos a Matriz A (matriz dos coeficientes) */
- CriarMatrizA();
- /* Inicializamos os valores que vao em B e N */
- InicializarBaseENaoBase();
- }
- private void CriarVariaveisArtificiais()
- {
- foreach (Restricao restricao in listaDeRestricoes)
- {
- if ((restricao.Sinal.Equals(">")) || (restricao.Sinal.Equals(">=")) || (restricao.Sinal.Equals("=")))
- {
- restricao.AdicionarNovoCoeficiente(1);
- quantidadeVariaveisDepoisDaFormulacao++;
- /* Adicionamos as variaveis artificias na base */
- basicas.Add(quantidadeVariaveisDepoisDaFormulacao);
- artificiais.Add(quantidadeVariaveisDepoisDaFormulacao);
- foreach (Restricao outrasRestricoes in listaDeRestricoes)
- {
- if (!outrasRestricoes.Equals(restricao)) outrasRestricoes.AdicionarNovoCoeficiente(0);
- }
- }
- }
- }
- private void InicializarBaseENaoBase()
- {
- /* Inicializando B */
- foreach (Restricao restricao in listaDeRestricoes)
- {
- if ((restricao.Sinal.Equals("<=")) || (restricao.Sinal.Equals("<")))
- {
- for (int contador = 0; contador < restricao.QuantidadeDeVariaveis; contador++)
- {
- if (contador >= quantidadeVariaveisAntesDaFormulacao)
- {
- if (restricao[contador] == 1) basicas.Add(contador + 1);
- }
- }
- }
- }
- /* Inicializando N */
- for (int contador = 1; contador <= quantidadeVariaveisDepoisDaFormulacao; contador++)
- {
- if (!basicas.Contains(contador)) naoBasicas.Add(contador);
- }
- Console.WriteLine();
- Console.Write("Basicas: ");
- foreach (int i in basicas)
- {
- Console.Write(i + " ");
- }
- Console.WriteLine();
- Console.Write("Nao basicas: ");
- foreach (int i in naoBasicas)
- {
- Console.Write(i + " ");
- }
- Console.WriteLine();
- Console.WriteLine();
- }
- private void CriarMatrizA()
- {
- int quantidadeDeLinhasDaMatriz = quantidadeRestricoes;
- int quantidadeDeColunasDaMatriz = quantidadeVariaveisDepoisDaFormulacao;
- A = new Matriz(quantidadeDeLinhasDaMatriz, quantidadeDeColunasDaMatriz);
- int i = 0;
- int j = 0;
- foreach (Restricao restricaoAtual in listaDeRestricoes)
- {
- j = 0;
- for (int k = 0; k < restricaoAtual.QuantidadeDeVariaveis; k++)
- {
- A[i, j] = restricaoAtual[k];
- j++;
- }
- i++;
- }
- Console.WriteLine(A);
- }
Add Comment
Please, Sign In to add comment