Modelagem do Problema de Configuração de Prateleiras Utilizando

Propaganda
Modelagem do Problema de Configuração de Prateleiras Utilizando
Programação em Lógica por Restrições
Vinicius Oliverio1, Rafael S. Parpinelli1, Claudio C. de Sá1
1
Departamento de Ciência da Computação – Universidade do Estado de Santa Catarina
(UDESC) – Campus Universitário Prof. Avelino Marcante s/n - Bairro Bom Retiro –
CEP 89223-100 – Joinville – SC – Brasil.
[email protected], {dcc2rsp,claudio}@joinville.udesc.br
Abstract. The current article proposes a solution to the rack configuration
problem, proposed by Pascal Van Hentenryck, using constraint logic
programming, where the problem consists in connecting a set of electronic
cards in racks with electronics sockets, where each connected card uses one
socket and all cards must be connected, having as final goal to minimize the
cost of the racks. Basing in the constraints the problem could be modeled and
implemented, obtaining a fast and concise solution for this problem.
Keywords: Programming, Constraints, Logic, Artificial Intelligence.
Resumo. O presente trabalho propõe uma solução para o problema de
configuração de prateleiras, proposto por Pascal Van Hentenryck, utilizando
programação em lógica por restrições, onde esse problema consiste em
conectar um grupo de cartões eletrônicos em prateleiras com conectores
eletrônicos, onde cada cartão conectado na prateleira usa um conector e
todos os cartões devem ser conectados, tendo como objetivo final minimizar o
custo das prateleiras. Com base nas nessas restrições o problema pôde ser
modelado e implementado, obtendo uma solução rápida e concisa para este
problema.
Palavras-chave: Programação, Restrições, Lógica, Inteligência Artificial.
1. Introdução
O presente artigo traz uma proposta de modelagem do problema de configuração de
prateleiras utilizando programação em lógica por restrições, do inglês Rack
Configuration Problem, problema proposto por Pascal Van Hentenryck em 1999. Esse
problema consiste em conectar um grupo de cartões eletrônicos em prateleiras com
conectores eletrônicos. Cada cartão conectado na prateleira usa um conector
[Hentenryck 1999].
O objetivo desse artigo é propor uma solução para esse problema utilizando a
programação em lógica por restrições (PLR). A PLR é um paradigma de resolução de
problemas, o qual utiliza a restrição no domínio dos valores das variáveis, na
propagação de novos estados em seu processo de busca de uma solução.
Consequentemente, há uma redução no espaço de estados que o problema pode assumir,
haja visto que as restrições atuam sob a propagação na busca. Sob este paradigma, o
projetista modela o problema declarando relações entre os objetos, de modo que o
programa possa garantir que todas as relações são mantidas [Rossi1999].
O problema é modelado com base nas restrições, e depois de modelado deve ser
implementado utilizando PLR, para posteriormente ser realizada uma experimentação e
assim é possível comprovar se o algoritmo é eficiente, onde os testes são realizados com
alguns casos retirados da literatura.
2. Programação em Lógica por Restrições
Os programas de PLR são declarativos e permitem descrever vários problemas reais
somente com a utilização de restrições. Essas são declarações que afirmam ou
explicitam alguma relação entre as variáveis que modelam o problema. Mais
precisamente, cada restrição especifica uma relação entre um subconjunto de objetos do
problema, onde, cada objeto tem um conjunto de valores possíveis. Deste modo uma
restrição restringe o espaço de possibilidades para um objeto [Rossi1999].
A descrição de um problema como um conjunto de restrições é essencialmente
declarativo: este especifica o que programa deve fazer e não como. Várias técnicas de
solução tem sido desenvolvidas com o objetivo de encontrar uma ou mais soluções para
um problema de restrições, que é, atribuir valores a variáveis de modo que todas as
restrições sejam satisfeitas ou consistentes [Rossi1999].
A ferramenta escolhida para o desenvolvimento do projeto foi o ECLiPSe [Apt
2007], por ser uma ferramenta bem documentada e simples de utilizar. A programação
nessa ferramenta utiliza uma linguagem semelhante ao Prolog para a declaração dos
predicados e restrições, e possui várias funções para facilitar a busca de soluções e a
chegar ao objetivo.
3. Problema de Configuração de Prateleiras
O problema de configuração de prateleiras é um problema proposto por Pascal Van
Hentenryck em 1999. Esse problema consiste em conectar um grupo de cartões
eletrônicos em prateleiras com conectores eletrônicos. Cada cartão conectado na
prateleira usa um conector [Hentenryck 1999].
Cada cartão é caracterizado pela energia que ele necessita. Cada modelo de
prateleira é caracterizado pela máxima energia que ele pode fornecer, o seu número de
conectores, e seu preço [Hentenryck 1999]. O problema é decidir quantas das prateleiras
disponíveis são necessários, de modo que:
1. Todo cartão é conectado em uma prateleira.
2. A demanda total de energia e o número de conectores necessários pelos cartões
não excedam o disponível pela prateleira.
3. O preço total é minimizado.
As entradas são dadas pelos modelos de prateleiras, que são uma tupla de quatro
itens (Modelo, Energia Disponível, Número de Conectores e Preço) e pelos cartões a
serem inseridos, que são uma tupla de três itens (Modelo, Energia Necessária e
Quantidade de Cartões desse tipo). Exemplos de configuração de prateleiras e cartões
podem ser observados na Tabela 1.
Tabela 1. Exemplo de Configuração. Adaptado de (Kızıltan,2001).
Como pode ser observado na Tabela 1, existem dois tipos de prateleiras e quatro tipos de
cartões, os quais devem ser inseridos em um determinado número de prateleiras mas
com a finalidade de minimizar o custo.
4. Modelagem do Problema
Primeiramente deve-se modelar o problema, e com base nas variáveis e restrições de
que todo cartão deve ser conectado, a demanda de energia exigida pelos cartões devem
ser supridas e o preço deve ser otimizado, o problema pôde ser modelado. Cada
prateleira possui um número correspondente, que aponta o número necessário de
prateleiras desse modelo para resolver o problema, e em cima desses números é que as
restrições são colocadas. Os valores de energia, número de conectores e preço das
prateleiras foram declarados como listas. Por exemplo, para resolver a configuração
mostrada na tabela 1, as restrições são as seguintes:
1. (Qt_prat_mod_1
*
EnergiaPrateleira[1])
EnergiaPrateleira[2]) #>= EnergiaCartoes
2. (Qt_prat_mod_1
*
ConectoresPrateleira[1])
ConectoresPrateleira[2]) #>= ConectoresCartoes
+
+
(Qt_prat_mod_2
*
(Qt_prat_mod_2
*
3. Custo #= (Qt_prat_mod_1 * PrecoPrateleira[1]) + (Qt_prat_mod_2 *
PrecoPrateleira[2])
As variáveis Qt_prat_mod_1 e Qt_prat_mod_2 representam respectivamente a
quantidade necessária da prateleira do modelo 1 e do modelo 2, a EnergiaPrateleira
representa a energia máxima de cada prateleira, a EnergiaCartoes representa a energia
necessária por todos os cartões somadas, a ConectoresPrateleira representa o número de
conectores disponível em cada prateleira, a ConectoresCartoes representa o total de
conectores necessários para conectar todos os cartões, o Custo é o custo que deve ser
minimizado e a variável PrecoPrateleira representa os preços de cada prateleira.
Com essas três restrições o problema pode ser resolvido utilizando-se de funções
de busca e de minimização de valores, que com base nas restrições buscam o valor que
satisfaz essas restrições e ainda minimizam o custo total. Para esse caso a solução
encontrada foi de uma prateleira do modelo 1 e duas prateleiras do modelo 2, com essa
configuração todas as restrições são satisfeitas e o custo é minimizado.
Depois de modelado o problema, a sua implementação resultou em um programa
em Eclipse [Apt 2007] com um total de quinze linhas aproximadamente. Este fato,
demonstra a capacidade de representar modelos em PLR no Eclipse (Apt,2007), pois
em quinze linhas todo o problema foi resolvido alcançando sempre a solução ótima.
5. Experimentos e Resultados
Para a experimentação foram utilizadas quatro instâncias do problema, que foram
retiradas de [Hnich 2005]. A primeira instância é a demonstrada na tabela 1, e como
mostrado no tópico 2, a solução é a ótima e foi encontrada utilizando uma prateleira do
modelo 1 e duas prateleiras do modelo 2, com um custo total de 550, como pode ser
observado na tabela 2.
Tabela 2. Solução 1. Adaptado de (Kızıltan,2001).
A segunda instância do problema mantém as mesmas prateleiras mas a quantidade de
cada cartão é dobrada em relação ao experimento um, e para esse experimento a solução
é a ótima e foi encontrada utilizando duas prateleiras do modelo 1 e quatro
prateleiras do modelo 2, com um custo total de 1100, como pode ser
observado na tabela 3
Tabela 3. Solução 2.
A
terceir
a
instância do problema também mantém as mesmas prateleiras mas os cartões
são alterados em relação ao experimento dois, resultado em um total de 6
tipos de cartões com as configurações: (1,10,20), (2,20,10), (3,40,8), (4,50,4),
(5,75,2), (6,100,1). Para esse experimento a solução é a ótima e foi encontrada
utilizando quatro prateleiras do modelo 1 e três prateleiras do modelo 2, com
um custo total de 1200, como pode ser observado na tabela 4.
Tabela 4. Solução 3.
A quarta instância modifica tanto as prateleiras quanto os cartões em
relação ao experimento um, totalizando 6 tipos de prateleiras e 6 tipos de
cartões, as prateleiras modificadas tem a configuração: (1,50,2,50),
(2,100,4,100), (3,150,8,150), (4,200,16,200), (5,250,32,250), (6,300,64,300) e os
cartões modificados tem a configuração: (1,20,10), (2,40,6), (3,50,4), (4,75,2),
(5,100,2), (6,150,1). Para esse experimento a solução é a ótima e foi encontrada
utilizando uma prateleira do modelo 5 e três prateleiras do modelo 6, com um
custo total de 1150, que pode ser observada na tabela 5.
Tabela 5. Solução 4.
Como pode ser observado, em todos os testes a solução ótima foi encontrada,
provando assim a eficiência do resolvedor Eclipse. Um ponto a ser ressaltado é que o
código fonte totalizou 15 linhas para a resolução desse problema e em comparação com
[Hentenryck 1999] o tamanho foi reduzido pela metade.
6. Conclusões
O presente trabalho propõe e explora uma solução para o problema de configuração de
prateleiras utilizando programação em lógica por restrições, onde esse problema
consiste em conectar um grupo de cartões eletrônicos em prateleiras com conectores
eletrônicos, onde cada cartão conectado na prateleira usa um conector e todos os cartões
devem ser conectados, tendo como objetivo final minimizar o custo das prateleiras.
Com base nas restrições de que todo cartão deve ser conectado, a demanda de
energia exigida pelos cartões devem ser supridas e o preço deve ser otimizado, o
problema pôde ser modelado e a implementação pôde ser feita.
Contudo, depois da experimentação ser realizada os resultados podem ser
analisados, e conforme foi apresentado o algoritmo sempre encontrou a solução ótima,
atingindo o seu objetivo respeitando todas as restrições.
Em comparação com o código de [Hentenryckcv 1999], que utilizava a
OPL(Optimization programming language), o código teve seu tamanho reduzido pela
metade, onde ele possui 30 linhas com OPL e somente 15 com PLR, o que demonstra a
objetividade do código e que com poucas linhas um problema pode ser resolvido, além
de que em um computador com um processador Intel Core 2 Duo de 1.8Ghz e 2Gb de
memória ram as soluções foram todas encontradas em menos de 0,5 segundos.
7. Referências
(Apt,2007)Apt, K. R; Wallace, M. 2007. Constraint Logic Programming Using
Eclipse. Cambridge University Press. 348 p.
(Carro, 1998)Carro, Manuel. 1998. “An Introductory Course on Constraint Logic
Programming”. Computer Science School, Technical University of
Madrid,
Madrid,
Espanha.
Disponível
em:
http://clip.dia.fi.upm.es/~vocal/public_info/seminar_notes/. Acesso em:
04 Nov. 09
(Hentenryck,1999)Hentenryck,
Pascal
Van.
The
OPL
Optimization
Programming Language. The MIT Press, 1999. 245 p.
(Hnich,2005)Hnich, Brahim; Miguel, Ian. “CSPLib: a problem library for
constraints”. Disponível em: http://www.csplib.org/ Acesso em: 06 Nov.
09.
(Kızıltan,2001)Kızıltan, Zeynep; Hnich, Brahim. (2001). Symmetry Breakingin a
Rack Configuration Problem. IJCAI-2001. Uppsala University, Uppsala,
Suécia.
(Rossi,1999)Rossi,
Francesca.
(1999).
“Constraint
Logic
Programming’.
ERCIM/Compulog Net workshop on constraints. Pafos, Chipre.
Download