[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: Re: EP2



Ricardo,
Aparentemente você está usando a mesma função para simplex (documentada em um trecho de livro em .pdf) que nós usamos. Não sei se ajuda muito, mas me lembro que um (o maior) erro que a gente cometeu, apesar de termos lido direito a documentação, foi passar o número de restrições de igualdade no parâmetro errado, resultando nessas soluções com números negativos (totalmente desesperadores). Como no ep supomos que a entrada deveria ser apenas feita com restrições de igualdade, passamos os parâmetros m1 e m2 como 0, usando as variáveis "slack" para transformar as restrições do problema em restrições de igualdade. Se for o mesmo algoritmo (suponho que seja), não precisa usar gambiarras.. apesar da entrada do algoritmo parecer estranha no início, ele funciona muito bem. Provavelmente é um erro besta como o nosso mas que, como qualquer erro pequeno, é muito difícil de descobrir.
 
PS: Professor, como usa o fogão? Tentei esquentar o jantar aqui e tem fumaça pra tudo quanto é lado. Alguém sabe o número do corpo de bombeiros?? ;o)
----- Original Message -----
From: Ricardo Drizin
To: egbirgin-mac315@ime.usp.br
Sent: Monday, May 27, 2002 1:51 AM
Subject: Re: EP2

Olha... na verdade, o meu "está funcionando perfeitamente" era com constraints do tipo <=b[j].

Agora pouco fui transformar em restrições "=b[j]" (formato standard), e realmente há um problema com a função.. ela está calculando algumas das variáveis como sendo negativas... (?!?)

Consequentemente algumas resoluções ele faz direito, e outras não.

Tentei consertar na gambiarra, e não consegui. Se alguém puder dar alguma dica...


At 23:05 26/05/02 -0300, you wrote:
Eu usei as funcoes do nr.com. Talvez vcs estejam tendo o mesmo problema que eu tive.. falta de atenção ;)

Lá no pdf, explicam que a função usa indices da matriz entre 1...m+2 e entre 1...n+1.  (ou seja, eles NAO usam o indice zero). Entao, é preciso alocar (m+3) x (n+2), e na hora de popular a matriz vc vai começar pelo a[1][1].

Tá até escrito claramente.. "O float **a deve apontar para memoria alocada que permita referencias no subintervalo a[i][k] i=1,2,..m+2;  k=1,2,..n+1." "You will suffer endless agonies if you fail to understand this simple point." :)

Tirando esse detalhe, que me fez perder umas horas, agora tá funcionando perfeitamente.

ps: n+1 é n variaveis + 1 coluna de constantes
    m+2 é m constraints + 1 linha de vetor-custo + 1 linha extra que a funcao as vezes usa internamente (para calculo de um vetor-custo-auxiliar)