3 DESENVOLVIMENTO
Neste capítulo é contextualizado o problema, e o sistema de trabalho de uma empresa têxtel que opera com setor de tingimento próprio. Será mostrada, de forma objetiva, a solução desenvolvida para o problema descrito neste capítulo, também serão mostrados os testes realizados e a conclusão sobre seu desenvolvimento.
de malhas ou tipo de malhas compatíveis (compatíveis são as malhas que possuem a mesma composição de fibras);
• A máquina deve suportar o tingimento do tipo de material da OTN;
• As OTN de maior prioridade devem-se manter nas primeiras posições da fila de alocação;
• Não se pode exceder o volume máximo da máquina;
• Na fila de alocação deve-se manter uma regra para ordem de cores:
o Dar preferência para continuar com a mesma cor para o próximo tingimento, Figura 14 item (a);
o Se o próximo tingimento utilizar outra cor, que seja a mais próxima da anterior, Figura 14 item (b);
o Se não houver cor semelhante, qualquer cor pode ser escolhida. O operador da máquina deve ter atenção, pois provavelmente deverá ser feito um procedimento de lavagem na máquina para próxima cor por causa da variação, Figura 14 item (c).
Figura 14. Detalhe sobre a seqüência de cores
O processo de alocação das máquinas de tingimento acontece no inicio de cada semana após as ordens de tingimento serem gerados pelo sistema interno da empresa, este processo era realizado em um processo manual. O líder do setor analisa os lotes liberados e passa para o operador uma listagem de quais OTN seriam mais importantes alocar. Com isto eles são alocados conforme suas prioridades, mas por serem um grande volume de máquinas e lotes, o operador não tem tempo disponível para realmente analisar e distribuir os lotes da melhor forma possível. Com isto acontecem desperdícios de máquinas que poderiam ser mais aproveitadas e até retingimentos de materiais por uma alocação indevida. Esses desperdícios e custos extras acabam sendo repassados para o produto final, elevando seu preço.
O processo de alocação das OTN para as máquinas possui várias restrições que tornam esta tarefa difícil, isso ocorre principalmente se a pessoa responsável pelas alocações é iniciante, pois ela deve consultar planilhas para saber quais máquinas estão disponíveis, suas capacidades, quais malhas cada uma pode tingir, esses trabalho requer muita atenção e qualquer erro compromete um tingimento inteiro. A experiência é um diferencial para realizar a alocação mas mesmo para pessoas com grande conhecimento no assunto complica quando a quantidade de máquinas é elevada.
Atualmente o operador dispõe de um sistema procedural criado para auxiliá-lo, ele gera uma lista de todas as OTN para alocar e uma a uma busca a melhor opção entre as máquinas, mas este programa possui problemas principalmente na parte de restrições agrupando materiais não cadastrados como compatíveis e também alocando em máquina tipos de malhas que foram restritos para ela. Fazendo com que o operador opte pelo programa de alocação manual caso seja uma alocação pequena por medo de erros do outro programa.
3.2 SISTEMA DESENVOLVIDO
Para o processo de alocação das máquinas de tingimento existem inúmeras variáveis por parte das máquinas e das malhas que deixam a aplicação difícil de ser implementada, neste projeto foi implementado apenas a parte de preenchimento das máquinas com malha suficiente para o tingimento e uma preocupação inicial com as seqüências das cores, onde cores iguais ou parecidas
Para o projeto foi desenvolvido um SMA com dois tipos distintos de agentes:
• Agente Máquina: O agente representa a máquina de tingimento, cada máquina terá seu respectivo agente tendo nele as informações pertinentes a mesmas como seu peso, tempo de produção, seqüência de tingimento e a ultima cor utilizada; e
• Agente Controle: O agente terá uma responsabilidade mais de controlar o consumo dos recursos, nele será armazenado todas as OTN disponíveis para alocação e com uma comunicação realizada diretamente com as agentes máquinas são distribuídos os recursos conforme a necessidade.
A arquitetura do sistema pode ser visualizada na Figura 15.
Figura 15. Arquitetura do sistema
Nas próximas seções serão mostrados detalhes do projeto, onde se destaca: a descrição dos requisitos do sistema, a forma de reconhecimento das cores, descrição dos agentes com seus respectivos diagramas de atividade e uma demonstração do funcionamento da ferramenta com um teste real.
3.2.1 Requisitos do sistema
Foram analisados todos os requisitos funcionais e não funcionais do sistema e junto com o supervisor do setor foi levantado todas as regras de negócio necessárias para a alocação de OTN que são os detalhamentos das máquinas até tipo de malhas compatíveis e restrições de cores. Este detalhamento segue nos próximos itens.
3.2.1.1 Requisitos Funcionais
Nesta seção apresenta as funções que o sistemas deve possuir.
RF01 – o sistema deve realizar a alocação automaticamente dos lotes de malha para o tingimento.
3.2.1.2 Requisitos Não Funcionais
Nesta seção são apresentados os requisitos não funcionais da plataforma de desenvolvimento, como, ferramentas e banco de dados que será utilizada e outros detalhes técnicos.
RNF01 – a linguagem de programação utilizada será Java.
RNF02 – será utilizado de sistemas multiagentes para a alocação das máquinas.
RNF03 – será utilizada da plataforma JADE para a construção do sistema multiagentes.
RNF04 – o sistema utilizará banco de dados ORACLE.
RNF05 – as características das OTN e máquinas serão carregadas do banco de dados existente da empresa.
3.2.1.3 Regras de Negócio
Nesta seção apresenta todas as regras e restrições que devem ser analisados no decorrer do programa para evitar alocações indevidas e erros no sistema.
RN04 – o peso total da malha a ser alocada não pode ultrapassar a capacidade máxima cadastrada da máquina.
RN05 – deve se tentar manter sempre a mesma intensidade de cor no próximo tingimento alocado.
RN06 – se não for possível manter a mesma intensidade de cor na alocação, uma intensidade de cor semelhante deve ser adotada.
RN07 – se não for possível alocar nem uma intensidade de cor semelhando, pode ser colocada qualquer outra.
RN08 – um tingimento só é aceito pela máquina se for maior ou igual a noventa por cento (90%) de sua capacidade.
3.2.2 Reconhecimento da cor
Para o reconhecimento de cores próximas foi adotada a utilização do padrão de cores PANTONE já disponível na empresa onde serão classificadas todas as cores existentes no sistema pelo padrão de numeração da PANTONE.
A PANTONE® foi uma marca desenvolvida pela Pantone Inc, que é sediada em Carlstadt, Nova Jersey, EUA. A marca hoje é considerada uma autoridade em cores, é mundialmente conhecida pelos sistemas e tecnologias de ponta criada para os processos que envolvem cores com reproduções precisas, nas etapas de seleção, comunicação e controle de cores (PANTONE, 2008).
Em 1963, Lawrence Herbert, fundador da PANTONE®, criou um sistema inovador de identificação, combinação e comunicação de cores para resolver problemas associados com produção precisa de combinações de cores na comunidade de artes gráficas. Sua visão de que o espectro de cores é visto e interpretado diferentemente por cada indivíduo conduziu à invenção do PANTONE MATCHING SYSTEM, um manual de cores padrão em formato de leque (PANTONE, 2008).
A Pantone Inc. criou uma maneira prática para ser verificado as cores de produtos têxteis.
Cada cor tem uma localização privilegiada no sistema de cor, que permite ser definida com precisão.
Um número com seis dígitos é atribuído para cada cor e no final a sigla (TC) que especifica a cor dentro da paleta de cores para o ramo têxtil conforme Figura 16.
Figura 16. Exemplo de numeração PANTONE Fonte: PANTONE (2008).
Ao passo que cada conjunto de dois dígitos possui um significado específico. Para o projeto será considerado apenas os dois primeiros dígitos, que representam a intensidade da cor, isto foi decido junto com a pessoa responsável pelo processo, pois foi identificado que já é o suficiente para identificação das cores claras e escuras.
Os primeiros dois dígitos (Linghtness) refere-se à intensidade (clara ou escura). O sistema PANTONE possui nove níveis de luminosidade designados pelos números 11 ao 19. Isso garante que todos os valores entre claros e escuros possam ser determinados rapidamente pelos dois primeiros dígitos (Figura 17).
Figura 17. Lightness Fonte:PANTONE (2008).
Após ser analisado junto com a pessoa responsável pelo desenvolvimento de cores da empresa qual poderia ser considerado cores similar, chegou-se a uma conclusão que a cor que possui uma intensidade acima ou abaixa da intensidade da cor pedida possa ser considerada similar, assim será usado este código PANTONE já cadastrado para no sistema interno da empresa para conferência de cores similares.
3.2.3 Agentes
Para o desenvolvimento do projeto foram criados dois tipos de agentes com características distintas. Um tipo esta voltado mais no controle e distribuição dos recursos enquanto o outro é a representação da máquina tendo uma para cada máquina no sistema. Neste subseção será feita uma descrição de características e funcionalidades.
Na Figura 18 é possível visualizar a interface do JADE com os agentes do sistema instanciados, nela tem-se dois Containers iniciados, o “Main-Container” contendo todos os agentes padrões de controle da ferramenta JADE (agentes esses sempre existentes para o correto funcionamento do JADE) e o segundo Container, chamado “Container-1”, foi criado pelo programa ao ser iniciado e nele são criados todos os agentes do sistema (dentro deste container existirão dois tipos de agente o agente “Controle” que terá apenas uma instancia e o outro tipo que representa a máquina ele é iniciado com o nome da máquina e terá um exemplar para cada máquina do sistema).
Figura 18. Visualização da interface do JADE com os agentes instanciados
3.2.3.1 Agente Máquina
O agente Máquina é a representação da máquina em si. Ele é instanciado no inicio do programa sendo criado um para cada máquina existente. Ele é carregado com as informações pertinentes a máquina, como sua capacidade suportada, se possui algum tingimento já programando, tempo de serviço e ultima cor de tingimento.
Na Figura 19 é possível visualizar o início do agente Máquina. O método “void setup()” é executado e assim recebendo todos os parâmetros necessários para o agente. Os parâmetros estão detalhados a seguir:
• capacidade: trata-se da capacidade máxima que a máquina suporta;
• prioridade: item utilizado para o agente controle, ele é apenas um seqüencial dado para
• ultimaSequencia: com a máquina já possuindo alguma alocação ele registrará quantas partidas ela possui.
Figura 19. Inicio do Agente Máquina
Dentro do método “void setup()”, após receber os parâmetros, o agente executa duas operações, sendo a primeira registrar-se no Diretório Facilitador (DF), mais conhecido como serviço de páginas amarelas, deixando-se assim visível para o agente Controle buscar seus serviços.
O registro no DF foi implementado conforme a Figura 20.
Figura 20. Registro do Agente Máquina no DF
A segunda operação que ele realiza é iniciar o comportamento do agente Máquina, ele possui apenas um comportamento que é responsável pela comunicação com o agente Controle.
Nesta comunicação ele realiza todas as funções necessárias para a troca das mensagens, solicitando recursos, aceitando ou rejeitando requisições e confirmando alocações bem sucedidas. A seguir é demonstrado em detalhes o funcionamento do agente Máquina com um diagrama de atividade (Figura 21) e uma descrição detalhada de suas funções.
Após o agente Máquina ser instanciado e junto com o comportamento iniciado, ele fica em estado de espera aguardando as mensagens vindas do agente Controle. Neste estado ele pode receber três tipos diferentes de mensagens, que são:
• Mensagem com performativa CFP: nesta opção o agente Controle pergunta para o agente Máquina se ele é capaz de fazer uma alocação. Nesta mensagem ele recebe como conteúdo o peso da OTN que se tem intenção de alocar. O agente guarda o peso e compara com sua própria capacidade, se sua capacidade for inferior ao informado ele envia uma mensagem recusando, tendo essa mensagem como performativa REFUSE.
Caso sua capacidade seja maior ou igual ao peso da OTN, o agente constrói uma mensagem com todas as suas características como conteúdo e com uma performativa AGREE que é retornada para o agente Controle; ou
• Mensagem com performativa INFORM: nesta opção o agente Controle, depois de identificar qual máquina é mais apta para alocação, envia uma mensagem para a mesma.
A máquina recebe esta mensagem e extrai as informações da OTN de seu conteúdo para iniciar o processo de alocação. Na sessão 3.2.5 será demonstrado o processo de alocação pelo agente Máquina; ou
• Mensagem com performativa REQUEST e o conteúdo da mensagem é “ENCERRA”:
nesta opção o agente controle está finalizando os agentes Máquina e a alocação de todas as OTN já foram realizadas e ele está encerrando o sistema.
Quando o Agente máquina recebe a mensagem com uma OTN como conteúdo, o processo de alocação para aquela máquina é iniciado. Ele guarda as características da OTN recebida e com as informações armazenadas é comparado sua capacidade com o peso recebido. Caso o peso complete perfeitamente sua capacidade, uma mensagem é gerada com o conteúdo “SELECIONADAS”, mais o número da OTN, e remetida para o agente Controle confirmando a alocação que é encerrada para aquela OTN.
Se o peso ainda for menor que a capacidade da máquina o agente adota outro procedimento.
Ele calcula o peso que corresponde com a diferença entre a capacidade da máquina e o peso da OTN e gera uma mensagem para o agente controle com o conteúdo “NECESSITO”, mais a diferença calculada, e aguarda o retorno do agente Controle.
O agente Controle pode responder de duas formas diferentes dependendo de como está a situação da lista de OTN pendentes, e as duas formas podem ser:
• Pode receber uma mensagem com seu conteúdo como “ACABOU”: quando isto acontece é porque não existe mais nenhuma opção de OTN que possa preencher na alocação. Quando isto ocorre o agente Máquina verifica a porcentagem de preenchimento que o peso alcançou pelas OTN na capacidade total da máquina. Caso seja maior ou igual a noventa por cento (90%) ele ainda aceita a alocação gerando a mensagem com conteúdo “SELECIONADAS” mais o número da OTN. Caso contrário, ele não pode aceitar gerando uma mensagem com seu conteúdo como “RECUSADO”.
Quando isto acontece, o agente Controle procura por outra máquina para realizar a alocação da OTN; ou
• Pode receber uma mensagem tendo como conteúdo outra OTN: as informações da nova OTN são armazenadas e então é realizada uma comparação verificando se o peso já selecionado mais o novo peso passam da capacidade da máquina. Se o peso total estiver dentro da capacidade, a nova OTN também é guardada junto com a outra, senão é simplesmente ignorada e uma nova solicitação de peso é realizada.
As solicitações continuam com a diferença de peso até a soma das novas OTN preencherem completamente a capacidade da máquina ou até quando o agente controle informar que não possui mais OTN para enviar. Assim ele verifica se o peso total acumulado para a alocação chegou a ser maior ou igual a noventa por cento (90%) da capacidade da máquina. Se alcançou a porcentagem mínima, o agente gera uma mensagem com o conteúdo “SELECIONADAS” mais a listagem dos números de todas as OTN que foram utilizadas para o acúmulo do peso. Se não satisfez a porcentagem o agente recusa a alocação da OTN.
3.2.3.2 Agente Controle
O agente Controle tem por objetivo controlar as alocações realizadas nas máquinas. Ele é encarregado de se comunicar com as máquinas carregadas no sistema e trocar mensagens entre elas
Figura 22. Inicio do Agente Controle
Ao executar o método Setup() o agente Controle, após receber seus parâmetros, chama pelo Método “ArrayList<String> carregaMaquinas()” que pode ser visualizado na Figura 23.
Figura 23. Método carregaMaquinas() do Agente Controle
Com este Método o agente Controle busca no DF todas as máquinas que foram instanciadas e registradas gerando então uma listagem com o nome de todas as máquinas do sistema e retornando para o método “void setup()” onde ele é armazenado. Esta informação será utilizada no processo para enviar mensagens para os agentes Máquina.
Após gerar a listagem dos agentes Máquina existentes um comportamento é iniciado no agente Controle. Este comportamento terá a responsabilidade de se comunicar com os agentes Máquina e distribuir todos os recursos entre eles até alocar todas as OTN. Na Figura 24 está o
diagrama de atividade do agente Controle demonstrando seu funcionamento juntamente de seu comportamento. Os próximos parágrafos são dedicados ao detalhamento de seu funcionamento.
A partir da criação e inicialização do comportamento do agente Controle, inicia-se o processo de alocação dos recursos. Esta operação não finalizará até todas as OTNs da listagem serem alocadas. A lista de OTNs está ordenada de forma crescente pelas prioridades das OTNs e o processo de alocação chama um método que varrendo a listagem retorna a OTN de maior prioridade que ainda não foi alocada. Com esta informação o agente Controle gera uma mensagem com a performativa CFP e seu conteúdo é o peso da OTN. Nesta mensagem é adicionado como destinatário todas as máquinas do sistema e a mensagem é enviada. O agente Controle analisa a resposta de todos e os agentes Máquina recebem a mensagem e, dependendo das condições explicadas anteriormente, retornam com mensagens de performativa AGREE ou REFUSE. O agente Controle ignora todas as máquinas que recusaram (tiveram como mensagem de retorno a performativa REFUSE) e gera uma listagem de possíveis máquinas para alocar com as que aceitaram, recebendo e armazenando as informações das máquinas contidas no conteúdo das mensagens. Caso nenhuma máquina retorne positivamente para a alocação solicitada, a OTN é descartada por não ter máquinas compatíveis e o processo se inicia buscando uma nova OTN para alocação na listagem.
Com a listagem das possíveis máquinas para alocar, o agente Controle chama um método de nome “List<Maquina> ordenaPrioridadeTempo (List<Maquina> lMaquinaTemp, Integer pIni, Integer pFim)”. Esse método recebe como parâmetros a listagem das possíveis máquinas para alocação e a OTN que está sendo alocada no momento. Com estas informações ele gera valores de prioridade para cada máquina sobre a semelhança delas com a OTN, e levando em consideração também o tempo de produção das mesmas. A operação pode ser observada na Figura 25, mostrando a forma como o método funciona.
Figura 25. Ilustração do funcionamento do método ordenaPrioridade().
Com a listagem das máquinas ordenadas pela prioridade gerada, o agente controle irá iniciar a tentativa de alocação pela máquina de maior prioridade (menor número). Ele gera uma mensagem onde seu conteúdo são todas as informações da OTN e envia para o agente Máquina escolhido. Ao enviar a mensagem para o agente Máquina, o agente Controle espera por sua resposta, sendo que essa pode vir de três formas diferentes, podendo ser:
• Uma mensagem onde seu conteúdo é “RECUSADO”: por algum motivo a OTN não satisfez as necessidades na máquina enviada e a mesma está recusando. Quando isto acontece a máquina é descartada da listagem para esta alocação e o agente Controle busca pela próxima máquina da listagem, iniciando uma nova tentativa de alocação para a OTN; ou
mesmas características da enviada anteriormente e que seu peso seja menor ou igual ao solicitado. Caso encontre, o agente constrói uma mensagem tendo como conteúdo a nova OTN encontrada e envia para o agente Máquina esperando novamente pelo seu retorno.
Caso nenhuma satisfaça os quesitos, o agente controle cria uma mensagem com o conteúdo “ACABOU” para a máquina, informando que não possui mais nenhuma OTN com as mesmas características; ou
• A última forma de retorno pode ser uma mensagem onde seu conteúdo tenha como inicio “SELECIONADAS”: quando isto acontece o agente Máquina conseguiu satisfazer todas as condições para a alocação, retornando então para o agente Controle a OTN, ou a listagem das OTN que utilizou para alocação. O agente Controle lê o conteúdo da mensagem e marca todas as OTNs como alocadas, finalizando uma alocação bem sucedida.
Após ser feita a alocação o agente Controle inicia novamente o ciclo buscando pela próxima OTN livre na listagem e assim procedendo por todos os passos demonstrados anteriormente até não restar mais OTNs livres. Quando não existir mais OTNs livres para alocação, o agente controle cria uma mensagem onde o destinatário são todas as máquinas e informa que o processo de alocação foi encerrado, finalizando assim todos agentes.
3.2.3.3 Visualização dos resultados
Após o processo de alocação ser executados e todas as ordens de tingimentos alocadas, é importante uma fácil visualização dos resultados. Mostrar os resultados obtidos de forma gráfica é a melhor opção para o entendimento do operador. Com este recurso pode ser visto a orden dos tingimentos e o tempo necessário para cada tingimento conforme Figura 26.
Na tela representada pela Figura 26, as máquinas são adicionadas horizontalmente e dentro de cada linha que as representa estão os tingimentos, eles são criados com um tamanho que equivale ao seu tempo de processo, isso vale para todas as outras gerando assim uma estimativa de inicio de fim dos tingimentos. Com isto o operados consegue identificar quais são as próximas partidas para deixarem prontas ao lado da máquina.