Resumo
Apresenta-se um método para a indução de classificadores destinados a guiar a
busca por soluções para problemas de escalonamento. O método é aplicado para a
construção de um escalonador de tarefas periódicas com relações de precedência.
Os experimentos discutidos mostram que o escalonador é capaz de aprender a
partir de experiências passadas, melhorando progressivamente o seu desempenho.
Plavras-chave
Busca heurística, indução de árvores de decisão, C4.5, escalonamento, sistemas
de tempo real, aprendizado de máquina.
1. Introdução
Os problemas de escalonamento de interesse prático são em sua maioria NP-
completos (Blazewicz, et al.,1983), motivo pelo qual costumam ser solucionados usando
métodos de busca guiados por regras heurísticas que procuram soluções factíveis, não
necessariamente ótimas.
A aplicação de heurísticas no processo de busca por uma solução procura
reduzir a porção do espaço do problema a ser percorrido. Pode-se dizer que regras heurísticas
classificam os nós a examinar em promissores e não promissores, podendo associar-lhes
medidas de benefício ou custo, que permitem selecionar para expansão o nó que oferece o
maior benefício ou o menor custo.
Uma parte importante dos trabalhos na área de escalonamento heurístico está,
portanto, associada à identificação de heurísticas que reduzam o tempo de busca e aumentem
a qualidade do escalonamento produzido. A determinação dessas heurísticas é um processo
em grande medida ad hod onde, à medida que aumenta o número de fatores a considerar,
aumenta também a sua complexidade (Zhang et. al., 2001).
A literatura evidência que as técnicas de aprendizado de máquina, como o Raciocínio
Baseado em Casos (RBC), a indução de árvores de decisões e regras e as redes neurais
artificiais podem ser usadas com sucesso para gerar classificadores de forma automática ou
semi-automática. Segundo Langley and Simon (1995), essas técnicas apresentam resultados
muito semelhantes em termos de precisão. No entanto, apenas a indução de árvores de decisão
e regras gera modelos explícitos que são relativamente fáceis de analisar por seres humanos,
permitindo que se entenda o processo de classificação.
O coração de um sistema de indução de regras é um algoritmo de indução. Este, a
partir de uma matriz (grade) de conhecimento de atributos, valores e seleções, gera as regras
correspondentes. Diversos algoritmos com esse propósito existem, sendo populares o ID3 e
suas versão mais recente o C4.5 [Quinlan, 1993].
O princípio do ID3 é a geração de uma árvore de decisão a partir de uma tabela de
conhecimento, utilizando o conceito de “conteúdo de informação” da teoria da informação. A
aparência final da árvore de decisão depende da ordem em que os atributos forem escolhidos
para fins de seleção e irá afetar as regras resultantes. O ID3 é capaz de derivar uma árvore de
seleção mínima que, por sua vez, irá minimizar a complexidade das regras, pois o número de
testes necessários para fazer uma classificação será o menor possível. O algoritmo C4.5
estende o ID3 a fim de tratar conjuntos de treino com registros contendo valores
desconhecidos para alguns atributos, tratar atributos com intervalos contínuos, fazer a poda
de árvores de decisão, reduzindo a sua profundidade, e gerar regras a partir das árvores de
decisão.
A Indução automática oferece a possibilidade de deduzir conhecimento novo, pois
pode-se listar os fatores que influenciam uma decisão, sem entender os seus impactos, e
induzir regras que funcionem adequadamente e possam ser usadas em situações novas.
O objetivo deste trabalho é desenvolver um método para o aprendizado automático de
heurísticas para dirigir algoritmos de busca em problemas de escalonamento. Para testar o
método, foi escolhido como problema alvo o escalonamento de tarefas periódicas
independentes em um sistema monoprocessador. As tarefas são compostas de subtarefas1 não
preemptíveis que apresentam relações de precedência e restrições temporais (tempo de
execução, instante de pronto e prazo de término).
Tarefas são representadas por grafos, onde os vértices, ou nós, representam as
subtarefas e os arcos as relações de precedência entre elas. Os atributos dos nós indicam o
tempo de execução, o instante de pronto, o prazo de término e o prazo da subtarefa
correspondente.
2. O algoritmo de busca
O escalonador de tarefas foi implementado em C++, usando o paradigma de
programação orientada a objetos. O algoritmo de busca implementado pelo escalonador pode
ser descrito, em sua essência, pelo algoritmo geral de busca mostrado na figura 1 e
informalmente descrito a seguir.
A função BUSCA-GERAL recebe como argumentos uma descrição do problema a
resolver e a função ENFILEIRA, responsável por inserir novos nós de busca na lista de nós a
1
Muitas vezes, o termo tarefa será usado no texto como sinônimo de subtarefa. O contexto deverá permitir
estabelecer a devida distinção.
visitar, e retorna um nó solução ou uma indicação
de falha, caso uma solução não seja encontrada.
TESTE-DO-OBJETIVO verifica se o 1
ESTADO representado por um determinado nó é
um estado solução. A partir de um dado nó de
busca e usando os OPERADORES válidos para o 2 3
problema (grafo que descreve o conjunto de tarefas
a escalonar), EXPANDE deriva novos nós.
Como a remoção da fila de nós a visitar
(nós) é sempre feita a partir de seu início, a ordem 4 5 6 7
em que os nós são visitados depende de como
ENFILEIRA insere os novos nós na fila nós. Em
buscas não informadas, os nós serão inseridos no
8 9
início da lista, quando se tratar de uma busca em
profundidade, e no final, quando se tratar de uma
busca em largura. Em buscas heurísticas, a
inserção se dará no início da fila, de acordo com a 10
ordem determinada pelas heurísticas empregadas.
Um nó da árvore de busca2 indica o estado
da busca em um determinado instante. Nesse Figura 2: Exemplo de Árvore de
instante, foi concluída a execução de uma tarefa e Busca em Profundidade
há uma lista de tarefas não executadas, uma lista de
tarefas executadas, uma lista de tarefas esperando a
que chegue o seu instante de pronto e uma listas de tarefas prontas para execução (tarefas
cujos predecessores já terminaram e cujo instante de pronto é maior ou igual ao instante
atual).
A expansão de um nó é feita a partir da lista de tarefas prontas. Para cada tarefa
pronta, é gerado um novo nó que representa o instante em que essa tarefa termina a sua
execução. Ou seja, na geração de cada nó, o instante atual do nó pai é acrescido do tempo de
execução da tarefa pronta escolhida e, a partir disso, atualizadas as diversas listas de tarefas.
O TESTE-DO-OBJETIVO, aplicado a um nó, será bem sucedido se esse nó
representar um estado em que todas as tarefas já foram escalonadas.
A aplicação do algoritmo de busca a um problema produz uma árvore de busca. Por
exemplo, a figura 2 ilustra uma dessas árvores, para um problema hipotético, usando a busca
em profundidade. Os rótulos no centro dos nós indicam a ordem em que foram gerados.
Partindo do nó 1, as setas indicam a ordem em que os nós foram visitados até chegar ao nó
solução (10). Os nós que estão no caminho que conduz a uma solução foram assinalados em
negrito.
2
Não se deve confundir um nó do grafo que representa o problema de escalonamento, que descreve a uma
subtarefa, com um nó da árvore de busca, que descreve o estado da busca por uma solução (um escalonamento
factível) em um determinado instante.
Para induzir os classificadores que embutirão essas heurísticas, usando algoritmos de
indução de árvores de decisão e regras, precisamos de exemplos de escolhas bem sucedidas e
mal sucedidas. As bem sucedidas podem ser determinadas seguindo o caminho que levou ao
nó solução. Cada nó nesse caminho representa uma decisão correta. Os exemplos de escolhas
mal sucedidas resultam dos nós que não conduziram a uma solução.
Contudo, nem todos os nós que conduziram ou não a uma solução são de fato
exemplos interessantes. Para que se possa afirmar que uma dada decisão foi "errada", é
preciso que houvesse outras que poderiam ter sido tomadas em seu lugar e que possam ser
ditas "corretas", e vice-versa. Deste ponto de vista, na figura 2, os nós 3 e 9 são bons
exemplos de decisões corretas e os nós 2 e 8 de decisões erradas.
Um nó da árvore de busca está associado à execução de uma determinada tarefa da fila
de tarefas prontas do nó pai. Logo, um exemplo deve capturar as características relevantes
dessa tarefa frente às demais tarefas prontas. Nos experimentos descritos neste artigo, isso é
feito através dos atributos apresentados na tabela 1.
Atributo Critério
TempoComp-C tempo de computação
Prazo-C prazo
Sucessores-D número de subtarefas sucessoras diretas
TempoCompSuc-D somatório dos tempos de computação das subtarefas sucessoras diretas
Predecessores-D número de subtarefas predecessoras diretas
TempoCompPred-D somatório dos tempos de computação das subtarefas predecessoras diretas
MenorInstPartida-D menor instante de partida: indica o instante mais cedo em que a subtarefa
poderá ser executada. É calculado levando em conta os instantes de pronto
e de computação das predecessoras.
MaiorInstPartida-C maior instante de partida: indica o instante mais tarde em que deverá ser
iniciada a execução da tarefa, sem comprometer a execução das tarefas
sucessoras. É calculado levando em consideração os tempos de execução e
prazos das sucessoras
Status Atributo categórico. Indica se se trata de um exemplo de "sucesso" ou
"fracasso".
Tabela 1: Estrutura de um exemplo.
Na tabela 1, cada atributo indica a posição da subtarefa pronta escolhida para execução
relativamente às demais subtarefas prontas. "-C" indica que as subtarefas foram ordenadas em
ordem crescente e "-D" decrescente. Por exemplo, o exemplo (2,1,3,4,1,1,2,1,sucesso)
corresponde a uma decisão que conduziu a um escalonamento factível. A tarefa escolhida era
a de segundo menor tempo de computação, a de menor prazo, a terceira em número de
sucessoras etc.
5. Conclusão
Os experimentos discutidos neste artigo mostraram que a indução automática de
classificadores é um método de grande potencial para a construção de escalonadores para
sistemas de tempo real. O método apresentado permite construir sistemas de busca que à
medida que são executados podem melhorar o seu desempenho, a partir da análise dos
sucessos e fracassos verificados na solução de problemas passados.
Foi possível constatar que o classificador induzido levou a uma significativa redução
do número de nós de busca produzidos e visitados, reduzindo consequentemente o consumo
de memória e o tempo de execução do escalonador.
Os experimentos discutidos comparam o desempenho do escalonador usando as
heurísticas aprendidas com relação à escolha aleatória do próximo nó a examinar. Esses
experimentos permitiram verificar a capacidade de aprender do método empregado, mas não a
qualidade das heurísticas aprendidas. Em trabalhos futuros, a comparação deverá ser feita
também com outras heurísticas discutidas na literatura.
A comparação e a integração do método indutivo aqui descrito com outras abordagens
da área de aprendizado de máquina, particularmente o raciocínio baseado em casos (Adán
Coello e Camilo dos Santos, 1999), deverá também ser objeto de trabalhos futuros.
Finalmente, deve-se salientar que o método de produção de heurísticas para o controle
de busca apresentado neste trabalho transcende os problemas de escalonamento de sistemas
de tempo real, podendo ser usado em outros contextos que possam ser formulados como
problemas de busca.
Referências
Adán Coello, J.M., Santos, R. C., Integrating CBR and Heuristic Search for Learning and
Reusing Solutions in Real-Time Task Scheduling. Lecture notes in computer science; Vol.
1650. Springer-Verlag, Germany. pp. 89-103. 1999.
Blazewicz, J., J.K. Lenstra and A.H.G.R. Kan. (1983). "Scheduling Subject to Resource
Constraints: Classification and Complexity". Discrete Applied Mathematics 5, 11-24.
Langley, P. and H. A. Simon. Applications of Machine Learning and Rule Induction. Comm.
of the ACM, nov. 1995.
Quinlan, J.R., C4.5: Programs for machine learning. Morgan-Kaufmann, 1993.
Russell, S., Norvig, P. Artificial Intelligence: A Modern Approach. Prentice Hall, 1995.
Zhang, W., Dechter, R., Korf, R. E. (eds.). Special Issue: Heuristic Search in Artificial
Intelligence. Artificial Intelligence, Vol. 129, nos. 1-2, june 2001.