Menu

Manual

Raimundo Santos Leite
There is a newer version of this page. You can find it here.

INSTRUÇÕES PARA O PROJETO PUBLICO3:

SEÇÃO 1) INTRODUÇÃO

O Prouesse é um software para a obtenção de Horários Escolares com as características de flexibilidade, ou seja, gera horários obedecendo à maioria das condições desejadas, e que foi projetado para permitir a rápida entrada de dados ou informações. Uma vez entrados os dados, obtém soluções com rapidez. Para utilizá-lo é preciso conhecer as instruções sobre como as tabelas de dados (abas) devem ser formadas e entender um pouco do processo de obtenção de resultados, sendo o principal objetivo deste manual de instruções apresentar de maneira acessível as informações e explicações que portanto se fazem necessárias.

O programa utiliza dados de entrada, como a relação das turmas de cada prof., com a respectiva carga horária semanal (número de aulas por semana que um prof. ministra em cada uma de suas turmas): ver Seção (3.2) abaixo; para cada prof. e cada dia da semana deve ser informado o correspondente máximo de aulas (número máximo de aulas deste prof. que podem ser lançadas no dia considerado): ver Seção (3.3); para cada prof., devem ser informados, dentre os 25 possíveis horários da semana, aqueles horários em que o prof. em questão não pode lecionar aula (estes são os chamados "horários não disponíveis" do prof.): ver Seção (3.3); se por um lado o programa tem a desvantagem de não colocar todos os dias de folga na forma como os profs. gostariam (ou melhor, se a maioria dos profs. escolher os dias de folga, não deixando a opção livre para o programa, então dificulta-se a obtenção dos horários pelo programa), por outro lado, temos a possibilidade de limitar os dias de trabalho dos profs., bastando para isto informar para cada prof. o número máximo de dias com aulas durante a semana: ver Seção (3.4).

Observe que deve ser informada ao programa a relação das turmas de cada prof., ou seja, o programa recebe este tipo de informação fechada e não a altera.

Passamos a descrever as características dos horários gerados pelo programa. O programa não lança 3 ou mais aulas de um prof. para uma mesma turma, no mesmo dia, e quando lança duas aulas (para um prof., numa mesma turma, num mesmo dia), estas aulas são sempre alocadas em horários consecutivos (por exemplo, o segundo e o terceiro horários do dia); quando um prof. ministra duas disciplinas para uma mesma turma, as duas disciplinas devem ser consideradas como uma única disciplina (ou seja, as cargas horárias semanais das duas disciplinas devem ser somadas), permanecendo impossível lançar 3 ou mais aulas deste prof. para esta turma no mesmo dia.

Se houver casos de profs. que não queiram aulas geminadas (duas aulas num dia para a mesma turma), devem ser informados os profs. para os quais isso acontece. Ver Seção (3.5)

O programa elabora horários para os dias de segunda-feira a sexta-feira, portanto não pode ser utilizado numa escola com aulas aos Sábados. O programa é aplicável somente em escolas nas quais o turno compõe-se de 5 horários de aulas por dia, para todas as turmas.

SEÇÃO 2) INSTRUÇÕES GERAIS DO PROGRAMA

Para executar o programa é necessário ter instalado na máquina o Java, que pode ser obtido de: https://www.java.com/pt_BR/download/

Com o Java instalado, basta executar o arquivo binário Prouesse.jar.

A interface do Prouesse compõe-se das abas NOMES, TURMAS, MÁXIMOS DE AULAS, DIAS DE TRABALHO, DADOS DIVERSOS (abas para serem preenchidas com os dados e informações sobre um problema), e mais: ERROS (para informar erros no preenchimento das demais abas), DICAS (para mostrar informações importantes durante as várias fases da elaboração dos horários), RESULTADOS (para mostrar resultados parciais e finais).

A interface compõe-se também dos botões: ABRIR, SALVAR, PROCESSAR, APAGAR.

O botão ABRIR permite abrir um arquivo gravado no computador. Ao clicar no botão ABRIR, uma janela de diálogo pergunta se é para abrir um arquivo de dados ou resultado. Na opção abrir um arquivo de dados o conteúdo do arquivo aberto se distribui entre as abas destinadas aos dados e somente pode ser aberto um arquivo de dados produzido pelo próprio Prouesse (arquivo com extensão .prouesse). A opção abrir resultado é utilizada para preencher a aba RESULTADO com o conteúdo de um arquivo.

O Prouesse não mantém visível o nome do arquivo aberto. Ao salvar um arquivo, se selecionarmos ou informarmos o nome de um arquivo  existente, não é mostrada mensagem informando que  existe um arquivo com mesmo nome.

O Prouesse não tem recurso de impressão. Para imprimir um resultado é preciso salvar a aba RESULTADO e imprimir com o Microsoft Word.

O botão PROCESSAR é utilizado para iniciar ou dar continuidade ao processo de obtenção de solução para o problema cujos dados estão presentes nas abas.

Ao clicar no botão APAGAR o conteúdo da aba visível é apagado.

SEÇÃO 3) INSTRUÇÕES PARA O PREENCHIMENTO DAS ABAS

Ao se utilizar o programa Prouesse, a primeira providência deve ser numerar os profs. e as turmas. Por exemplo, numerar as turmas de 1 a 10, se houver 10 turmas. Na aba NOMES devem ser informados os nomes dos prof. e os códigos das turmas, na sequência em que eles foram numerados.

A seguir, nas Seções 3.1 a 3.5, consideraremos uma escola fictícia e mostraremos como as abas são preenchidas com os diversos dados desta escola, que tem no turno considerado 20 profs. e 10 turmas. Este exemplo será explicado detalhadamente.

3.1) ABA “NOMES”

Susana
Ana
Aparecida
Alan
Tania
Angela
Maria
Sonia
Nazare
Vanessa
Marcia
Gustavo
Andre
Soraia
Neusa
Rosiane
Alex
Silvania
Joao
Catarina
6a1
6a2
6a3
6a4
7a1
7a2
8a1
8a2
9a1
9a2

Na aba NOMES são apresentados os nomes dos profs. (máximo de 9 caracteres por nome), na ordem em que os mesmos foram numerados. O conjunto de linhas com os nomes dos profs. é seguido pelo conjunto das linhas contendo os códigos das turmas (máximo de 9 caracteres), na ordem em que estas foram numeradas.

3.2) ABA “TURMAS”

t
1 1 7 8
2 3 5 6
3 2 9 10
4 4
5 5 7 8
6 6 9 10
7 1 2 3
8 4
9 1 2 3 5 6
10 4 7 8 9 10
11 4 7 8 9 10
12 1 2 3 5 6
13 5 6 7 8 9
14 1 2 3 4 10
15 1 2 5 6 7 8 9 10
16 3 4
17 1 2 3 4
18 5 6 7 8 9 10
19 1 2 3 4 5 6 7 8 9 10
20 1 2 3 4 5 6 7 8 9 10
Ch
1 5
2 5
3 5
4 5
5 5
6 5
7 5
8 5
9 3
10 3
11 3
12 3
13 3
14 3
15 2
16 2
17 2
18 2
19 1
20 1

Explicações: Com exceção da aba NOMES, cada linha de uma aba é linha de comando ou linha de dados. Por exemplo, as linhas "t" e "ch" da aba TURMAS deste exemplo são linhas de comandos. O programa identifica quais linhas são linhas de dados pela regra de que se uma linha contém algum algarismo (0 a 9) então trata-se de uma linha de dados. E se uma linha não contém nenhum algarismo então trata-se de uma linha de comando. As linhas de dados, além dos caracteres numéricos (0 a 9), podem conter somente as letras 'p', 'a' e 't' e os caracteres '-' e ':' (na verdade, estas letras e caracteres que podem estar presentes numa linha de dados são simplesmente ignorados pelo programa). Se alguma regra de preenchimento das abas (como esta regra sobre os caracteres permitidos para as linhas de dados) não for seguida rigorosamente, será emitida uma mensagem de erro, que aparecerá na aba ERROS. As linhas de comandos  podem conter letras, pelo simples fato  mencionado de que se contivessem algarismo seriam consideradas linhas de dados. Na verdade, veremos que para cada aba, apenas uns poucos comandos são permitidos, específicos para a aba.

Depois disto que foi dito e que vale para todas as abas em geral, passemos a explicar os dados contidos na aba TURMAS deste exemplo.

Os tipos de linhas de comandos que podem ser inseridos na aba TURMAS são: "t", "ch" e "tch".

No exemplo acima a linha de comando "t" indica que as linhas que vêm em seguida são linhas de dados informando, cada uma, os números das turmas de um prof. Por exemplo, a linha de dados " 1 1 7 8 " informa que, para o prof. 1, as turmas são 1, 7 e 8, e a linha " 2 3 5 6" informa que, para o prof. 2, as turmas são 3, 5 e 6.

A linha de comando "ch" indica que as linhas que vêm em seguida são linhas de dados informando a carga horária semanal da disciplina de vários profs. Portanto, a carga horária da disciplina do prof. 1 é 5. Já para o prof. 10, é informado que serão ministradas 3 aulas por semana em cada uma de suas turmas.

Na aba TURMAS, O grupo de linhas encabeçado pela linha de comando "t" não precisa vir necessariamente antes do grupo de linhas encabeçado pela linha de comando "ch", ou seja, esta ordem pode ser invertida.

Se houver o caso de um prof. que tem carga horária diferente de turma para turma, então pode ser utilizada uma linha de comando "tch". Por exemplo, as linhas abaixo significam que o prof. 12 tem a turma 2 (carga horária CH = 3), a turma 5 (CH = 3), a turma 6 (CH = 4), etc.

tch
12 2:3 5:3 6:4 7:3 9:4

Os caracteres ':' presentes neste exemplo que acabamos de ver são ignorados, ou melhor, são considerados como espaços em branco. De modo geral, os caracteres ‘:’, 'a', 'p', 't' e '-', quando presentes em qualquer aba, exceto a aba NOMES, são ignorados. Estes são os únicos caracteres não numéricos permitidos numa linha de dados, isto é, numa linha que não é linha de comando.

3.3) ABA “MAXIMOS DE AULAS”

qqs
1 50555 0 555
2 05555 1
3 55505 0 555
4 22222 1
5 55555 1
6 50555 1 555
7 05555 1
8 22222 1
9 55550 1
10 05555 1
11 50505 1
12 50505 1
13 40505 0 555
14 05555 1
15 05555 1
16 40000 1
17 55550 0 555
18 05555 1
19 05050 1
20 05440 1
hnd
20 3a 4 1
20 4a 5
20 5a 4 1
hnd
15 3a 4 5
15 4a 3 4 5
15 5a 4 5

Os tipos de linhas de comando que podem ser inseridos na aba MÁXIMO DE AULAS são: "qqs", "hnd" e stq”.

No programa Prouesse, para cada prof. e cada dia da semana pode ser informado o correspondente máximo de aulas (número máximo de aulas que podem ser lançadas para este prof. no dia considerado). Se não for informado o máximo de aulas de um prof. num dia, o mesmo é considerado como sendo 5. Observe que um máximo de aulas igual a 0 (zero) força o programa a não alocar aulas do prof. no dia correspondente.

A linha de comando "qqs" indica que as linhas de dados que vêm em seguida, têm, cada uma, o formato:

P m2 m3 m4 m5 m6 (0 ou 1) n4 n5 n6,

sendo P o número de um prof.; m2, m3, m4, m5 e m6 são respectivamente os máximos deste prof. nos dias de segunda-feira a sexta-feira; a seguir, o caracter '0' ou '1', sendo que '1' significa que os próximos dados (n4, n5, n6), SE HOUVER, devem ser ignorados, ao passo
que o caracter '0' significa que há mais dados seguintes a ele na mesma linha, n4, n5 e n6, que devem “substituir” respectivamente os valores m4, m5 e m6 informados na mesma linha. Aqui, “substituir” significa que o valor informado é ignorado, passando a valer o dado que se posiciona posteriormente, por exemplo n5 substitui m5 como valor informado para o máximo de aulas do prof. na quinta-feira. A necessidade deste tipo de substituição ficará clara na Seção 5, fazendo parte de um processo chamado "flexibilização".

Para exemplificar, a linha "13 40505 0 555" significa que os máximos de aulas para o prof. 13, para todos os dias, são 40505 (observe que não  necessidade de espaços entre os máximos: neste caso os espaços em branco são opcionais). Porém, o caracter seguinte é '0', significando que os máximos informados para quarta, quinta e sexta-feira são substituídos por 555, passando a prevalecer estes últimos. Esta substituição é que é a "flexibilização", que consiste em substituir máximos nulos (como na 5ª-feira) por outros valores. Como máximos nulos implicam dias de folga, a sua substituição passa a permitir a alocação de aulas nos correspondentes dias (então dizemos que o prof. afetado está passando por uma flexibilização,  que está abrindo mão de escolher precisamente os seus dias de folga). Se no lugar do caracter '0' mencionado fosse '1', a flexibilização seria desfeita, pois o caracter '1' manda ignorar os dados que vêm depois dele (não  mais flexibilização), podendo até mesmo não haver mais dados na linha (como em várias linhas do exemplo acima, que terminam com '1': o caracter '1' ali colocado não pode faltar). Este recurso do Prouesse que acaba de ser descrito foi desenvolvido para facilitar as flexibilizações: Para realizar uma flexibilização, inserimos um caracter 0 seguido dos máximos de aulas para 3 dias; para desfazer uma flexibilização substituímos 0 por 1. Voltaremos a falar de flexibilização (especialmente quando se deve fazer) na seção 5.

A linha de comando "hnd" indica que as linhas de dados que vêm em seguida informam "horários não disponíveis", que são alguns horários de certos dias para os quais não devem ser alocadas aulas de determinados profs. Por exemplo, a linha " 20 3a 4 1 "

deste exemplo (veja o início desta seção) significa que o prof. 20 tem o horário não disponível de 3ª-feira, no primeiro horário. O valor 4 significa que o
máximo de aulas deste prof., na 3ª-feira, é 4, por causa do horário não disponível que é informado. Observe que, no mesmo exemplo (veja acima), já havia sido informado que este máximo de aulas para este prof., na 3ª-feira, era 5, porém como o mesmo máximo de aulas está sendo informado novamente, prevalece a segunda informação.

A linha de dados "15 4a 3 4 5" significa que o prof. 15 tem horários não disponíveis na 4ª-feira (o quarto e o quinto horários). O valor 3 representa o máximo de aulas deste prof. na 4ª-feira. Observe que no lugar deste 3 não poderia haver um valor maior, pois a inclusão de dois horários não disponíveis na 4ª-feira implica na redução do máximo de aulas deste dia para um valor que não pode ser maior que 3.

Em cada linha de dados sob o comando "hnd", deve ser informado o número de um prof., seguido de um dia da semana, seguido do máximo de aulas para o prof. e para o dia. E após o máximo de aulas, se não houver mais nenhum dado na linha, é interpretado que não se está indicando nenhum horário como não disponível.

Como vimos, caracteres como 'p', 't', '-', ':' e 'a' (este último presente no exemplo acima), quando presentes em linhas de dados, são ignorados e tratados como espaços em branco.

Vejamos outro exemplo de preenchimento da aba MÁXIMO DE AULAS:

stq
1 50555 0 555
2 05555 1
3 55505 0 555
4 22222 1
5 55555 1
6 50555 1 555
7 05555 1
8 22222 1
9 55550 1
10 05555 1
11 50505 1
12 50505 1
13 40505 0 555
14 05555 1
15 05555 1
16 40000 1
17 55550 0 555
18 05555 1
19 05050 1
20 05440 1
hnd
20 3a 4 1
20 4a 5
20 5a 4 1
hnd
15 3a 4 5
15 4a 3 4 5
15 5a 4 5

A seguir veremos que a linha de comando "stq" (que aparece neste exemplo) e o conjunto de linhas de dados que ela encabeça funciona mais ou menos como a linha de comando “qqs”, que já vimos, sendo a única diferença entre elas quanto aos dias que são afetados pelas substituições (ou flexibilizações): No caso da linha de comando "stq" os dias envolvidos são segunda, terça e quarta.

A linha de comando "stq" indica que as linhas de dados que vêm em seguida, têm, cada uma, o formato:

P m2 m3 m4 m5 m6 (0 ou 1) n2 n3 n4,

sendo P o número de um prof.; m2, m3, m4, m5 e m6 são respectivamente os máximos deste prof. nos dias de segunda-feira a sexta-feira; a seguir, o caracter '0' ou '1', sendo que '1' significa que os próximos dados (n2, n3, n4), SE HOUVER, devem ser ignorados, ao passo
que o caracter '0' significa que há mais dados seguintes a ele na mesma linha, n2, n3 e n4, que devem “substituir” respectivamente os valores m2, m3 e m4 informados na mesma linha. Aqui, “substituir” significa que o valor informado é ignorado, passando a valer o dado que se posiciona posteriormente, por exemplo n3 substitui m3 como valor informado para o máximo de aulas do prof. na terça-feira. A necessidade deste tipo de substituição ficará clara na Seção 5, fazendo parte de um processo chamado "flexibilização".

Para exemplificar, a linha "13 40505 0 555" significa que os máximos de aulas para o prof. 13, para todos os dias, são 40505 (observe que não  necessidade de espaços entre os máximos: neste caso os espaços em branco são opcionais). Porém, o caracter seguinte é '0', significando que os máximos informados para segunda, terça e quarta-feira são substituídos por 555, passando a prevalecer estes últimos. Esta substituição é que é a "flexibilização", que consiste em substituir máximos nulos (como na 3ª-feira) por outros valores. Como máximos nulos implicam dias de folga, a sua substituição passa a permitir a alocação de aulas nos correspondentes dias (então dizemos que o prof. afetado está passando por uma flexibilização,  que está abrindo mão de escolher precisamente os seus dias de folga). Se no lugar do caracter '0' mencionado fosse '1', a flexibilização seria desfeita, pois o caracter '1' manda ignorar os dados que vêm depois dele (não  mais flexibilização), podendo até mesmo não haver mais dados na linha (como em várias linhas do exemplo acima, que terminam com '1': o caracter '1' ali colocado não pode faltar). Este recurso do Prouesse que acaba de ser descrito foi desenvolvido para facilitar as flexibilizações: Para realizar uma flexibilização, inserimos um caracter 0 seguido dos máximos de aulas para 3 dias; para desfazer uma flexibilização substituímos 0 por 1. Voltaremos a falar de flexibilização (especialmente quando se deve fazer) na seção 5.

3.4) ABA “DIAS DE TRABALHO”

1 3
2 3
3 3
4 3
5 3
6 3
7 3
8 4
9 3
10 3
11 3
12 3
13 3
14 3
15 4
16 1
17 2
18 3
19 2
20 3

Na aba DIAS DE TRABALHO não deve haver linhas de comando. Cada linha é uma linha de dados, o número de um prof. acompanhado do respectivo número máximo de dias em trabalho. Neste exemplo, o programa pode alocar aulas do prof. 15 em no máximo 4 dias. Se não for informado o número máximo de dias em trabalho de um prof., o mesmo passa a ser considerado 5.

3.5) ABA “DADOS DIVERSOS”

psg
9 10 14 15 17 18

O tipo de linha de comando que pode ser inserido na aba DADOS DIVERSOS é: "psg".
Se a linha de comando "psg" estiver presente, na linha seguinte deve vir os números dos profs. que não queiram ter aulas geminadas, formando uma lista que não deve ocupar mais de uma linha. Os profs. que estiverem indicados não terão aula geminada em nenhuma turma.

Em todas as abas apresentadas acima, exceto as abas “NOMES” e “DIAS DE TRABALHO”, a primeira linha deve conter obrigatoriamente um dos comandos (linha de comando) permitidos para a aba, conforme detalhado acima.

SEÇÃO 4) AS FASES DO PROCESSO DE ELABORAÇÃO DE HORÁRIOS

No início, o programa lê os dados preenchidos nas abas apropriadas, verifica se as tabelas nas abas foram preenchidas corretamente (caso tenha havido algum erro de preenchimento, a execução do programa é interrompida e na aba ERROS é exibida uma lista de mensagens de erros). A seguir, o programa faz uma série de cruzamentos dos dados informados (são os chamados "testes de consistência"), para verificar se há incompatibilidades entre os dados que impossibilitem a existência de solução (caso haja alguma incompatibilidade, a execução do programa é interrompida e na aba ERROS é exibida uma lista de erros de inconsistência). A seguir, vem o processo propriamente dito da elaboração de horários, que se desenvolve em 5 etapas. Vejamos em que consiste cada uma destas etapas ou fases do processo de elaboração de horários.

1ª Fase: Cada prof. tem uma lista de turmas. Denominaremos "curso" o trabalho de um prof. em uma de

suas turmas. Assim, para cada prof., e cada uma das turmas deste prof., existe um "curso", que é a soma das aulas que o prof. lecionará nesta turma, correspondendo à carga horária semanal da disciplina que o prof. ministra para a turma.

A 1ª Fase estabelece a divisão da semana em duas partes, sendo a 1ª parte formada pela segunda-feira e terça-feira e a 2ª parte formada pela quarta, quinta e sexta-feira. Na 1ª Fase as aulas de cada curso, de cada prof., são distribuídas entre a 1ª e a 2ª parte da semana. Assim, com a 1ª Fase fica definida a quantidade de aulas de cada prof., de cada turma deste prof., na segunda-feira e na terça-feira; as aulas restantes do curso ficam para os dias restantes. Se for definido que a quantidade de aulas do curso na 1ª parte da semana é zero, então as aulas ficam concentradas na 2ª parte da semana.

Como cada curso pode ter no máximo duas aulas por dia, a soma das aulas nos dias de segunda-feira e terça-feira pode ser no máximo 4.

O objetivo da 2ª Fase consiste em distribuir as aulas de cada curso, de cada prof., entre os dias da 2ª parte da semana (quarta, quinta e sexta-feira).

O objetivo da 3ª Fase consiste em distribuir as aulas de cada curso, de cada prof., entre os dias: Segunda, terça e quarta-feira. Observe que a quarta-feira, que foi envolvida na distribuição da 2ª Fase, é envolvida também na distribuição feita na 3ª Fase. A explicação para isto é que a distribuição entre 2 dias geralmente é impossível, por isto a quarta-feira é envolvida na 3ª Fase, para totalizar 3 dias.

Portanto, ao final da 3ª Fase, as aulas de cada curso já estão distribuídas entre os 5 dias da semana, ou seja, já se definiu para cada dia quais cursos funcionarão e quantas aulas estariam previstas para os cursos.

Na 4ª Fase, as aulas previstas para segunda-feira e terça-feira são alocadas nos horários, finalizando a obtenção dos horários das aulas para estes dias.

Na 5ª Fase, as aulas previstas para quarta, quinta e sexta-feira são alocadas nos horários, finalizando a obtenção dos horários das aulas para estes dias.

Na 4ª Fase, para obtenção do resultado, o programa Prouesse geralmente precisa fazer a alteração da distribuição originalmente obtida nas fases anteriores. Na 5ª Fase, aulas também podem ser transferidas de um dia para o outro.

Já vimos, que no caso de, num dia, serem duas aulas de um curso, estas aulas são alocadas em horários consecutivos.

SEÇÃO 5) PONDO O PROUESSE PARA FUNCIONAR

Descrevemos nesta Seção o procedimento a ser seguido para que o Prouesse funcione corretamente, abordando um exemplo concreto. Explicamos também nesta Seção o importante conceito de flexibilização  mencionado na Seção 3.3.

1) Ativar o programa Prouesse tal como explicado na Seção 2.
2) Para este Exemplo, atenda à requisição Informe o número de profs. informando: 20.
3) Informe o número de turmas como sendo 10.
O número de profs. e turmas informados no início valerá para toda a seção do Prouesse, isto é, não pode ser alterado.
4) Clique no botão Abrir e escolha a opção abrir Dados.
5) Selecione para abrir o arquivo exemplo.prouesse
Examinando o conteúdo das abas, você pode perceber que o conteúdo do arquivo aberto distribuiu-se por várias abas.
6) Abra a aba RESULTADOS e insira 0 (zero) na 1ª linha. Isto fará com que a execução do programa comece pela 1ª Fase (ver Seção 4).
7) Clique no botão PROCESSAR.
Neste momento o programa faz uma verificação dos dados contidos nas abas.
8) Informe o tempo de espera solicitado, digitando, por exemplo, 4 (tempo fornecido para a execução da 1ª Fase).
9) Surge uma janela de diálogo informando que a 1ª Fase é possível.
10) Surge uma janela de diálogo com a pergunta Prosseguir para próximas fases?”. Clique no botão sim.
11) Informe o tempo de espera solicitado para a execução da continuação da 1ª Fase, digitando, por exemplo, 4.
12) Torna-se visível uma janela de diálogo informando que a 1ª Fase foi executada com sucesso, tendo gerado um resultado.
Na Seção 4 vimos que a 1ª Fase consiste em definir para cada prof., para cada curso (um curso é o somatório das aulas de um prof. numa turma, que tem uma carga horária semanal pré-definida) deste prof., o número de aulas na segunda-feira somado com o número de aulas na terça-feira (uma soma de aulas que pode ser zero).
13) A execução passa por uma interrupção para permitir salvar o resultado da 1ª Fase presente na aba RESULTADOS (examine esta aba). Clique no botão PROCESSAR.
14) Informe o tempo de espera solicitado para a execução da 2ª Fase, digitando, por exemplo, 4.
15) Para o exemplo que está sendo abordado, a 2ª Fase não é concluída com sucesso na primeira tentativa, o que é confirmado pela janela de diálogo informando que a 2ª Fase não obteve solução.

A 2ª Fase consiste em, partindo do resultado da 1ª Fase, distribuir as aulas de cada curso entre os dias de quarta, quinta e sexta-feira.

Quando a 2ª Fase não obtém sucesso na 1ª tentativa, é preciso realizar flexibilizações e fazer uma nova tentativa, podendo ser necessárias várias tentativas, à base de flexibilizações adicionais. Passaremos a explicar o que são as flexibilizações, porque elas são necessárias e como fazê-las.

Para sucesso na 2ª Fase, o Programa Prouesse exige que uma grande parcela dos profs. não escolha seus dias de folga. Isto não significa que os profs. ficarão sem dias de folga. Na verdade todos os prof. podem ter o máximo possível de dias de folga, bastando para isso informar, para cada prof., na aba DIAS DE TRABALHO, o número máximo de dias de trabalho do prof. Porém, para possibilitar sucesso na execução da 2ª Fase, é preciso que uma grande parcela dos profs. não escolha seus dias de folga com precisão. Não se sabe ao certo quantos profs. devem deixar livres os seus dias de folga, mas na prática verifica-se que este número não deve ser pequeno. A flexibilização é justamente fazer com que um (ou alguns) prof. que tinha folga definida para um certo dia, passe a especificar a possibilidade de ter aulas neste dia, ou seja, aquele dia para o qual não haveria aula daquele prof. passa a ser um dia de possível trabalho.

No procedimento 14 acima vimos que o operador informa um tempo de espera para a execução da 2ª Fase. Quando este tempo é esgotado sem que uma solução para a 2ª Fase seja encontrada, a procura por solução é interrompida, para que seja feita alguma flexibilização que possa facilitar a obtenção de solução para a 2ª Fase. Esta flexibilização é decidida pelo usuário e, para facilitar, o operador pode consultar a aba DICAS. Uma característica importante do programa Prouesse são as informações úteis que podem ser obtidas, consultando-se a aba DICAS. São informações que se tornam disponíveis no momento em que são necessárias e que têm o objetivo de complementar este manual de instruções na aquisição de familiaridade com o programa.

Vimos que a flexibilização é fazer com que um (ou alguns) prof. que tinha folga definida para um certo dia passe a especificar a possibilidade de ter aulas neste dia, ou seja, aquele dia para o qual não haveria aula daquele prof. passa a ser um dia de possível trabalho. Para fazer isto, substitui-se 0 (zero) por 5 na definição do máximo de aulas correspondente (0 significa nenhuma aula no dia, 5 significa que podem haver até 5 aulas no dia): vai-se na aba MÁXIMOS DE AULAS; na linha correspondente ao prof. em questão; na posição correspondente ao dia em questão e substitui-se 0 por 5. Isto é feito pelo usuário, orientado pelas sugestões que apareceram na aba DICAS. Infelizmente, as flexibilizações contrariam os interesses dos profs., mas são necessárias para que a 2ª Fase chegue a um resultado, lembrando que o objetivo da 2ª Fase é obter distribuições.

Uma vez realizada a flexibilização, pressiona-se o botão "processar" e o programa recomeça a partir da 2ª fase (não recomeça a partir da 1ª fase por causa da tabela presente na aba RESULTADO. Experimente abrir esta aba antes de pressionar "PROCESSAR": a tabela que

pode ser vista é o resultado da 1ª fase). Se novamente, dentro do prazo pré-definido não for encontrado resultado para a 2ª fase, novamente ocorre interrupção para ser feita mais flexibilização. Pode-se optar por fazer a flexibilização de um prof. de cada vez, ou fazer de vários de uma só vez. Esta última alternativa pode ser mais conveniente, uma vez que é fácil desfazer flexibilização: então, flexibiliza-se vários e, se der certo, faz-se novas tentativas desfazendo-se uma flexibilização de cada vez.

Na Seção 3.3 é explicado um exemplo de flexibilização com a inserção da linha

13 40505 0 555

na aba MÁXIMOS DE AULAS, dentro do grupo de linhas de dados encabeçado pela linha de comando "qqs". O caracter '0' antes de "555" significa que os máximos de aulas nos dias de quarta, quinta e sexta-feira devem ser substituídos por "555", sendo que os valores anteriores eram "505". Assim, a folga na quinta-feira torna-se facultativa. Como a 2ª Fase trabalha somente com os dias quarta, quinta e sexta-feira, somente faz sentido alterar os máximos de aulas para estes dias (isto confirma a utilidade da linha de comando “qqs”, projetada para facilitar as flexibilizações envolvendo estes dias). Se o caracter '0' for substituído por '1', a flexibilização é desfeita, pois O caracter '1' confirma que os máximos que vêm antes dele devem prevalecer.

A seguir, daremos continuidade ao exemplo que vínhamos abordando e apresentaremos o texto presente na aba DICAS, orientando a execução de flexibilizações e disponibilizado a partir do momento em que a 1ª tentativa da 2ª Fase não obteve solução (ver procedimento 15 acima):

Não foi possível finalizar a 2a Fase em tempo hábil. Experimente fazer flexibilizações dos dias de folga dos profs.
Flexibilizar é ir na aba MAXIMOS DE AULAS para alterar os máximos que estiverem indicando dias de folga para certos profs.
(máximos definidos como zero indicam dias de folga).
A 2a Fase trabalha somente com os dias: 4a, 5a e 6a. Portanto, alterar somente os máximos para estes dias.
Ver no manual de instruções como utilizar o comando 'qqs' para informar os máximos de aulas e alterá-los facilmente para os dias 4a, 5a e 6a.
Os profs. para os quais a flexibilização é sugerida são os seguintes, na seguinte ordem
(vêm primeiro os profs. para os quais a flexibilização pode influenciar mais na 2a Fase) :
20, 19, 18, 14, 12, 11, 9, 6, 4, 2, 1,

Clicando o botão PROCESSAR a 2a Fase será processada novamente (o conteúdo presente na aba RESULTADOS não permitirá que o processamento recomece pela 1a Fase)


16) Na aba MÁXIMOS DE AULAS, substitua o conteúdo da última linha por: 20 55 555 1
17) Para realizar uma nova tentativa da 2ª Fase, clique no botão PROCESSAR.
18)     Informe o tempo de espera para a 2ª Fase, por exemplo 4.
19) Aparece uma janela de diálogo informando que a 2ª Fase foi executada com sucesso. Examine na aba RESULTADOS o resultado da 2ª Fase.
20) Para executar a 3ª Fase, clique no botão PROCESSAR. O conteúdo presente na aba RESULTADOS fará com que o processamento entre na 3ª Fase.
21) Informe o tempo de espera para a 3ª Fase, por exemplo 4.
O objetivo da 3ª Fase é, partindo do resultado da 2ª Fase, distribuir as aulas de cada curso entre os dias de segunda, terça e quarta-feira. Com isto as aulas de todos os cursos  estão distribuídas entre os 5 dias da semana.
22) Aparece uma janela de diálogo informando que a 3ª Fase foi executada com sucesso. Examine na aba RESULTADOS o resultado da 3ª Fase. O resultado da 3ª Fase chama-se distribuição.
23) Para executar a 4ª Fase, clique no botão PROCESSAR. O conteúdo presente na aba RESULTADOS fará com que o processamento entre na 4ª Fase.
24) Informe o tempo de espera para a 4ª Fase, por exemplo 4.
O objetivo da 4ª Fase é finalizar a elaboração dos horários das aulas para segunda-feira e terça-feira.
25) Aparece uma janela de diálogo informando que a 4ª Fase foi executada com sucesso.
26) Informe o tempo de espera para a 5ª Fase, por exemplo 4.
O objetivo da 5ª Fase é finalizar a elaboração dos horários das aulas para quarta, quinta e sexta-feira.
27) Aparece uma janela de diálogo informando que a 5ª Fase foi executada com sucesso.
28) As tabelas de horários de aulas são apresentadas na aba RESULTADOS.

Assim como a 2ª Fase, a 3ª Fase, de distribuição das aulas entre segunda, terça e quarta-feira, geralmente não obtém solução na primeira tentativa, exigindo a realização de flexibilização entre uma tentativa e outra. As flexibilizações realizadas para a 3ª Fase envolvem apenas os dias de segunda, terça e quarta-feira, ou seja, são eliminadas indicações de folgas incidindo apenas sobre estes dias. O comando adequado para fazer e desfazer flexibilizações para a 3ª Fase é stq, assim como para a 2ª Fase é qqs. Ver na Seção 3.3 as regras para formar linhas de dados encabeçadas pela linha de comando stq.

Quando, numa tentativa de execução da 3ª Fase, aparece uma janela de diálogo informando que a 3ª Fase não obteve solução, é preciso ir na aba DICAS para obter os números dos profs. para os quais podem ser feitas flexibilizações. Neste momento também é possível ir na aba MÁXIMO DE AULAS para efetuar as flexibilizações. Também neste momento, uma tabela contendo o resultado da 2ª Fase está presente na aba RESULTADOS. O conteúdo da aba RESULTADOS é determinante, para que, ao clicar o botão PROCESSAR, uma nova tentativa com a 3ª Fase seja iniciada.

 pouco dissemos que os comandos qqs e stq são adequados para as flexibilizações da 2ª e 3ª Fases, respectivamente. Então, ao terminar a 2ª Fase, como adequar a aba MÁXIMO DE AULAS para a fase seguinte? Obviamente não é suficiente trocar a linha de comando qqs por stq. Para não ser preciso adequar manualmente as linhas de dados contendo os máximos de aulas, basta ir na aba DICAS e copiar as linhas de dados que  se encontram prontas: Seleciona-se o texto desejado na aba DICAS; pressiona-se ctrl-C; posiciona-se o cursor na aba MÁXIMO DE AULAS e pressiona-se ctrl-V.

Outra informação presente na aba DICAS neste momento de transição entre a 2ª e a 3ª Fases são alterações sugeridas para os máximos de aulas de certos profs. válidos para a quarta-feira. A utilidade destes valores se explica pelo seguinte: Durante a 2ª Fase, várias flexibilizações podem ter alterado o máximo de aulas de certos profs. para a quarta-feira (geralmente alterados para 5). Porém, como a quarta-feira participa também da 3ª Fase, existe a possibilidade de retornar os máximos de aulas para os seus valores originais, isto é, para zero (estamos considerando profs. que originalmente tinham folga na quarta-feira). Então, o programa apresenta na aba DICAS os números dos profs. para os quais estas alterações são possíveis, não sendo, no entanto, obrigatórias (e não são definitivas, por causa de eventuais flexibilizações na 3ª Fase).

Exemplo mostrando o conteúdo da aba DICAS ao final da conclusão da 2ª Fase:

A 2ª Fase está concluída, então é sugerido copiar (ctrl-c ctrl-v) os dados a seguir para a aba MÁXIMOS DE AULAS
(estes dados são os máximos de aulas atuais, já consideradas todas as flexibilizações feitas na 2ª Fase. A linha de comando 'stq' encabeçando estes dados é apropriada para as flexibilizações a serem feitas na 3ª Fase)

stq
1 555 55 1
2 050 55 1
3 555 50 1
4 222 20 1
5 555 50 1
6 500 55 1
7 005 55 1
8 222 22 1
9 555 55 1
10 555 55 1
11 505 05 1
12 505 05 1
13 555 55 1
14 555 05 1
15 055 55 1
16 444 00 1
17 555 00 1
18 055 55 1
19 050 50 1
20 015 50 1

A seguir são informados os números dos profs. que podem ter o máximo de aulas para 4ª-feira reduzido, caso se queira. Para cada um de tais profs. é informado o valor para o qual o número máximo de aulas pode ser reduzido.
(Este valor é calculado com base no número total de aulas previstas para o prof. nos dias 2ª, 3ª e 4ª-feira, dias envolvidos na 3ª-Fase;
porém não foram considerados eventuais horários não disponíveis para 4ª-feira)

Prof. p = 4: 0
Prof. p = 5: 0
Prof. p = 8: 0
Prof. p = 9: 0
Prof. p = 10: 0
Prof. p = 13: 0
Prof. p = 14: 0
Prof. p = 15: 1
Prof. p = 16: 0
Prof. p = 17: 0
Prof. p = 18: 0
Prof. p = 20: 4

Após fazer as alterações indicadas na aba MÁXIMOS DE AULAS, clique no botão PROCESSAR; O conteúdo presente na aba RESULTADOS fará com que a 3ª Fase seja executada.


Várias vezes mencionamos que o conteúdo presente na aba RESULTADOS num instante em que o Prouesse não está processando é determinante para definir a próxima Fase a ser executada. Geralmente o operador não tem que se preocupar com isto. Por exemplo, se o conteúdo na aba RESULTADOS é o resultado da 2ª Fase, então a próxima fase a ser executada é a 3ª Fase; ou se a execução da 2ª Fase não foi bem sucedida, então o resultado da 1ª Fase permanece na aba RESULTADOS e, então, o próximo passo ainda é a 2ª Fase.

O número na primeira linha da aba RESULTADOS indica o tipo de resultado presente e os números (códigos) possíveis são: 102 (resultado da 1ª Fase), 150 (resultado da 2ª Fase) e 200 (resultado da 3ª Fase). Então, por exemplo, se o código na primeira linha é 102, então o conteúdo restante da aba RESULTADOS é o resultado da 1ª Fase e ele é importante porque ele será lido e é a partir dele que será gerada a 2ª Fase.

Quando o operador vai começar a elaborar horários a partir da 1ª Fase, então ele deve inserir 0 (zero) na primeira linha da aba RESULTADOS antes de clicar em PROCESSAR.

Na 2ª ou 3ª fase, quando, após várias flexibilizações, consegue-se uma solução, sugerimos experimentar repetir várias vezes o processamento que foi bem sucedido, experimentando-se desfazer uma a uma as flexibilizações efetuadas, com o objetivo de melhorar a solução obtida (no sentido de satisfazer aos interesses de um maior número de profs.). Aquelas flexibilizações que, uma vez desfeitas, não permitirem encontrar solução são mantidas e experimenta-se desfazer outras flexibilizações, até que todas as flexibilizações sejam experimentadas. Este tipo de técnica é que motivou a criação dos comandos 'qqs' e 'stq' da aba MÁXIMOS DE AULAS, permitindo fazer e desfazer flexibilizações facilmente. Para desfazer uma flexibilização basta trocar um dígito 0 por 1 na aba MÁXIMOS DE AULAS.

Para que seja possível a técnica que acabamos de descrever, assim que é concluída com êxito a 1ª ou 2ª Fase, é recomendado salvar a aba RESULTADOS (escolhendo-se um nome). No caso do resultado da 2ª Fase, o ideal é salvar o melhor resultado possível. Uma vez concluída a 2ª Fase, normalmente o programa entra na 3ª fase porque ele lê o código 150 na aba RESULTADOS. Para que seja possível desfazer flexibilizações (como sugerido acima) e repetir a 2ª Fase, basta abrir o arquivo em que foi salvo o resultado da 1ª Fase (opção abrir RESULTADO); assim o conteúdo da aba RESULTADOS será substituído pelo conteúdo do arquivo aberto.

Uma vez concluída a 3ª Fase normalmente o programa entra na 4ª fase porque ele lê o código 200 na aba RESULTADOS. Para que seja possível desfazer flexibilizações (como sugerido acima) e repetir a 3ª Fase, basta abrir o arquivo em que foi salvo o resultado da 2ª Fase (opção abrir RESULTADO). Porém, uma vez feito isto, ao clicar o botão PROCESSAR, o programa muitas vezes entra diretamente na 4ª Fase (quando isto acontece é indicação de que as flexibilizações desfeitas não entram em conflito com a última distribuição obtida); isto acontece porque o Prouesse tem um recurso de gravação da última distribuição obtida (veja Seção 6.1); a alternativa para o operador que deseja tentar desfazer outras flexibilizações é aguardar a próxima parada do processamento.

Uma outra alternativa, que torna desnecessário salvar o resultado da 1ª ou 2ª Fase, é utilizar as combinações de teclas ctrl-c ctrl-v: Seleciona-se o resultado na respectiva aba; pressiona-se ctrl-c; para executar a 2ª ou 3ª Fase a partir do resultado, é só ir na aba RESULTADOS; clicar o botão APAGAR; pressionar ctrl-v; pressionar PROCESSAR.

SEÇÃO 6) GERENCIANDO HORÁRIOS NÃO DISPONÍVEIS

6.1) GRAVAÇÃO DE DISTRIBUIÇÃO

Ao final da 2ª e 3ª Fases, obtém-se uma distribuição válida para toda a semana, a qual é gravada pelo programa de uma maneira independente do conteúdo presente na aba RESULTADOS. Quando o botão PROCESSAR for clicado novamente, o programa inicialmente faz uma verificação dos dados presentes nas abas, para decidir se a distribuição gravada pode ser aproveitada, eliminando a necessidade de recomeçar pela 1ª Fase. Por exemplo, é verificado se a distribuição disponível respeita os máximos de aulas informados na respectiva aba: A quantidade de aulas de cada prof., em cada dia, indicada pela distribuição não deve ultrapassar o respectivo máximo.

Quando, após clicar no botão PROCESSAR e feita a verificação dos dados de entrada constata-se que a distribuição gravada pode ser aproveitada, o programa entra diretamente na 4ª Fase, ao passo, que verificando-se que a distribuição disponível não pode ser aproveitada, o programa emite uma mensagem e automaticamente recomeça-se pela 1ª Fase.

6.2) A TRIAGEM DOS HORÁRIOS NÃO DISPONÍVEIS NA 1ª FASE

A  Fase também tem outra finalidade além da descrita na Seção 4. A imposição de horários não disponíveis, por poucos que sejam, tem um efeito dificultador considerável na elaboração de horários, dificultando a obtenção de soluções, principalmente quando  vários horários não disponíveis localizados num determinado horário de um determinado dia (ou seja, vários profs. que não podem dar aula exatamente no mesmo horário). É uma boa medida limitar os horários não disponíveis (isto é, evitar a imposição de todos os horários não disponíveis desejáveis: infelizmente isto pode contrariar os interesses dos profs., mas pode ser necessário, pelo efeito dificultador que os horários não disponíveis causam)  na  Fase. Por este motivo, a  Fase, que tem a finalidade descrita na Seção 4, é também o momento de se selecionar os horários não disponíveis que prevalecerão, isto é, que serão levados em consideração e terão efeito na elaboração dos horários. Assim, a  Fase utiliza um critério para estabelecer se o conjunto dos horários não disponíveis informados na aba MÁXIMOS DE AULAS permitirão uma solução. Infelizmente, pelo fato de na  Fase, a elaboração de horários estar muito no início, não é possível neste momento garantir com precisão que o conjunto de horários não disponíveis informados viabiliza de fato uma solução.

Ao clicar no botão PROCESSAR, se o conteúdo presente na aba RESULTADOS indicar que a execução deve começar pela  Fase (um zero na primeira linha  desta aba tem este efeito), inicialmente é solicitado o tempo de espera para a  Fase; em seguida  duas possibilidades:

(1) Surge a mensagem “1ª Fase possível”. Significa que o conjunto de horários não disponíveis informados foi aprovado pelo teste da 1ª Fase e possivelmente viabilizará uma solução. Então, surge uma janela com a pergunta: “Prosseguir para próximas Fases?”. Se for clicado em “sim”, a execução passa para a continuação da 1ª Fase e fases seguintes, ao passo que se for clicado em “não”, a execução é interrompida a fim de que mais horários não disponíveis sejam acrescentados.

(2) Surge a mensagem “1ª Fase sem solução”. Significa que o conjunto de horários não disponíveis informados não foi aprovado pelo teste da 1ª Fase, por motivos tais como: Excesso de horários não disponíveis informados; vários horários não disponíveis ocorrendo simultaneamente (para vários profs.); Tempo de espera que tinha sido informado (para a 1ª Fase) insuficiente. Então, surge uma janela com a pergunta: “Prosseguir para próximas Fases?”. Se for clicado em “sim”, a execução passa para as fases seguintes, mesmo com a possibilidade de o conjunto de horários não disponíveis ser inviável, ao passo que se for clicado em “não”, a execução é interrompida para ajustes nos horários não disponíveis: Pode-se, então, realizar nova tentativa, mudando os horários não disponíveis ou eliminando superposições de horários não disponíveis, ou simplesmente informando um tempo de espera maior para a 1ª fase.

6.3) GERENCIANDO HORÁRIOS NÃO DISPONÍVEIS

Os máximos de aulas, que são informados na aba MÁXIMOS DE AULAS, sendo um valor para cada prof., para cada dia, representando o máximo de aulas que este prof. pode ter neste dia, têm um efeito muito grande na 2ª e 3ª Fases (fases de distribuição das aulas), devido ao fato de que as aulas de cada prof. que estiverem sendo lançadas num dia, por exemplo, 3ª-feira, devem ser somadas para que o total não ultrapasse o máximo de aulas deste prof., neste dia.  outro tipo de dados, os horários não disponíveis, não interferem diretamente na 2ª e 3ª Fases, porém cada horário não disponível que é informado implica na redução do máximo de aulas do prof. correspondente, no dia correspondente (por exemplo, se forem informados dois horários não disponíveis do prof. 5 na terça-feira, então o máximo de aulas do prof. 5 na terça-feira não pode ser maior que 3). Consequentemente, os horários não disponíveis informados interferem indiretamente na 2ª e 3ª Fases. Esta é a razão pela qual foi importante no início, na 1ª fase, introduzir um critério para limitar os horários não disponíveis. Porém, mesmo o conjunto de horários não disponíveis que foi aprovado na 1ª Fase pode atuar como dificultador da obtenção de soluções na 4ª e 5ª Fases. Portanto, a estratégia indicada é, uma vez aprovados na 1ª Fase, anotar todos os horários não disponíveis que constam na aba MÁXIMOS DE AULAS. A seguir, passar pela 2ª e 3ª Fases como explicado anteriormente, obtendo uma distribuição. Na 4ª e 5ª Fases, o próximo passo é eliminar a maioria dos horários não disponíveis da respectiva aba (porém sem alterar os máximos de aulas) e obter uma solução (deverá ser fácil obter horários completos para todos os dias, devido à eliminação dos horários não disponíveis). A seguir, repetir a 4ª e 5ª Fases, inserindo mais uns poucos horários não disponíveis (por isto é que foi necessário anotá-los anteriormente); se obtiver horários completos para todos os dias, repetir a 4ª e 5ª Fases, inserindo mais alguns horários não disponíveis para tentar nova solução. É claro que cada horário não disponível que é inserido dificulta a 4ª e 5ª Fases. Observe que, neste processo, somente a 4ª e 5ª Fases são repetidas: não é preciso voltar para a 1ª Fase, porque a distribuição que é utilizada nas repetidas tentativas da 4ª e 5ª Fases é a mesma e está gravada (ver Seção 6.1). Fica claro porque foi importante anotar o conjunto de horários não disponíveis aprovado no início, na 1ª Fase. Este conjunto representa a meta a ser alcançada (ou aproximada). Se na 4ª e 5ª Fases formos acrescentando horários não disponíveis gradativamente, mas acrescentarmos somente a partir do conjunto que anotamos, a distribuição que ficou registrada pelo programa poderá ser aproveitada (a distribuição foi obtida de modo a respeitar os máximos de aulas, que se procura manter inalterados). Mesmo assim, se eventualmente o usuário inserir um horário não disponível não previsto inicialmente (uma inserção deste tipo eventualmente pode obrigar a um ajuste no respectivo máximo de aulas) e se o programa acusar que a distribuição disponível não pode ser aproveitada (porque o máximo de aulas que foi ajustado não foi respeitado pela distribuição) o usuário pode, neste caso, retirar o horário não disponível errado e corrigir o correspondente máximo de aulas, para não ter de recomeçar pela 1ª Fase.

Um recurso importante do Prouesse (e que pode tornar desnecessárias as anotações mencionadas acima) é a possibilidade de inserir um 0 (zero) no início de uma linha informando horário não disponível. Este zero é interpretado como significando que a linha deve ser ignorada. Posteriormente, as informações da linha passam a valer, simplesmente retirando o zero. Por exemplo, a linha seguinte, encabeçada pela linha de comando hnd

0 5 3a 3 1 5

Esta linha é desprezada, por causa do zero no início. Se o zero for retirado então as informações são consideradas: Prof. de número 5 com máximo de aulas 3 na terça-feira, indisponível no primeiro e último horários deste dia (as informações sobre preenchimento da aba MÁXIMO DE AULAS estão na Seção 3.3).

SEÇÃO 7) INFORMAÇÕES COMPLEMENTARES

As informações contidas neste Manual de Instruções são assimiladas mais facilmente se paralelamente à sua leitura houver uma experimentação do programa que permita adquirir uma maior familiaridade com o mesmo. Para atingir este objetivo os procedimentos indicados na Seção 5 para ser realizados com um arquivo de exemplo podem ser importantes.

Sempre que clicamos no botão PROCESSAR, o programa solicita que seja informado um tempo de espera para o processamento da próxima fase a ser executada e que consiste numa limitação para o tempo disponibilizado para a próxima fase (se não for encontrada solução dentro deste tempo, então o processamento é interrompido). Pode ser informado um valor de 1 a 37 e o programa calcula uma potência de 2 utilizando o valor informado (somado com 25) como expoente, de maneira que se for informado um tempo de espera de 37, o programa tem um intervalo de tempo superior a um ano.

Quando o programa não obtém solução para uma fase qualquer, não é dada nenhuma informação que permita saber se o motivo foi o tempo de espera insuficiente ou se realmente não existia solução possível (impossibilidade causada pelo excesso de condições para o problema ou pelas imposições do resultado da fase anterior). Por este motivo, não é indicado, ao início de uma fase, estabelecer um tempo de espera baixo.

O programa obtém solução para um problema obedecendo estritamente aos dados informados. Por este motivo, um problema com muitas condições torna-se mais difícil: Se acrescentarmos mais condições a um problema, este problema pode demandar um tempo maior para ser resolvido ou mesmo tornar-se impossível.

Por outro lado, quando alteramos um dado de maneira a tornar uma condição menos exigente (por exemplo, relaxando de 4 para 5 o máximo de aulas de um prof. num determinado dia), o problema torna-se mais fácil e podem ocorrer as seguintes situações:

• A solução é encontrada mais rapidamente.

• Um problema que era difícil e para o qual não foi disponibilizado tempo suficiente para obter-lhe uma solução torna-se um problema mais fácil, cuja solução pode ser obtida num intervalo de tempo mais curto.

• Um problema que era impossível torna-se possível.


Ao salvar a aba RESULTADOS pode ser necessário salvar também os dados, pois as informações contidas na aba RESULTADOS estão de acordo com os dados da última execução do programa. Por exemplo, se abrirmos um arquivo de dados, alterarmos os dados, processarmos os dados e salvarmos o resultado obtido, por exemplo, na 3ª Fase, o arquivo de resultado possivelmente não estará compatível com o arquivo de dados, já que houve alteração dos dados e estes não foram salvos. Se futuramente abrirmos o mesmo arquivo de dados e o arquivo de resultado, certamente ocorrerá erro.


Procurando eliminar horários vagos:
Frequentemente, examinando os horários de aulas prontos, verifica-se a ocorrência de horários vagos para um ou outro prof., que são horários não utilizados e que não se situam nem no início nem no término do turno, obrigando o prof. a uma espera. Infelizmente, a inexistência completa de horários vagos é impossível, mas algumas medidas podem ser tomadas para evitar a ocorrência de 2 ou mais horários vagos no mesmo dia. Uma vez terminado o processo de obtenção de horários, ao examinar-se os quadros de horários obtidos, se verificarmos que houve muitos horários vagos para um prof. num determinado dia, pode-se tentar uma outra solução, impondo-se horários não disponíveis no início ou término do turno. Ao clicar em PROCESSAR, somente a 4ª e 5ª Fases são executadas, já que possivelmente a distribuição gravada (ver Seção 6.1) pode ser aproveitada. A distribuição gravada não pode ser aproveitada se ela estiver fazendo com que um prof. tenha um total de aulas num determinado dia maior que o correspondente máximo de aulas informado; neste caso, ao clicar em PROCESSAR, a elaboração de horários recomeça pela 1ª Fase. Para evitar isto, ao inserir horários não disponíveis, os correspondentes máximos de aulas devem ser ajustados, e deve-se evitar que um máximo de aulas fique menor que a quantidade de aulas do correspondente prof. no correspondente dia (esta quantidade de aulas pode ser identificada, consultando-se o quadro de horários do prof.). Felizmente, o Prouesse disponibiliza na aba DICAS, para cada prof., para cada dia, o máximo de horários não disponíveis que podem ser inseridos e permitem o aproveitamento da última distribuição obtida (distribuição gravada).

Para que o operador do Prouesse possa melhorar e obter bons resultados com o programa, é preciso que o mesmo esteja familiarizado com o programa e ciente de como ele funciona, por isto faremos uma recapitulação das informações mais importantes:

Ao final da 3ª Fase, as aulas de cada curso  estão distribuídas entre os 5 dias da semana, ou seja,  se definiu para cada dia quais cursos funcionarão e quantas aulas estariam previstas para os cursos. A distribuição que foi encontrada é gravada pelo programa.

Na 4ª Fase, as aulas previstas para segunda-feira e terça-feira são alocadas nos horários, finalizando a obtenção dos horários das aulas para estes dias. Nesta fase a distribuição gravada é alterada,  que aulas podem ser transferidas de um dia para o outro (entre segunda, terça e quarta-feira).

Na 5ª Fase, as aulas previstas para quarta, quinta e sexta-feira são alocadas nos horários. Nesta fase a distribuição gravada é alterada,  que aulas podem ser transferidas de um dia para o outro.

Somente os horários não disponíveis de segunda-feira e terça-feira podem afetar a 4ª Fase e somente os horários não disponíveis de quarta, quinta e sexta-feira podem afetar a 5ª Fase.

Acima vimos uma situação em que a distribuição gravada não pode ser aproveitada (quando um máximo de aulas não é respeitado). Para saber quantas aulas a distribuição está lançando para cada prof., em cada dia, basta consultar o quadro de horários deste prof. na aba RESULTADOS. Para simplificar, podemos dizer que a distribuição gravada poderá ser aproveitada se, ao impusermos horários não disponíveis para um prof., num determinado dia, não impusermos mais horários não disponíveis que o total de horários mostrados como ociosos para este prof., neste dia. Ou se preferir, o operador pode consultar a aba DICAS, que disponibiliza  para cada prof., para cada dia, o máximo de horários não disponíveis que podem ser inseridos e permitem o aproveitamento da última distribuição obtida (distribuição gravada).

Causas comuns de erro:

  • Não preencher a primeira linha da aba RESULTADOS com 0 (zero) ao iniciar a solução de um problema (1ª Fase).

  • Não preencher as abas com os dados no formato correto.

Porém estes erros não causam problemas, pois o programa os identifica e preenche a aba ERROS com os erros encontrados, para que sejam corrigidos.

Sugestões e comunicações de eventuais erros encontrados no programa PROUESSE são bem vindas e podem ser encaminhadas para rstosleite@gmail.com.

MongoDB Logo MongoDB