52
UNIVERSIDADE ESTADUAL DE CAMPINAS FACULDADE DE ENGENHARIA ELÉTRICA E DE COMPUTAÇÃO PROJETO DE CONCLUSÃO DE CURSO Introdução ao Estudo sobre Árvore Geradora Mínima em Grafos com Parâmetros Fuzzy Disciplina: IA 861 – Sistemas Nebulosos Docente: Prof. Dr. Fernando Gomide Alunos: Fábio Prado – RA 029930 Tiago Agostinho de Almeida – RA 025625 Vânia Nobre de Sousa – RA 002606

Introdução ao Estudo sobre Árvore Geradora Mínima em ...tiago/courses/sistemas_nebulosos/Relatorio.pdf · Um caminho de custo mínimo do vértice u ao vértice v é definido como

Embed Size (px)

Citation preview

UNIVERSIDADE ESTADUAL DE CAMPINAS FACULDADE DE ENGENHARIA ELÉTRICA E DE COMPUTAÇÃO

PROJETO DE CONCLUSÃO DE CURSO

Introdução ao Estudo sobre Árvore Geradora Mínima em Grafos com Parâmetros Fuzzy

Disciplina: IA 861 – Sistemas Nebulosos Docente: Prof. Dr. Fernando Gomide

Alunos: Fábio Prado – RA 029930

Tiago Agostinho de Almeida – RA 025625

Vânia Nobre de Sousa – RA 002606

Sumário 1. Introdução 3 2. Objetivos 4 3. Teoria 5

3.1. Grafos Clássicos 6 3.1.1. Grafos – Definições 6 3.1.2. Caminho Mínimo 7 3.1.3. Árvore Geradora Mínima 7

3.2. Conceitos Básicos 11 3.2.1. Conjuntos Fuzzy 11 3.2.2. Tipos de Função de Pertinência 12 3.2.3. Algumas características 13 3.2.4. Relações Fuzzy sobre Conjuntos Fuzzy 13 3.2.5. Composição de Relações Fuzzy 15 3.2.6. Reflexividade e Simetria 15 3.2.7. Teoria da Possibilidade 16

3.3. Problemas de grafos fuzzy e suas soluções 17 3.3.1. Problemas com estrutura do grafo crisp e parâmetros fuzzy 17

3.4. Árvore Geradora Mínima Fuzzy 22 3.4.1. Introdução 22 3.4.2. Problema com Grafo Crisp e Parâmetros Fuzzy 22

3.5. Computação Evolutiva - O Algoritmo Genético 27 3.5.1. Algoritmos Evolutivos 28 3.5.2. Algoritmo Genético 28 3.5.3. Representação 30 3.5.4. Fitness 31 3.5.5. Operadores Genéticos 31

4. Revisão Bibliográfica 33 5. Propostas 34 6. Implementação 35

6.1 Algoritmo 35 6.2. Resultados Experimentais 39

6.2.1 Grafo Itália 39 6.2.2 Grafo 274 44 6.2.3 Análise dos Resultados 49

7. Conclusões 50 8. Bibliografia 51

2

1. Introdução

A teoria fuzzy foi introduzida em meados de 1960 e 1970 por Zadeh, no entanto, esse assunto já era discutido desde 1910 por Whitehead e Russel. As primeiras aplicações da teoria fuzzy foram creditadas a Mandani, 1977.

Atualmente, diversos trabalhos na área de engenharia são encontrados utilizando esta teoria. Uma das áreas estudadas é a de grafos, pois uma grande quantidade de problemas pode ser representada na forma de redes, tais como: alocação, caminho mínimo, fluxo máximo, árvore geradora mínima, dentre outras, com aplicações nas mais diversas áreas da engenharia, como telecomunicações, transporte, manufaturas, etc.

Dentro da área de grafos, o problema de encontrar a Árvore Geradora Mínima aparece em uma série de aplicações, ou como subproblemas destas. Um exemplo é a instalação de linhas telefônicas (ou elétricas) entre um conjunto de cidades utilizando a infra-estrutura das rodovias com o menor uso de material. Outros problemas como análise de clusters e armazenamento de informações, dentre outros podem ser tratados por esta modelagem que possui eficientes algoritmos como Kruskal, Prim e Sollin (Ahuja et. Al., 1993).

No entanto, problemas reais nem sempre possuem informações precisas. Parâmetros como tempo e capacidade associados ao problema podem ter natureza incerta. Ao resolver problemas deste tipo utilizando a estrutura de grafos, podemos ter incertezas tanto na estrutura (nós e/ou arestas) quanto nos parâmetros (custo, capacidade, demanda). Portanto, estes problemas podem ser estudados e resolvidos sob a teoria de sistemas nebulosos, ou sistemas fuzzy.

No capítulo 3 apresentaremos o problema de encontrar a Árvore Geradora Mínima para grafos fuzzy, bem como conceitos e definições associados ao entendimento e resolução deste. No capítulo 4 será apresentada a revisão bibliográfica e no capítulo 5 mostraremos uma proposta para resolução deste problema. O capítulo 6 descreverá a implementação utilizada e resultados experimentais obtidos para alguns problemas. No capítulo 7 fazemos considerações finais sobre o projeto.

3

2. Objetivos

Estudaremos o problema de encontrar a Árvore Geradora Mínima com parâmetros fuzzy e apresentaremos uma maneira de resolvê-lo baseando-se em conceitos da teoria de possibilidade (Zadeh,1978).

Trabalharemos com duas formas diferentes de obter a solução para o problema, no qual uma delas será obtida atribuindo-se o grau de possibilidade das árvores geradoras de um grafo serem solução, ou seja, obteremos como resposta um conjunto solução para o problema. A outra será obtida atribuindo-se o grau de possibilidade de cada aresta do grafo pertencer à solução do problema. A importância de apresentar estas duas maneiras de responder ao problema é que, a primeira proporciona uma visão geral de quais são as possíveis melhores decisões que podem ser tomadas com relação ao problema apresentado, enquanto que a segunda proporciona uma visão mais local, ou seja, apresenta qual a possível melhor decisão que pode ser tomada a partir de um determinado ponto.

Encontrar o grau de possibilidade de cada árvore geradora mínima de um grafo ser solução ou obter o grau de possibilidade de cada uma de suas arestas estarem na solução são problemas combinatoriais NP-difíceis, pois teríamos que comparar todas as árvores geradoras entre si. Por isto, apresentaremos os algoritmos que foram propostos em (Takahashi, 2003) e um algoritmo genético (AG) para solução aproximada do problema, visando contornar a questão da complexidade.

4

3. Teoria

Neste capítulo apresentaremos a teoria necessária para o entendimento do problema apresentado. Na seção 3.1 apresentaremos alguns conceitos sobre grafos crisp. Na seção 3.2 serão apresentadas as teorias de conjuntos fuzzy e possibilidade que serão utilizadas para a resolução do problema. Na seção 3.3 serão descritos problemas de grafos fuzzy e as abordagens feitas para solucioná-los. Serão apresentados o problema da Árvore Geradora Mínima com parâmetros fuzzy e um algoritmo exato para sua resolução na seção 3.4. E, na seção 3.5, serão apresentados alguns conceitos importantes sobre Algoritmo Genético.

5

3.1. Grafos Clássicos 3.1.1. Grafos – Definições Um grafo G = (V,E) consiste de um conjunto V de vértices (também denominados nós), e um conjunto E de arestas. Cada aresta corresponde a um par distinto de vértices. Quando uma aresta é do tipo e = (v,v) ela é denominada laço.

Pode-se ter grafos direcionados ou não-direcionados. As arestas em um grafo direcionado são pares ordenados, ou seja, a ordem entre dois vértices conectados por uma aresta é importante. Neste caso representa-se uma aresta como uma flecha apontando de um vértice para outro. As arestas em um grafo não-direcionado são pares não ordenados, os quais são representados através de um seguimento de linha conectando dois vértices.

Um multigrafo é um grafo cujo conjunto de arestas contém laços ou arestas múltiplas. As arestas múltiplas ocorrem quando se permite a existência de mais de uma aresta entre o mesmo par de vértices. Grafos que não são multigrafos são muitas vezes chamados de grafos simples.

O grau d(v) de um vértice v é o número de arestas que incidem em v. Nos grafos direcionados existe a diferença entre grau de entrada e grau de saída de um vértice.

Um caminho de v1 para vk é uma seqüência de vértices v1, v2,...,vk, conectados pelas arestas (v1,v2), (v2,v3),..., (vk-1,vk). Um caminho é chamado simples se cada vértice aparece uma única vez. Um vértice u é dito ser alcançado por v se existe um caminho de v para u. Um ciclo é um caminho no qual o primeiro e o último vértice são o mesmo. Um ciclo é chamado simples se, com exceção do primeiro e último vértices, nenhum vértice aparece mais de uma vez.

Um grafo (na sua forma não direcionada) é dito ser conexo, se existe um caminho entre qualquer par de vértices. Uma árvore é um grafo que é acíclico e conexo T = (V,E). Um vértice v da árvore é uma folha se possuir grau menor ou igual a 1. Uma floresta é um conjunto de árvores, ou seja, um grafo acíclico.

Subgrafo de um grafo G = (V,E) é um grafo H = (U,F) tal que U ⊆ V e F ⊆ E. Uma árvore geradora de um grafo não-direcionado G é um subgrafo de G que é uma árvore e contém todos os vértices de G. Uma floresta geradora de um grafo não direcionado G é um subgrafo de G que é uma floresta e contém todos os vértices de G. Um subgrafo induzido pelo conjunto de vértices U de um grafo G = (V,E) é um subgrafo H = (U,F) tal que U ⊆ V e F consiste de todas as arestas em E cujos vértices pertencem a U.

Se um grafo G = (V,E) é não conexo , então ele pode ser particionado de uma única maneira em um conjunto de subgrafos conexos chamados de componentes conexas de G. Uma componente conexa de G é um subgrafo conexo de G tal que nenhum outro subgrafo conexo de G o contém.

Um grafo bipartido G = (V,E) é um grafo cujos vértices podem ser divididos em dois conjuntos V1 e V2 tais que toda aresta de G une um vértice de V1 a outro de V2.

Um grafo pode conter custos associados a cada aresta. Estas definições podem ser verificadas em (U. Manber).

6

3.1.2. Caminho Mínimo

Considere um grafo G = (V,E) com função de custo c: E→R associando as arestas de G a valores reais. O custo do caminho p = (v0,v1,...,vk) é a soma dos pesos das arestas que o compõem :

∑=

−=k

iii vvcpc

11 ),()(

O custo mínimo entre u e v é dado por:

{ }⎩⎨⎧

∞⎯→⎯

=contráriocaso

veuentrepumexistesevupcvu

p:)(min),(δ

Um caminho de custo mínimo do vértice u ao vértice v é definido como todo caminho p com custo c(p) = ),( vuδ (T. H. Cormen).

3.1.3. Árvore Geradora Mínima 3.1.3.1. Definição

Considere um grafo não direcionado G = (V,E) onde para cada aresta (u,v)∈E, tem-se um custo c(u,v) associado. Deseja-se encontrar um subconjunto

T ⊆ E que conecta todos os vértices de G e cuja soma total dos seus custos

∑∈

=Tvu

vucTc),(

),()(

é minimizada. Como T é acíclica e conecta todos os vértices de G, forma uma árvore geradora de G. A árvore T encontrada desta forma é uma árvore geradora de custo mínimo de G (T. H. Cormen).

3.1.3.2 Soluções A seção 3.1.3.2.1 introduz um algoritmo “geral” para árvore geradora mínima (AGM) que obtém uma árvore geradora adicionando uma aresta por vez através da estratégia gananciosa. A seção 3.1.3.2.2 apresenta dois modos de implementar este algoritmo geral: algoritmo de Kruskal e algoritmo de Prim.

3.1.3.2.1 Obtendo uma árvore geradora mínima (AGM) Assuma que se tem um grafo conexo não direcionado G = (V,E) com função de custo c: E→R e que se deseja encontrar uma árvore geradora mínima para G. Os dois algoritmos que serão apresentados na próxima seção utilizam estratégia gananciosa para o problema, embora eles se diferenciem entre si pela aplicação desta estratégia (T. H. Cormen).

Esta estratégia é mostrada pelo seguinte algoritmo geral, que obtém uma AGM acrescentando uma aresta por vez. O algoritmo trabalha sobre um conjunto A que é sempre

7

um subconjunto de alguma AGM. Em cada passo, é determinada uma aresta (u,v) para ser acrescentada a A sem violar sua estrutura, ou seja,

A ∪ {(u,v)} é também um subconjunto de uma AGM . Uma aresta será chamada aresta segura para A desde que ela possa ser adicionada a A sem defazer sua estrutura.

AGM_GERAL(G,w)

1. A ← ∅ 2. enquanto A não forma uma AGM

3. faça encontre uma aresta (u,v) que é segura para A

4. A ← A ∪ {(u,v)}

5. retorne A

Note que após a linha 1, o conjunto A satisfaz a propriedade de ser um subconjunto de uma AGM. O “loop” nas linhas 2-4 mantém a estrutura. Quando o conjunto A é retornado na linha 5, ele deve ser uma AGM. Para isto, tem que ser encontrada uma aresta segura na linha 3. Ela existe, desde que a linha 3 é executada, a estrutura detecta que existe uma árvore geradora T tal que A ⊆ T, e se existe uma aresta (u,v) ∉ A, então (u,v) é segura para A.

A seguir será fornecida uma forma para reconhecer arestas seguras (Teorema 3.1.1).

Primeiro é necessário algumas definições. Um corte (S,V - S) de um grafo não direcionado G = (V,E) é uma partição de V. Diz-se que uma aresta (u,v) atravessa o corte (S,V - S) se um dos vértices unidos por esta aresta está em S e o outro em V - S. Diz-se que um corte respeita um conjunto A de arestas se nenhuma aresta em A atravessa o corte. Uma aresta é dita ser uma aresta mínima atravessando um corte se o seu custo é o menor dentre os custos de todas as arestas que o atravessam. Note que pode existir mais de uma aresta mínima atravessando um corte em caso de empate.

Teorema 3.1.1 Seja G = (V,E) um grafo conexo não-direcionado com função de custo c:E→R. Seja A um subconjunto de E que está incluído em alguma AGM de G e seja (S,V - S) um corte de G que respeita A. Seja (u,v) uma aresta mínima atravessando o corte (S,V - S). Então, a aresta (u,v) é segura para A.

Prova: Seja T uma árvore geradora mínima tal que A ⊆ T, e assuma que T não contém aresta mínima (u,v). A aresta (u,v) forma um ciclo com as arestas pertencentes ao caminho p de u para v em T. Desde que u e v estão em lados opostos do corte (S,V - S), existe ao menos uma aresta em T no caminho p que também atravessa o corte. Seja (x,y) tal aresta. A aresta (x,y) não pertence a A porque o corte respeita A. Como (x,y) está no caminho de u para v em T, remover (x,y) divide T em duas componentes. Adicionando (u,v) as componentes são reconectadas formando uma nova árvore T’ = (T – {(x,y)}) ∪ {(u,v)}. Como (u,v) é uma aresta mínima atravessando o corte (S,V - S) e (x,y) também atravessa este corte, c(u,v) ≤ c(x,y). Assim,

c(T’) = c(T) – c(x,y) + c(u,v) ≤ c(T).

8

Mas T é uma AGM então c(T) ≤ c(T’). Desta forma T’ também é uma AGM. Resta mostrar que (u,v) é uma aresta segura para A. Temos que A ⊆ T’, pois

A ⊆ T e (x,y) ∉ A. Então A ∪ {(u,v)} ⊆ T’. Conseqüentemente, como T’ é AGM, (u,v) é segura para A.

O Teorema 3.1.1 dá um melhor entendimento de como trabalha o AGM_Geral em um grafo conexo G = (V,E). A maneira que o algoritmo procede faz com que A seja sempre acíclico, pois se assim não fosse, a árvore geradora que contém A teria um ciclo, o que seria uma contradição.

Durante a execução do algoritmo, o grafo GA = (V,A) é uma floresta, onde cada componente conexa de GA é uma árvore. Algumas árvores podem conter somente um vértice, como é o caso, por exemplo, quando o algoritmo começa: A é vazio e a floresta contém |V| árvores, uma para cada vértice. Toda aresta (u,v) segura para A conecta componentes distintas de GA, A ∪ {(u,v)} acíclica.

O “loop” nas linhas 2-4 do AGM_Geral é executado |V| - 1 vezes. Quando a floresta contém somente uma única árvore, o algoritmo termina.

Corolário 3.1.2 Seja G = (V,E) um grafo conexo não direcionado com função de custo c :E→R. Seja A um subconjunto de E que está incluído em alguma árvore geradora mínima de G, e seja C uma componente conexa (árvore) na floresta GA = (V,A). Se (u,v) é uma aresta mínima conectando C a alguma outra componente em GA, então (u,v) é segura para A.

Prova O corte (C,C - V) respeita A e (u,v) é, portanto, uma aresta mínima para este corte.

3.1.3.2.2. Algoritmos de Kruskal e de Prim

Algoritmo de Kruskal

Este algoritmo é diretamente baseado no AGM_Geral apresentado na seção anterior. Para adicionar uma aresta segura à floresta, ele procura, entre todas as arestas que conectam quaisquer duas árvores na floresta, uma aresta (u,v) com menor custo. Sejam C1 e C2 duas árvores conectadas por (u,v). Como (u,v) deve ser uma aresta mínima conectando C1 a alguma outra árvore, pelo Corolário 3.1.2, (u,v) é uma aresta segura para C1. O algoritmo de Kruskal é um algoritmo ganancioso porque em cada passo acrescenta à floresta uma aresta com menor custo possível. Segue abaixo uma implementação deste algoritmo (T. H. Cormen):

AGM_Kruskal(G,w)

1. A ← ∅

2. para cada vértice v ∈ V[G]

3. execute MAKE-SET(v)

4. ordene as arestas de E em ordem não-decrescente de custo

5. para cada aresta (u,v) ∈ E, em ordem não-decrescente de custo

9

6. se FIND-SET(u) ≠ FIND-SET(v)

7. então A ← A ∪ {(u,v)}

8. UNION(u,v)

9. retorne A

onde FIND_SET(u) retorna um elemento representativo do conjunto que contém u e UNION combina as árvores.

A complexidade deste algoritmo é de O(ElgE).

Algoritmo de Prim

Como o algoritmo de Kruskal, o algoritmo de Prim é um caso especial do AGM_Geral apresentado anteriormente. Ele tema a propriedade de que as arestas no conjunto A sempre formam uma única árvore. Começa com um vértice raiz arbitrário r e árvore é aumentada até que ela contenha todos os vértices de V. Em cada passo, uma aresta mínima conectando um vértice em V – A é adicionado à árvore. Pelo Corolário 3.1.2, esta regra adiciona somente arestas que são seguras para A. Portanto, quando o algoritmo termina, as arestas em A formam uma árvore geradora mínima. Esta estratégia é gananciosa desde que a árvore é acrescentada em cada passo por uma aresta que contribui o mínimo possível para o custo da árvore. Segue abaixo uma implementação deste algoritmo (T. H. Cormen):

AGM-Prim(G,w,r)

1. Q ← V[G]

2. para cada u∈ Q

3. faça key[u] ← ∞

4. key[r] ← 0

5. π[r] ← nil

6. enquanto Q ≠ ∅

7. faça u ← EXTRACT-MIN(Q)

8. para cada v ∈ Adj[u]

9. se v ∈ Q e c(u,v) < key[v]

10. então π[v] ← u

11. key[v] ← c(u,v)

10

Onde:

key[v] é o mínimo custo entre os custos de todas as arestas conectando v à árvore e key[v] = ∞ se não existe tal aresta;

Q é a fila de vértices não-pertencentes à árvore cuja prioridade na fila é dada por key;

π[v] é o “pai” de v na árvore.

A complexidade deste algoritmo é de O(E +VlgV).

3.2. Conceitos Básicos

3.2.1. Conjuntos Fuzzy

Conjuntos são uma tentativa de organizar, resumir e generalizar conhecimento sobre objetos. Nesse sentido, trabalhamos com uma dicotomia sobre um objeto pertencer ou não a um determinado conjunto. Esta dicotomia pode ser representada por uma função característica:

⎩⎨⎧

∉∈

=AxseAxse

xf A ,0,1

)( (3.2.1)

Por exemplo, considere o conjunto dos homens altos { }80,1| ≥ℜ∈= xxH . Alguém com 1,79m não pode ser considerado alto?

Figura 3.2.1: Exemplo de uma função característica clássica

Um conjunto fuzzy A em X é definido por uma função (característica) de pertin )(xf A que associa a cada ponto em X um número real no intervalo [0,1], com o valor de )(xf A em x representando o grau de pertinência de x em A. Então, quanto mais próximo o

valo )(xf A da unidade, maior o grau de pertinência de x e

ência

e m A. r d

11

Figura 3.2.2: Exemplo de uma função de pertinência

Quando existe uma necessidade de diferenciar entre os conjuntos clássicos e os conjuntos fuzzy, os conjuntos com função característica de dois valores serão chamados de conjuntos clássicos (ordinários ou crisp) ou simplesmente conjuntos.

3.2.2. Tipos de Função de Pertinência 3.2.2.1. Função Triangular

⎪⎪⎪

⎪⎪⎪

>

∈−−

∈−−

<

=

bx

bmxamax

maxamax

ax

xS

se 0

],[ se

],[ se

se 0

)( (3.2.2)

sendo m o valor modal e a e b os limitantes inferior e superior, respectivamente.

3.2.2.2. Função Γ

⎩⎨⎧

≥−−−

≤=

axaxkax

xS se )(exp1 se 0

)(2

(3.2.3)

com k>0.

3.2.2.3. Função trapezoidal

⎪⎪⎪⎪

⎪⎪⎪⎪

>

∈−−

∈−−

<

=

bx se

bnx seamax

nmx se

max seamax

ax se

xS

0

],[

],[1

],[

0

)( (3.2.4)

12

3.2.2.4. Função Gaussiana 2)(exp)( axkxS −−= (3.2.5)

para k>0.

3.2.2.5. Função exponencial

2)(11)(

mxkxS

−+= (3.2.6)

com k>0.

3.2.3. Algumas características

Aqui estão alguns conceitos básicos dos conjuntos fuzzy que serão necessários no decorrer do texto:

Definição 3.2.3.1. Um conjunto fuzzy S é normal se sua função de pertinência possui pelo menos um valor tal que 1)}({sup =xSx µ .

Caso não exista valor x tal que o supremo da função de pertinência seja igual a um, então S é subnormal. O supremo é considerado a altura de S.

Definição 3.2.3.2. O suporte de um conjunto fuzzy S, denotado por supp(S), é dado por:

}0)(|){( >∈ xSxSsupp Sµ

ou seja, o suporte é formado pelos elementos que possuem valores de pertinência não-nulos.

Definição 3.2.3.3. O núcleo de um conjunto fuzzy S é o conjunto de todos os elementos cujo valor de pertinência é igual a 1:

}1)(|){( =∈ xSxSnucleo Sµ

Definição 3.2.3.4. Um conjunto fuzzy S é convexo se sua função de pertinência é tal que

)](),(min[])1([ 2121 xxxx SSS µµλλµ ≥−+

para qualquer x1 e x2∈S e λ∈[0,1].

3.2.4. Relações Fuzzy sobre Conjuntos Fuzzy

Seja S um conjunto. Um subconjunto fuzzy de S é um mapeamento σ:S→[0,1], o qual associa elementos x∈S a um grau de pertinência, 0≤σ(x)≤1. Similarmente, uma relacão fuzzy sobre S é um subconjunto fuzzy de SxS, isto é um mapeamento σ:SxS→[0,1], o qual associa para cada par ordenado de elementos (x,y) um grau de pertinência 0≤µ(x,y)≤1. Nos

13

casos especiais onde σ e µ podem assumir valores 0 e 1, eles se tornam funções características de um subconjunto ordinário de S e uma relação ordinária sobre S, respectivamente.

Se T⊆S é um subconjunto de S e R⊆S×S uma relação sobre S, então R é uma relação sobre T contanto que (x,y)∈R implique que x∈T e y∈T para todo x,y. Seja τ e ρ funções características de T e R respectivamente.. Então esta condição pode ser estabelecida como

ρ(x,y)=1

implica que

τ(x)=τ(y)=1, ∀x,y∈S

Podemos associar esta condição às funções de pertinência:

ρ(x,y)<τ(x)∧τ(y), ∀x,y∈S

Onde ∧ significa inf.

Retornando o caso geral onde σ é um subconjunto fuzzy de S e µ uma relação fuzzy sobre S, diz-se que µ é uma relação fuzzy sobre σ se

µ(x,y)<σ(x)∧σ(y), ∀x,y∈S

Em outras palavras, para µ ser uma relação fuzzy sobre σ, é necessário que o grau de pertinência de um par de elementos nunca exceda o grau de pertinência dos próprios elementos. Se pensarmos nos elementos como nós em um grafo e os pares como os arcos, isto equivale ao requisito de que a força de um arco nunca exceda as forças de seus nós.

Proposição 3.2.4.1. (Rosenfeld, 1975) Para um dado subconjunto fuzzy σ de S, a relação mais forte sobre S, ou seja, uma relação fuzzy sobre σ, é µσ, definida por

µσ(x,y)<σ(x)∧σ(y), ∀x,y∈S

Proposição 3.2.4.2. (Rosenfeld, 1975) Para uma dada relação fuzzy µ sobre S, o subconjunto fuzzy mais fraco de S para o qual µ é uma relação fuzzy σµ, definida por

σµ(x)=sup[µ(x,y)∨µ(x,y)], ∀x∈S

onde ∨ significa sup.

Para algum limiar tm 0≤t≤1, o conjunto

σt={x∈S|σ(x)≥t}

é um subconjunto de S e o conjunto

µt={(x,y)∈S×S|µ(x,y)≥t}

é uma relação sobre S. Usando essa notação, podemos estabelecer:

Proposição 3.2.4.3. (Rosenfeld, 1975) Seja µ uma relação fuzzy sobre σ e seja 0≤t≤1. Então, µt é uma relação sobre σt.

14

3.2.5. Composição de Relações Fuzzy

Seja µ e ν relações sobre σ. Pela composição de µ e ν é entendido o conjunto µ°ν definido por

)],(),([sup),)(( zyνyxzxνSy

∧=∈

µµ o , ∀x,z∈S

Outras definições de composição de relações fuzzy serão discutidas a seguir. Esta definição é chamada composição max-min.

Proposição 3.2.5.1.(Rosenfeld, 1975) µ°ν é uma relação fuzzy sobre σ.

É bem conhecido que a composição de relações fuzzy é associativa, isto é, ∀µ,ν, ρ temos µ°(ν°ρ)=(µ°ν)°ρ. Podemos então definir a potência de uma relação fuzzy como µ1=µ; µ2=µ°µ; µ3=µ°µ°µ e assim por diante. Também podemos definir

k

kµµ

,...2,1sup=

∞ =

Finalmente, é conveniente definir

0),(0 =yxµ se x≠y

)(0 xσµ =

para todo x,y∈S.

Proposição 3.2.5.2. (Rosenfeld, 1975) Para todo t, 0≤t≤1, temos (µ°ν)t=µt°νt.

Proposição 3.2.5.2. (Rosenfeld, 1975) Se µ≤ν e λ≤ρ, então µ°λ≤ν°ρ.

3.2.6. Reflexividade e Simetria

Seja µ uma relação fuzzy sobre σ. µ é reflexivo se

µ(x,x)=(x), ∀x∈S

Proposição 3.2.6.1. (Rosenfeld, 1975) Se µ é reflexivo, então µ(x,y)≤µ(x,x) e µ(y,x)≤µ(x,x), ∀x,y∈S.

Proposição 2.6.2. (Rosenfeld, 1975) Se µ é uma relação fuzzy reflexiva sobre σ, então para 0≤t≤1 qualquer, µt é uma relação reflexiva sobre σt.

Corolário 3.2.6.1. (Rosenfeld, 1975) Se µ é reflexivo, µ≤µ°µ.

Corolário 3.2.6.2. (Rosenfeld, 1975) Se µ é reflexivo, µ0≤µ1≤µ2≤ ... ≤µ∞.

Corolário 3.2.6.3. (Rosenfeld, 1975) Se µ é reflexivo, µ0(x,x)=µ1(x,x)=µ2(x,x)=...= µ∞(x,x)=σ(x)

Diz-se que µ é simétrico se µ(x,y)=µ(y,x) para todo x,y∈S. É claro que se µ é simétrico, µt também é para qualquer limiar t. Note que a propriedade de simetria não depende da escolha do subconjunto fuzzy σ, diferente da reflexividade.

15

Proposição 3.2.6.3. (Rosenfeld, 1975) Se µ e ν são simétricos, então µ°ν é simétrico se, e somente se, µ°ν=ν°µ.

Corolário 3.2.6.4. (Rosenfeld, 1975) Se µ é simétrico, então todas as potências de µ também são.

Estes últimos resultados pertencem a qualquer definição de composição que é baseada em operações comutativas em [0,1].

3.2.7. Teoria da Possibilidade

Seja um grafo G : (N,A) com custo associado nc ℜ∈1 . Sejam dois números fuzzy T1 e T2, T 1≠ T2. Podemos dizer que T1 tem um grau de possibilidade de ser menor do que T2 dado por (Okada, 2001):

)}(),({minsup)( 2121

vuccPossw TTvuTij

ijTij

ij µµ≤

∈∈

=≤= ∑∑ (3.2.7)

Para encontrar uma solução fuzzy utilizando a teoria de possibilidade, teríamos que encontrar todas as soluções para obter o grau de possibilidade de cada uma (Okada, 2001). O grau de possibilidade é dado pela fórmula:

)}({min ∑∑∈∈

∈≤=

Tijij

Tijij

TTT ccPossD

kk

(3.2.8)

e o grau de possibilidade de cada aresta é dado pela equação

}{max|

kkk TTijTij DD

∈= (3.2.9)

Isso torna o problema de difícil solução, pois além de ter que enumerar todas as soluções, a comparação entre elas torna o problema NP-completo.

Proposição 3.2.7.1. Sejam dois números fuzzy, normalizados, a e b . Temos que se

}{sup}{inf1)(|1)(|

vuvuuau

b ==≤

µµ, então Poss(a ≤ b) = 1

Prova: seja a definição do grau de possibilidade entre dois números fuzzy:

)}}(),({min{sup)( vubaPoss baTT k

µµ∈

=≤

Suponha que e }{inf 1)(| uu uu == µ }{inf 1)(| vu vv == µ , então u ≤ v é satisfeito. Com isso, 1)}(),(min{1)()( =⇒== vuvu baba µµµµ . Portanto, Poss(a ≤ b)=1.

Teorema 3.2.7.1. Seja T0 uma solução do grafo crisp GC, com valores modais de G sendo os custos do grafo crisp. Seja a solução fuzzy ∗T , associada a solução crisp T0, com custo igual a ∑

∗∈

∗ =Tij

ijcw . Se ∗T for a solução ótima do problema, então

1)( =≤= ∑∑∈∈ ∗ kTij

ijTij

ij ccPossw , sendo kT qualquer solução em G.

16

Prova: Suponha que exista um Tk tal que 1)( <≤= ∑∑∈∈ ∗ kTij

ijTij

ij ccPossw . Pela proposição

3.2.7.1, temos que . Mas , como wc é o menor valor encontrado para o grafo Gkcc ww >∗ C,

então uma contradição. Portanto, kcc ww ≤∗ 1)( =≤= ∑∑

∈∈ ∗ kTijij

Tijij ccPossw .

Proposição 3.2.7.2. Sejam a e b dois números fuzzy. Se sup{b }<inf{ a }, então Poss(a≤b)=0.

Prova: Seja um número fuzzy a . Temos que µ(u)=0, se u∉( a , a ), onde a e a são os limitantes inferior e superior, respectivamente, do número fuzzy. Se u∈[ a , a ], então µ(u)≥0. Como b =sup{b }<inf{ a }= a , então

0)(|),( =⇒≤∈∀⇒≥≥≥ vvubbvvbau bµ

Portanto

0)(,,0}),(min{ =≤⇒∀= baPossvuu ba µµ

3.3. Problemas de grafos fuzzy e suas soluções

Quando citamos um problema de grafos fuzzy, a característica fuzzy do problema pode ser encontrada em diversos níveis: da estrutura do grafo (nós e arestas) aos parâmetros associados ao grafo. Ainda quando se considera fluxo em uma rede, pode-se associar uma incerteza ou “fuzzissidade” a este valor. Também com relação à solução destes problemas existem diferentes formatos apresentados na literatura, dependendo do objetivo do decisor.

3.3.1. Problemas com estrutura do grafo crisp e parâmetros fuzzy

Este é o problema mais citado na literatura. São problemas em que a estrutura do grafo é bem conhecida e rígida e os parâmetros associados são representados por números fuzzy. São vários os exemplos, principalmente considerando custo ou tempo como números fuzzy (vide figura 3.3.1).

O caminho mínimo com custo/tempo fuzzy é o problema de grafos com parâmetros fuzzy mais estudado.

17

Figura 3.3.1: Exemplo de grafo com parâmetros fuzzy

Um problema em que a capacidade dos arcos é fuzzy é encontrada para problemas de fluxos em redes. No problema de fluxo máximo é associado um grau de confiabilidade da solução dado o fluxo dos arcos para fluxos com valores inteiros ou contínuos. Este problema foi bastante estudado por (Chanas, 1987). Um problema mais complexo envolve parâmetros fuzzy tanto na capacidade dos arcos quanto nos custos associados, que é o caso do problema de fluxo mínimo.

Os problemas da árvore geradora mínima e de emparelhamento podem ter seus parâmetros fuzzy.

Quanto à solução, de modo geral, aquela proposta por (Bellman e Zadeh, 1970) é a mais utilizada para o problema de grafos com parâmetros fuzzy e será definida na próxima seção. Aqui também será apresentada a abordagem adotada por (Okada, 2001) para o problema de caminho mínimo com parâmetros fuzzy que foi a abordagem utilizada por (Takahashi, 2003) e que será referência à proposta de solução do problema de árvore geradora mínima.

3.3.1.1. Abordagem

O trabalho de (Bellaman e Zadeh, 1970), traz as seguintes definições:

Definição 3.3.1.1. (Belman e Zadeh, 1970) Assumindo que são dados um objetivo fuzzy (C) e as restrições fuzzy (R) em um espaço de alternativas X, então, C e R combinam para formar uma decisão D, o qual é um conjunto fuzzy resultante da intersecção de C e R. Em símbolos:

D =C ∩ R

e µD = µC ∧ µR.

A figura 4.2 é um exemplo desta definição.

18

Figura 3.3.2: Exemplo de um gráfico do modelo de Bellman e Zadeh

Portanto, considerando um grafo G : (N,A), uma decisão ótima é dada por:

)()(maxmax vRvCD xx µµµ ∧→

RCDAji

ij II∈

=).(

)()( ),( vijAjivR xx µµ ∈∧=

e qualquer x no conjunto suporte Dmax é chamado de decisão que maximiza o objetivo do problema. Na literatura é comum encontrar uma única solução adotando esta abordagem.

3.3.1.2. Abordagem por Okada, 2001

Seja, por exemplo, um problema de árvore geradora mínima com parâmetros fuzzy, isto é,

em um grafo G com custos fuzzy temos que encontrar uma árvore geradora tal que o custo/comprimento seja mínimo:

ijc~

Figura 3.3.3: Exemplo de uma rede fuzzy

19

Temos, por um trabalho para este problema (Chang e Lee, 1999), que a solução é dada pela árvore apresentada na figura 3.3.3 para os casos indiferente, pessimista e otimista. Diversos trabalhos são apresentados com a proposta de encontrar a melhor solução para outros problemas com parâmetros fuzzy baseando-se em uma ordenação dos valores. Vamos tomar as árvores geradoras mostradas na figura 3.3.4:

Figura 3.3.4: Exemplo de árvores geradoras para a figura 3.3.3

Estas foram construídas a partir de G dada na figura 3.3.3. Agora, observe os comprimentos fuzzy associados em comparação a solução obtida:

Figura 3.3.5: Comprimento das árvores dadas na figura 4.4

É fácil ver que o comprimento fuzzy associado a (b) é maior do que o custo da solução encontrada previamente por (Chang e Lee, 1999), mas as outras árvores têm um considerável valor de possibilidade de ser menor do que a solução encontrada. Para o caso do problema da árvore geradora mínima, a solução não é determinada pelo nível de satisfação, ou pelo nível de violação de determinada restrição, mas por uma comparação entre as possíveis soluções. Neste caso, devolver apenas a solução de menor custo com maior grau de satisfação, dada alguma ordenação, poderia ser vista como perda de informação. Um conjunto solução onde cada árvore geradora (ou caminho entre dois nós) possui um grau de pertinência associado ao conjunto pode ser muito proveitoso ao decisor.

20

Com base neste fato, o algoritmo para o problema da árvore geradora mínima fuzzy foi

construído de modo a fornecer todo o conjunto solução para o problema (i

iTµ

, ou seja uma

árvore iT com grau de pertinência iµ ao conjunto solução).

(Chanas, 1987), (Okada e Soper, 2000), (Okada, 2001) utilizam a teoria de possibilidade (Zadeh, 1978) para calcular a pertinência de determinada solução para o caminho mínimo, (Blue et al., 1997) também faz o uso desta teoria, embora não explicite isso em seu trabalho. Para construir a solução do problema teríamos que:

1. encontrar todas as soluções candidatas (árvores, caminhos, emparelhamentos, etc.) e;

2. calcular a possibilidade entre todas as soluções encontradas.

O item 1 já é um problema combinatorial. Após resolver este problema ainda teremos que compara-los para calcular o grau de possibilidade de cada candidato a participar da solução: um número que pode ser computacionalmente inviável de calcular.

Portanto, os algoritmos devem ser construídos de modo a evitar cálculos desnecessários, por exemplo, tentando construir apenas as soluções que possuem valor de possibilidade não-nula adotando testes de corte da solução com base nas propriedades de cada problema e/ou ordenando a forma de comparações para que uma solução que possua valor de possibilidade nula seja descartada previamente. Além disso, podemos considerar formas de armazenamento das informações, dentre outros detalhes que facilitariam a resolução do problema.

Mesmo com estes procedimentos, os algoritmos mostraram serem fortemente influenciados pela incerteza dos dados, como já havia sido constatado em (Okada e Soper, 2000) para o problema de caminho mínimo com parâmetros fuzzy. Mesmo com os cortes dos elementos que possuem valor de possibilidade nulo (por conseqüência, pertinência nula), se a incerteza dos dados for significativa, o número de soluções será alto e será um fator complicante no cálculo do conjunto de soluções. Ao buscar o menor caminho entre Boston e Los Angeles tendo números trapezoidais com platô de 20% e desvio de 10%, teríamos 653 caminhos mínimos com grau de pertinência igual a 1. Mesmo que existam 2,52 × 10-

4% façam parte da solução, ainda assim a incerteza acentua a parte combinatorial e torna os algoritmos não eficientes para estes casos.

Para viabilizar a obtenção de uma solução, mesmo que aproximada, foram estudadas algumas heurísticas e meta - heurísticas que utilizassem as características do problema. Considerando que todas as soluções podem participar da solução geral do problema, se o valor de possibilidade for não nulo, temos que:

não estamos interessados em um único elemento, mas em um conjunto;

pensando em termos dos valores de possibilidade para as arestas (Okada,2001), os elementos que possuem os maiores valores de possibilidade são os mais significativos;

Com base nestas características, foi implementado um algoritmo genético (Michalewiskz, 1996) utilizando trabalhos encontrados na literatura.

21

Iremos nos restringir a análise do problema da árvore geradora mínima nos próximos capítulos.

3.4. Árvore Geradora Mínima Fuzzy Nesta seção, a incerteza será tratada no seguinte caso: a estrutura do grafo é crisp e os parâmetros são números fuzzy. Neste caso, a resolução será baseada na teoria de possibilidade de (Zadeh, 1978), de forma a encontrar todo o conjunto solução fuzzy do problema.

3.4.1. Introdução O problema da árvore geradora mínima aparece em uma séria de aplicações, ou como um subproblema destas. Temos vários exemplos como a instalação de linhas telefônicas (ou elétricas) entre um conjunto de localidades utilizando a infra-estrutura das rodovias com o menor uso de material, análise de clusters, armazenamento de informações, dentre outros que podem ser tratados por esta modelagem, que possui eficientes algoritmos como Kruskal, Prim [Seção 3.1]e Sollin. Nos problemas reais parâmetros como tempo e capacidade associados podem ter natureza incerta e portanto, podemos tratá-los sob a ótica de conjuntos fuzzy [Seção 3.2]. 3.4.1.1. Definição do caso clássico Como vimos na [Seção 3.2], seja um grafo G = (N,A) conectado m nós e n arestas com custo associado à cada aresta ( ). O problema consiste em construir uma árvore geradora de menor custo entre todos os nós.

ijc 0≥ijc

Uma árvore geradora *T é uma solução ótima para o problema se, e somente se, satisfaz as seguintes condições: Corte: Para toda aresta da árvore *),( Tji ∈ , temos que klij cc ≤ para toda aresta (k,l) contido no corte formado pela retirada de uma aresta (i,j) de *T . Caminho: Para toda aresta Glk ∈),( , *),( Tlk ∉ , temos que klij cc ≤ para cada aresta (i,j) contido no caminho em *T que conecta o nó k ao nó l. Para o caso clássico, o problema da árvore geradora mínima possui eficientes algoritmos de resolução, como por exemplo o algoritmo Kruskal, Prim e Sollin.

3.4.2. Problema com Grafo Crisp e Parâmetros Fuzzy

No problema da árvore geradora mínima com o grafo crisp e parâmetros fuzzy, temos que o custo (ou comprimento) associado a cada aresta é um número fuzzy. Veja o exemplo da Figura 3.4.1 em que o custo associado a cada aresta é um número triangular fuzzy ),,( ccc :

22

Figura 3.4.1: Exemplo de uma árvore geradora mínima com parâmetros fuzzy

A solução T* encontrada pelo algoritmo proposto por (Chang e Lee, 1999) fornece a mesma árvore para os três casos considerados no trabalho citado: indiferente, otimista e pessimista. Basicamente, o caso otimista é baseado no valor c , o caso pessimista é baseado no valor c e o caso indiferente no valor modal c . O método OERI propõe um cálculo ponderado semelhante ao centro de massa.

Agora , vamos considerar as árvores geradoras da 3.4.2:

Figura 3.4.2: árvores geradoras

Sendo que (a) tem comprimento (70,85,98), (b) (70,90,103) e (c) (95,115,130).

Figura 3.4.3: Comparação dos comprimentos fuzzy

Com base na observação da Figura 3.4.3, percebemos que não existe possibilidade da árvore geradora (c) ter custo menor que a solução encontrada previamente na Figura 3.4.1. Já para as árvores (a) e (b) existe uma possibilidade de que cada uma destas árvores seja menor do que a solução encontrada. Podemos dizer então que existem vários graus de possibilidade de uma árvore pertencer ao conjunto solução do problema. (Blue et al., 2002) e (Chanas, 1987) entendem este valor como o grau de pertinência desta solução no conjunto fuzzy de soluções.

23

(Takahashi, 2003) propôs trabalhar com a teoria da possibilidade (Zadeh, 1978) para tratar a solução deste problema considerando dois pontos de vista:

1. Encontrar a árvore geradora mínima fuzzy de maior grau de possibilidade (extensão do caso crisp)

2. Encontrar uma solução parcial, isto é, um conjunto de árvores, cada uma com um grau de possibilidade de ser a árvore geradora mínima (fuzzy) em relação à solução de grau máximo.

3.4.2.1. Parte 1: Encontrar a árvore geradora mínima com custo fuzzy de maior grau de possibilidade

Para obter a árvore geradora com maior grau de possibilidade de ser a árvore geradora mínima devemos observar as propriedades referentes à comparação de números fuzzy. Utilizando a proposição 3.2.7.1 , podemos determinar a árvore geradora mínima com maior grau de possibilidade. Esta proposição diz que pela comparação dos valores modais de dois números fuzzy podemos verificar qual deles tem o valor de possibilidade igual a 1. Desta forma, o número fuzzy com menor valor modal deve ser associado a solução com maior grau de possibilidade. Com isso, resolvendo o problema crisp associado (grafo G e custo igual ao valor modal do custo fuzzy), encontraremos a árvore geradora com maior grau de possibilidade de ser a árvore geradora mínima.

O teorema 3.2.7.1 pode ser interpretado como uma extensão da abordagem crisp do problema da árvore geradora mínima e resolve o primeiro caso a ser estudado.

3.4.2.2. Parte 2: Encontrar o conjunto fuzzy de soluções do problema da árvore geradora mínima com custo fuzzy

Para a construção da árvore geradora fuzzy, devemos obter todas as árvores geradoras com algum grau de possibilidade de ser a árvore geradora mínima. Enumerar árvores geradoras torna o problema não polinomial. De fato, o número de árvores geradoras em um grafo completo com m nós é da ordem de (Julstrom e G. Raidl, 2002). Portanto, devem ser desenvolvidas técnicas que promovam um corte no espaço de soluções e evitem cálculos desnecessários durante este processo.

2−mm

Para tentar resolver estas questões, será utilizada a árvore geradora mínima fuzzy de maior grau de possibilidade (Seção 3.2.1) para gerar as outras árvores. Com isso deve-se privilegiar a construção das árvores geradoras com grau de possibilidade não nulo, isto é, que possuem alguma chance de serem a árvore geradora mínima, pois as árvores que possuem partes em comum costumam ter maiores graus de possibilidade (Okada e Soper, 2000).

Seja o exemplo da Figura 3.4.1. O grafo G apresentado tem como solução a árvore T*. Usando critério de otimalidade baseado no conjunto de corte ],[ SS , podemos obter outras

24

árvores geradoras. Por exemplo, retirando a aresta (3,4) temos três arestas pertencentes ao conjunto de corte (Figura 3.4.4):

Figura 3.3.4: Arestas que podem substituir a aresta (3,4)

Cada aresta que pode substituir a aresta (3,4) cria uma nova árvore geradora. Cada uma das três possíveis estão representadas Figura 3.3.5, com seus respectivos custos fuzzy:

Figura 3.3.5: Árvores criadas pelas substituições da aresta (3,4) na árvore T*

Portanto, se retirarmos k arestas (k = 1,...n-1) da árvore T*, podemos encontrar outras árvores geradoras. Quando k = n - 1, todas as arestas de T* serão retiradas. Então resolvemos o problema com o grafo G’ = G – T* e continuamos a enumeração a partir de T’, comparando as novas árvores com T* até a enumeração completa das árvores, quando |A| < |N| -1.

Podemos calcular a possibilidade de cada uma destas árvores serem menores do que T* durante o processo de construção das árvores geradoras. Por exemplo, quando retiramos a aresta (3,4) na Figura 3.4.4, encontramos três arestas que vão construir outras três árvores. Quando for feito o cálculo da possibilidade de uma destas ser menor que T*, o cálculo será feito apenas entre a aresta (3,4) e cada aresta do corte, segundo definição de possibilidade dada por (Okada, 2001). Portanto, o cálculo de possibilidade será realizado entre k arestas que diferenciam a árvore geradora T* e as demais árvores.

A construção das árvores pode ser orientada de forma que o descarte das árvores que não farão parte do conjunto solução (possibilidade nula) sejam facilitadas. Usando o teste de corte proposto em (Blue et al., 2002) para o caso de caminho mínimo, podemos descartar árvores geradoras com as seguintes características:

Sup{supp{ Tl~ }} < inf{supp{

kTl~ }}, Τ∈∀ kT

onde T é a árvore encontrada a partir do grafo crisp G )),(}},~{sup{( Ajicsuppc ijij ∈= e é p conjunto de árvores geradoras de G. Τ

25

No momento em que o número de arestas for igual a k = |N| - 1, a próxima árvore geradora a ser a base para enumeração de outras será calculada a partir de G }})~{inf{( ijij csuppc = . A árvore geradora fuzzy T composta pelas mesmas arestas da solução crisp de G será comparada a T*. Caso esta árvore seja descartada pelo critério de corte dado acima, então todas as árvores geradoras que ainda não foram enumeradas também serão descartadas.

Abaixo, o algoritmo proposto por (Takahashi, 2003) para encontrar a árvore geradora com maior grau de possibilidade de ser a mínima em um grafo crisp com custos fuzzy.

3.4.2.3. Algoritmo AGMCF (Takahashi, 2003):

O algoritmo está dividido em três procedimentos. O primeiro é o programa principal:

Procedimento 1:

Passo 0: (Iniciar os parâmetros) Encontre a árvore geradora mínima fuzzy T* associada a solução do grafo crisp GC com custo }{inf 1)( uc uij ij == µ . Faça }}~{sup{ *Tlsupp=δ .

Passo 1: (Encontrar árvores com arestas coincidentes a T*) Para k = 1 até k = |N| - 2, faça:

- Para cada k arestas da árvore T* (estas k arestas 'R∈ , conjunto das arestas retiradas da árvore), execute o procedimento 2.

Passo 2: (Encontrar árvores sem arestas coincidentes com T*) Faça:

1:. . Seja . *1 TAA −← ),( 11 ANG =

2: Encontre através da resolução do grafo crisp 1T 1G com custo }}~{inf{ csuppcij = .

3: Se não houver mais árvores geradoras ou se δ>}}~{inf{ 1Tlsupp , então FIM. Caso contrário, para k = 1 até |N| - 2, faça:

-Para cada k arestas da árvore (estas k arestas '1T R∈ ), execute o procedimento 3.

Procedimento 2: (Construir as árvores geradoras e calcular a possibilidade)

Passo 0: (Inicialização dos parâmetros) Sejam k, T e R’ dados. Faça . ijRji cl ~'~'),(∑ ∈←

Passo 1: (Comparação entre arestas) Para cada k arestas ],[),( SSts ∈ (estas k arestas ) que não formam ciclo com ''R∈ )'( RT − , faça:

- ∑ ∈← ijRji cl ~''~''),(

- Se então descarte esta árvore. Caso contrário,δ>+− }''~'~~{ lllf T )'''( llPoss ≤←ω

- Faça ''),(},,max{ RjiDD ijij ∈← ω

Passo 2: Caso não existam mais árvores geradoras a serem formadas, volte ao Passo 1 do procedimento 1.

26

A diferença entre o segundo e o terceiro procedimento é o cálculo da possibilidade. Enquanto o segundo procedimento considera as árvores interativas e usa o cálculo da possibilidade definido por (Okada, 2001), o terceiro procedimento usa o cálculo clássico de (Dubois e Prade, 1980).

Procedimento 3: (Construir as árvores geradoras e calcular a possibilidade)

Passo 0: (Inicialização dos parâmetros) Sejam k, T, e R’ dados. Calcule . *~Tl Tl

~

Passo 1: (Comparação entre arestas) Para cada k arestas ],[),( SSts ∈ (estas k arestas ) que não formam ciclo com ''R∈ )'( RT − , faça:

- Calcule ∑∑ ∈∈ +−← ijRjiijRjiT ccll ~~~''~''),('),(

- Se , então descarte esta árvore. Caso contrário, δ>}''~inf{l )''( *TllPoss ≤←ω . - Faça TjiDD ijij ∈← ),(},,max{ ω

Passo 2: Caso não existam mais árvores geradoras a serem formadas, volte ao Passo 2 do procedimento 1.

Mesmo com os teste de corte previsto no algoritmo, a enumeração das árvores que farão parte da solução ainda torna o problema de difícil resolução. No algoritmo temos que escolher os subconjuntos de arestas a serem retirados e quais grupos podem substituir cada um destes subconjuntos. Isto faz com que o problema ainda seja combinatorial.

3.5. Computação Evolutiva - O Algoritmo Genético

Conforme visto nas seções anteriores, encontrar a Arvore Geradora Mínima (AGM) é um problema complexo cujos métodos envolvem busca em um espaço que cresce com aumento do número de vértices.

Por outro lado, quando trabalhamos com grafos cujas arestas possuem custos fuzzy, a complexidade aumenta ainda mais. O fato de termos que escolher os subconjuntos de arestas a serem retirados e quais grupos poderá substituir cada um destes subconjuntos, faz com que o problema seja combinatorial. O número de árvores geradoras é da ordem de mm-

2, m = |N| (Raidl e Julstrom, 2001) em um grafo completo. Por exemplo, em um grafo completo com 5 nós temos 125 árvores.

Se for observado que a solução é composta pelo conjunto de árvores com maior grau de possibilidade de ser menor ou igual a T*, pode-se propor uma heurística para encontrar uma solução aproximada satisfatória para o problema.

Entre as possíveis heurísticas, estão aquelas que imitam processos naturais em busca de equilíbrio, em geral otimizado. Muito foi feito nesses últimos 30 anos para refinar essas heurísticas, resultando nos seguintes principais métodos:

• Simulated Annealing (Laarhoven, 1987)

• Redes Neurais Artificias (Haykin, 1999)

27

• Computação Evolutiva (Koza, 1992), (Back,2000), (Back,2000), (Michalewicz,1996)

Nesta seção descreveremos um dos algoritmos do conjunto Computação Evolutiva, o Algoritmo Genético (AG) (Koza,1992), e quais recursos ele traz para tentar encontrar a AGM com custos nebulosos.

3.5.1. Algoritmos Evolutivos

Algoritmos evolutivos são algoritmos de busca probabilística que simulam a evolução através da Seleção Natural, conforme a teoria de Darwin (Larranaga, 1999). Eles foram propostos pela primeira vez por (Bremermann, 1965) e (Reichenberg, 1973). Em 1975, Holland apresentou o Algoritmo Genético (GA, Genetic Algorithms) (Fogel, 1962). Entretanto, apenas recentemente tais algoritmos têm sido estudados e aplicados a problemas de otimização combinatória, como o TSP (Larranaga, 1999).

No campo de algoritmos que imitam processos evolutivos naturais, chamados coletivamente de Computação Evolutiva, existem ainda:

•• Programação Evolutiva (Larranaga, 1999)

•• Estratégias Evolutivas (Bremmerman, 1973)

•• Sistemas Classificadores (Koza, 1992)

•• Programação Genética (Koza, 1992)

Nossa escolha recai sobre o AG por um forte motivo:

O problema pode ser representado de formas simples além de podermos usar os operadores tradicionais da técnica de AG, enquanto que a representação seria difícil ou inviável em outras técnicas.

3.5.2. Algoritmo Genético

O Algoritmo Genético (AG) é considerado parte da Computação Evolutiva (CE), mas sua gênese praticamente marcou o surgimento da CE (Fogel, 1962).

Conforme o nome sugere, Algoritmo Genético é uma técnica de busca da solução de um problema inspirada e modelada a partir da teoria de evolução das espécies, de Darwin, onde as características dos indivíduos que os tornam mais adaptados ao ambiente aumentam suas chances de deixar descendentes. A repetição desse processo ao longo de muitas e muitas gerações, associados à mutação e ao cruzamento sexuado, cria espécies em adaptadas ao seu habitat. Assim, se cada indivíduo representa uma possível solução do problema e se a função de adaptação ao ambiente (chamada de função de fitness ou simplesmente de fitness) representar um grau de qualidade daquela solução, quanto maior o valor dessa função, mais próximo da solução ideal aquele indivíduo estará.

A solução de um problema através de Algoritmo Genético ocorre da seguinte forma:

•• É criada, por um processo aleatório ou não, uma lista de possíveis soluções para o problema. Essa lista é chamada população.

28

•• Cada item dessa lista é chamado de indivíduo ou cromossomo, que por sua vez é composto de genes.

•• Cada gene é codificado segundo uma representação, que normalmente incorpora conhecimento do problema.

•• Um processo iterativo é aplicado sobre essa população, gerando novos indivíduos através de reprodução sexuada e/ou mutação em indivíduos escolhidos por um processo de seleção, que leva em conta sua adaptação (fitness).

•• O fitness do indivíduo é tanto maior quanto melhor solução esse indivíduo for para o problema.

•• A cada iteração, diz-se que surgiu uma nova geração de indivíduos.

•• A repetição dessa iteração, até que um critério de parada seja satisfeito, causa a evolução da população original de possíveis soluções para uma população nova, com melhores possíveis soluções.

A solução do problema é dada pelo indivíduo com maior fitness da última população gerada. A figura abaixo sintetiza o Algoritmo Genético.

Gen:=0

Critério deParada Satisfeito?

Cria PopulaçãoInicial Aleatória

AtribuiResultado

Gen:=Gen+1

Selecione umIndivíduo Baseado

no Fitness

i:=0

i=M?

Selecione Probabilisticamenteuma Operação Genética

Selecione doisIndivíduos Baseado

no Fitness

Selecione umIndivíduo Baseado

no Fitness

i:=i+1Realize Reprodução Realize Mutação

Copie na NovaPopulação

Realize Crossover Insira Mutante naNova População

Insira os Dois Descendentes

na NovaPopulação

i:=i+1

Calcula Fitness de CadaIndivíduo da População

Fim

Sim

Não

Sim

Não

Gen:=0

Critério deParada Satisfeito?

Cria PopulaçãoInicial Aleatória

AtribuiResultado

Gen:=Gen+1

Selecione umIndivíduo Baseado

no Fitness

i:=0

i=M?

Selecione Probabilisticamenteuma Operação Genética

Selecione doisIndivíduos Baseado

no Fitness

Selecione umIndivíduo Baseado

no Fitness

i:=i+1Realize Reprodução Realize Mutação

Copie na NovaPopulação

Realize Crossover Insira Mutante naNova População

Insira os Dois Descendentes

na NovaPopulação

i:=i+1

Calcula Fitness de CadaIndivíduo da População

Fim

Sim

Não

Sim

Não

Figura 3.5. 1: fluxograma do algoritmo genético, adaptado de (Blue, 2002)

Na figura acima, M é o número de indivíduos, i é o contador de indivíduos e Gen é o número de gerações. O Critério de Parada é estabelecida em função do tipo do problema e normalmente é um par de condições: Critério de Convergência ou Número Máximo de Gerações. Assim, se o Critério de Convergência (p.e. fitness acima de um certo valor) não

29

for atingido, o Número Máximo de Gerações garante que o algoritmo não espere eternamente por uma resposta adequada.

Reprodução, mutação e crossover são operações pré-definidas que agem sobre um ou dois indivíduos da população antiga, no processo de formar a nova população. Cada tipo de problema requer um conjunto apropriado de operações, normalmente associado à representação adotada. Muitas vezes, operadores que geram descendentes viáveis em uma representação, podem gerar indivíduos infactíveis em outra.

Cada indivíduo (ou cromossomo) é formado por uma sequência de genes, caracteres de um alfabeto, codificando ou representando uma das possíveis soluções do problema estudado. A escolha do alfabeto e tipo de genes está intimamente ligada ao problema. Por exemplo, um problema de busca de mínimo unidimensional de f(x) pode ter representação binária, enquanto que o mesmo problema n-dimensional talvez tenha melhores resultados com um vetor de números reais.

Logo, é preciso considerar três aspectos para aplicar o algoritmo genético a um problema:

1. Representação

2. Fitness

3. Operadores

3.5.3. Representação

Representação, ou esquema de representação, é a maneira que possíveis soluções do problema podem ser codificadas na forma de uma estrutura cromossômica (Koza, 1992). Uma estrutura cromossômica é uma sequência de caracteres de um alfabeto. Por exemplo, os cromossomos humanos são cadeias de "caracteres" do alfabeto do DNA: A (adenina), C (citosina), G (guanina) e T (timina).

Normalmente, em AG, os cromossomos possuem tamanho fixo, ao contrário da programação evolutiva, onde os programas evoluídos têm, por definição, comprimento variável. Porém, nada impede que se desenvolva cromossomos de comprimento variável para uso com AG. Apenas a complexidade e a utilidade de tal representação limitariam esse desenvolvimento.

Desde sua concepção em 1975, os Algoritmos Genéticos vem acumulando representações, cada qual com seus respectivos operadores. A lista abaixo mostra alguns das representações mais conhecidas.

•• Binária

•• Caminho

•• Adjacência

•• Ordinal

•• Matriz

•• Ponto flutuante

•• Inteiro

30

As representações Caminho, Adjacência e Ordinal são recomendadas para encontrar a AGM com custos Fuzzy. A representação de matriz, apesar de interessante, foi deixada de lado devido à sua considerável complexidade de implementação. A representação binária é clássica para AG, enquanto que as outras duas são generalizações da representação binária para outros domínios numéricos.

3.5.4. Fitness

Fitness é o nome do valor associado a um indivíduo através de uma relação da função-objetivo do problema. Essa relação é chamada de função de fitness. Por definição (Koza, 1992), indivíduos mais adaptados tem fitnesses maiores. Porém, não necessariamente a função-objetivo de um problema é maior para indivíduos melhores. Pegue o caso da minimização da a função-objetivo f(x): quanto menor o valor de f(x), melhor o indivíduo. Como, por definição, indivíduos mais adaptados tem maiores fitnesses, a função de fitness deve estar inversamente relacionada à função-objetivo.

3.5.5. Operadores Genéticos Operadores Genéticos são funções especiais, binárias ou unárias, que geram novos indivíduos a partir de antigos. O ciclo seleciona indivíduos-aplica operadores, agindo sobre uma população, é o responsável pela evolução dessa.

A tabela a seguir sumaria os operadores já desenvolvidos, agrupando-os por representação.

Representação Operadores Autores

Binária

Classical + repair operator Lidd (1991)

Caminho

Partially-Mapped Crossover Goldberg e Lingle (1985)

Order-Crossover Davis (1985)

Order Based Crossover Syswerda (1991)

Position Based Crossover Syswerda (1991)

Heuristic Crossover Grefenstette (1987b)

Edge Recombination Crossover Whitley et. al. (1989)

Sorted Match Crossover Brady (1985)

Maximal Preservative Crossover Mühlenbein et. al. (1989)

Voting Recombination Crossover Mühlenbein (1989)

Alternating-Position Crossover Larraña et. al. (1996a)

Displacement Mutation Michalewicz (1992)

Exchange Mutation Banzhaf (1990)

31

Insertion Mutation Fogel (1988)

Simple Inversion Matation Holland (1975)

Inversion Mutation Fogel (1990)

Scramble Mutation Syswerda (1991)

Adjacency

Alternating Edge Crossover Grefenstette et al. (1985)

Subtour Chunks Crossover Grefenstette et al. (1985)

Heuristic Crossover 1 Grefenstette et al. (1985)

Heuristic Crossover 2 Jog et al. (1989)

Heuristic Crossover 3 Suh e Van Gucht (1987)

Ordinal

Classical operators Grefenstette et al. (1985)

Matrix

Intersection Crossover Operator Fox e Mc Mahon (1987)

Union Crossover Operator Fox e Mc Mahon (1987)

Tabela 3.5.1: operadores do Algoritmo Genético, ordenados por representação (Pedrycs, 1998)

32

4. Revisão Bibliográfica

Foram encontrados três trabalhos tratando do problema da Arvore Geradora Mínima Fuzzy:

Em (Chunde, 1996), a estrutura considerada tem nós crisp (isto é σ (i) = 1, ⎠ i ε Ν) e arcos com graus de pertinência associados (isto é µij ε [0,1], ⎠ (i,j) ε A). São propostos três algoritmos considerando algumas situações da rede, sem considerar o custo das arestas como números fuzzy.

(Chang e Lee, 1999) analisaram os problemas da árvore geradora mínima, PERT e de caminho mínimo, utilizando algoritmos clássicos e um método proposto pelos autores (OERI), para o ordenamento de números fuzzy em problemas de redes. Este resolve o problema utilizando um algoritmo crisp para obter a solução.

(Takahashi, 2003) desenvolveram um estudo do problema da árvore geradora mínima com estrutura crisp e parâmetros fuzzy baseando-se na teoria de possibilidade (Zadeh, 1978), de forma a encontrar todo o conjunto solução fuzzy do problema.

Nos próximos capítulos serão propostos algoritmos com base nos estudos destes trabalhos e do capítulo 3.

33

5. Propostas

Utilizaremos a proposição 3.2.7.1 para determinarmos qual a árvore geradora mínima com maior grau de possibilidade dentre as demais (T*), pois ela nos garante que se encontrarmos a árvore com o custo de menor valor modal, encontraremos a árvore geradora com maior grau de possibilidade de ser a árvore geradora mínima fuzzy. Isso será obtido pelo grafo crisp Gc, com custos das arestas igual ao valor modal do custo associado à ela, usando o algoritmo de Kruskal.

Esta árvore geradora mínima (T*) será utilizada como base de comparação para realizarmos o cálculo de possibilidade das demais árvores geradoras fuzzy.

Será utilizado um algoritmo genético para tentarmos contornar a questão da complexidade e encontrarmos uma boa solução para o problema proposto. Este algoritmo será baseado no estudo feito em (Takahashi, 2003). Os detalhes do algoritmo serão descritos no capítulo 6.

Obteremos dois formatos de soluções para resolver o problema de AGMF. Um será baseado em encontrar um número parametrizado de árvores que possuem maior grau de possibilidade de estar na solução, dentre as árvores geradoras encontradas. O outro será baseado em encontrar a possibilidade de cada aresta do grafo original pertencer à solução.

34

6. Implementação

6.1 Algoritmo

Dado um grafo com estrutura crisp e com parâmetros representados por números triangulares fuzzy, queremos encontrar um conjunto de Árvores Geradoras (T) que tenham maior possibilidade de ter custo menor ou igual à árvore geradora mínima associada ao grafo com parâmetros crisp (T*). Sabendo que o problema da árvore geradora mínima com parâmetros fuzzy possui as seguintes caracteríscticas:

Um conjunto fuzzy de soluções em que cada árvore geradora possui uma possibilidade de ser a árvore geradora mínima;

Necessidade de avaliar uma grande quantidade de árvores geradoras para a construção do conjunto fuzzy de soluções;

Estas características levaram a proposta de desenvolver um algoritmo genético nos moldes propostos por (Holland, 1975) para tentar encontrar uma boa solução para o problema proposto. A população é formada por indivíduos (árvore geradoras) que evoluem por meio de operadores de cruzamento, que geram novos indivíduos que herdam determinadas características dos indivíduos-pai. Procurando um subconjunto fuzzy de soluções, a medida de adaptação (também conhecida como função de fitness) é utilizada de forma a privilegiar a reprodução dos indivíduos com maior valor de fitness (no caso, o valor de possibilidade da árvore geradora ser a árvore geradora mínima).

Este algoritmo foi baseado nos estudos de (Takahashi, 2003) para o problema da árvore geradora mínima utilizando a interatividade das arestas.

Codificação: Cada cromossomo representa uma árvore geradora, com seus genes representando as arestas do grafo. Seja um grafo G : (N,A) e seja m = |N|. Uma árvore geradora será representada por m – 1 arestas, que conectam todos os nós e não formam ciclos. Desta forma, um cromossomo representando uma árvore geradora possui m-1 bits (figura 6.1.1).

Figura 6.1.1: Exemplo de cromossomo representando uma árvore

35

Inicialização: a inicialização da população é feita com uma adaptação do algoritmo de Kruskal, que constrói árvores sem levar em conta o custo associado às arestas, encontrando árvores aleatoriamente em um grafo ou subgrafo.

Cruzamento: dois pais são unidos, gerando um subgrafo do grafo original. Em seguida, o operador de inicialização é aplicado sobre esse subgrafo para gerar um novo indivíduo. Como esse resultado é aleatório, o novo indivíduo tem chance de possuir arestas de um dos pais ou de ambos. Para aproveitar esse caráter aleatório, criamos o operador de crossover com um parâmetro que repete a operação n vezes, guardando a melhor. Isso aumenta a explotação do algoritmo.

1

2

3

4

5

1

2

3

4

5

1

2

3

4

5

1

2

3

4

5

T1

T2

Subgrafo Filho

1

2

3

4

5

1

2

3

4

5

1

2

3

4

5

1

2

3

4

5

T1

T2

Subgrafo Filho

Figura 6.1.2: Exemplo de recombinação entre duas árvores

Mutação: é feita sorteando-se n arestas do indivíduo e trocando-as por outras arestas que pertença ao corte. Assim como o cruzamento, esse procedimento é aleatório. Entretanto, não exploramos a mutação como exploramos o cruzamento.

1

2

3

4

5

Grafo

1

2

3

4

5

Árvore

Aresta escolhida

1

2

3

4

5

Corte

1

2

3

4

5

Arvore resultante

1

2

3

4

5

Grafo

1

2

3

4

5

Árvore

Aresta escolhida

1

2

3

4

5

Corte

1

2

3

4

5

Arvore resultante Figura 6.1.3: Exemplo de mutação de uma árvore

Fitness: o valor de fitness (medida de adaptação do individuo ao meio) é dado pela possibilidade da árvore em questão ter custo total menor ou igual à árvore geradora mínima de maior grau de possibilidade (T*), conforme descrito em 3.2.7 e 3.3.2.1. Essa árvore, T*, tem custo mínimo quando considerado apenas o custo modal de cada aresta e é obtida com a aplicação do algoritmo Kruskal.

36

Diversidade: a chance de obter-se uma árvore com maior possibilidade de ser a AGM aumenta em uma população de soluções mais diversas. Para estudar o comportamento da diversidade da população, foi definida uma medida:

Diversidade populacional é a razão entre o número de indivíduos únicos e o tamanho da população.

Variabilidade Genética: de estudos sobre AG (Holland, 1975), sabemos que a variabilidade cai conforme o fitness aumenta. Isso ocorre porque a chance de deixar descendentes é maior para fitnesses maiores. Conhecendo esse fato, o algoritmo implementado já traz uma rotina de injeção de variabilidade na população. São três mecanismos:

Seleção Elitista +: é preservada uma certa porcentagem de melhores indivíduos

Seleção Elitista -: é preservada uma certa porcentagem de piores indivíduos

Imigração: a cada geração, é injetada uma porcentagem de novos indivíduos, gerados com o mesmo procedimento da inicialização da população.

Registro Experimental: todos experimentos são registrados em logs no formato CSV. São armazenados os melhores indivíduos, seu fitness, geração e diversidade populacional.

Atualização de Grau de Possibilidade das Arestas: a atualização do grau de possibilidade de cada aresta durante as gerações da população é realizada cada vez que um novo indivíduo é criado, pela seguinte expressão:

)}(,{max ufitnessDD ijuijij ∈=

sendo u um novo indivíduo que contem a resta (i,j). No final das gerações, D fornecerá o grau de possibilidade de cada aresta pertencer à árvore geradora mínima.

A estrutura do algoritmo genético é dado abaixo:

ALGORITMO GENÉTICO:

Passo 0: Criar a população inicial, com k indivíduos, pelo método de Kruskal adaptado. Sejam P a população, G o número máximo de gerações e TL o tempo limite. Calcule o valor de fitness de cada indivíduo e armazene em M os n melhores indivíduos;

Passo 1: Para i = 1 até G ou tempo > TL, faça:

1. Selecione uma percentagem dos indivíduos de P para recombinação, proceda a operação e aloque os novos indivíduos na população intermediária (Pi).

2. Selecione uma percentagem dos indivíduos de P para mutação, proceda a operação e aloque os novos indivíduos na população intermediária (Pi).

3. Selecione uma percentagem dos melhores indivíduos de P, uma percentagem dos piores indivíduos de P e complete a Pi com imigrantes.

4. Faça P← Pi. Calcule o valor do fitness de cada indivíduo de P.

37

5. Atualize M.

6. Atualize Dij.

Passo 2: Devolva M e D ao decisor.

38

6.2. Resultados Experimentais Dois grafos foram utilizados para os testes. O primeiro, encontrado em (Ali et al., 2000), trata-se de uma rede óptica de telecomunicações com as respectivas distâncias entre as cidades. O segundo, encontrado no banco de dados (OR-Library), compreende um grafo de maior complexidade que foi utilizado para analisarmos o comportamento do algoritmo para problemas maiores.

O algoritmo foi implementado em MatLab 6.5 R13 e todos os testes foram realizados em um computador AMD Athlon TM XP 2400+, com 2.00 GHz e 256 Mb RAM.

6.2.1 Grafo Itália

O grafo Itália (Figura 6.2.1.1 e Figura 6.2.1.2) foi encontrado em (Ali et al., 2000) e corresponde a uma rede óptica de telecomunicações com as respectivas distâncias entre as cidades. Considerando os custos fuzzy como números triangulares do tipo LR com valor modal igual ao comprimento das arestas e desvio de 10% em relação a este valor (Tabela 6.2.1.1). Ao todo, o grafo é constituído por 21 nós e 36 arestas.

39

1

2 3

4 5 6 7 8 9

10 11 12

13 14 15 16 17

18

1920 21 22

23

24 25 26

27 28

29 30

31

32 33

34

35 36

Figura 6.2.1.1 – Grafo Itália

Figura 6.2.1.2 – Grafo Itália plotado em MatLab

Arestas l c u Arestas l C u Arestas l c u 01-Bolzano-Milano 126 140 154 13-Genova-Firenze 135 150 165 25-Roma-Napoli 162 180 19802-Bolzano-Verona 99 110 121 14-Genova-Pisa 108 120 132 26-Pescara-Napoli 180 200 19803-Bolzano-Trieste 189 210 231 15-Bolgano-Firenze 49 55 61 27-Pescara-Bari 243 270 29704-Milano-Verona 99 110 121 16-Bolgano-Ancona 180 200 220 28-Napoli-Bari 189 210 23105-Milano-Torino 85 95 105 17-Firenze-Pisa 54 60 66 29-Napoli-Potenza 81 90 9906-Milano-Genova 81 90 99 18-Firenze-Peragia 99 110 121 30-Napoli-Palermo 271 310 24107-Verona-Venezia 81 90 99 19-Firenze-Roma 162 180 198 31-Napoli-Catamin 315 350 38508-Verona-Bolgano 85 95 105 20-Pisa-Roma 171 190 209 32-Bari-Potenza 90 100 11009-Venezia-Trieste 76 85 94 21-Ancona-Pescara 117 130 143 33-Cagiliari-Palermo 378 420 46210-Venezia-Bolgano 85 95 105 22-Peragia-Pescara 153 170 187 34-Potenza-Catanzaro 180 200 22011- Torino-Genova 81 90 99 23-Peragia-Roma 108 120 132 35-Catanzaro-Catamin 189 210 23112-Genova-Bolgano 117 130 143 24-Roma-Cagiliari 410 460 506 36-Palermo-Catamin 135 150 165

Tabela 6.2.1.1 – Dados das Arestas da Figura 6.2.1.1

Aproximadamente 5000 árvores foram analisadas para este grafo, sendo que temos como limitante superior 2.2x1011 candidatos, considerando as combinações de arestas a serem retiradas e as combinações dos candidatos a substituí-las. Em um grafo completo com o mesmo número de nós, teríamos cerca de 1.3x1025 possíveis árvores geradoras.

Em 10 testes realizados obtivemos o resultado abaixo (Tabela 6.2.1.2), no qual cada árvore é constituída por uma combinação específica de arestas e o valor de fitness corresponde ao

40

grau de possibilidade da árvore encontrada ter custo menor ou igual à árvore geradora mínima encontrada utilizando os parâmetros crisp.

Solução Árvores Fitness Custos 1 [2-6-7-9-10-11-14-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9814 [2406 2675 2944] 2 [2-4-5- 6-8-9-10-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9814 [2405 2675 2945] 3 [2-4-5-8-9-10-11-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9814 [2405 2675 2945] 4 [2-4-5-7-8-9-11-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9907 [2401 2670 2939] 5 [2-4-5-7-9-10-11-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9907 [2401 2670 2939] 6 [2-4-5-6-7-8-9-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9907 [2401 2670 2939] 7 [2-4-5-6-7-9-10-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9907 [2401 2670 2939] 8 [2-4-6-8-9-10-11-15-17-18-21-22-23-25-29-32-33-34-35-36] 0.9907 [2401 2670 2939] 9 [2-4-6-7-8-9-11-15-17-18-21-22-23-25-29-32-33-34-35-36] 1.0000 [2397 2665 2933]

10/T* [2-4-6-7-9-10-11-15-17-18-21-22-23-25-29-32-33-34-35-36] 1.0000 [2397 2665 2933] Tabela 6.2.1.2 - Melhores Indivíduos encontrados

Pelo fato da árvore geradora mínima com parâmetros crisp ser aquela que tem maior possibilidade de ser a melhor de todas as árvores geradoras, ela representa o melhor indivíduo da população (Figura 6.2.1.3).

Figura 6.2.1.3 - Melhor Indivíduo encontrado

Como vemos no gráfico de convergência (Figura 6.2.1.4), o melhor indivíduo foi encontrado por volta da 20ª geração, o que mostra que para este problema o algoritmo foi

41

bastante eficiente, pois apesar de utilizarmos uma população pequena (50 indivíduos) o melhor individuo foi encontrado rapidamente.

Figura 6.2.1.4 – Gráfico de Convergência

O grau de possibilidade de cada aresta participar da solução pode ser visto na tabela abaixo (Tabela 6.2.1.3).

Aresta Possibilidade Aresta Possibilidade Aresta Possibilidade

1 0.9443 13 0.9259 25 1.0000 2 1.0000 14 0.9814 26 0.9628 3 0.8168 15 1.0000 27 0.8349 4 1.0000 16 0.9443 28 0.7989 5 0.9907 17 1.0000 29 1.0000 6 1.0000 18 1.0000 30 0.8195 7 1.0000 19 0.8893 31 0.7455 8 1.0000 20 0.8711 32 1.0000 9 1.0000 21 1.0000 33 1.0000

10 1.0000 22 1.0000 34 1.0000 11 1.0000 23 1.0000 35 1.0000 12 0.9628 24 0.9265 36 1.0000

Tabela 6.2.1.3 - Grau de possibilidade das arestas

O tempo total consumido para a realização de cada teste foi de 55 segundos, em média.

42

Os parâmetros iniciais foram variados para analisar o comportamento do algoritmo. No entanto, os resultados acima podem ser obtidos com os seguintes dados iniciais:

- Número de gerações: 100

- Tempo limite (em minutos): 5

- Tamanho da população: 50

- Número de melhores indivíduos armazenados: 10

- Taxa de Cruzamento: 30%

- Taxa de Mutação: 20%

- Numero de tentativas para obtenção de melhor individuo após crossover: 5

- Taxa de Preservação de indivíduos: 20%

- Taxa de melhores indivíduos preservados: 10%

- Taxa de piores indivíduos preservados: 10%

Para a realização do teste mais completo, os seguintes parâmetros foram utilizados:

- Número de gerações: 5000

- Tempo limite (em minutos): 120

- Tamanho da população: 100

- Número de melhores indivíduos armazenados: 10

- Taxa de Cruzamento: 30%

- Taxa de Mutação: 20%

- Numero de tentativas para obtenção de melhor individuo após crossover: 5

- Taxa de Preservação de indivíduos: 20%

- Taxa de melhores indivíduos preservados: 10%

- Taxa de piores indivíduos preservados: 10%

O resultado obtido foi igual ao listado acima, porém o tempo total consumido foi de aproximadamente 40 minutos.

A figura 6.2.1.5 mostra o comportamento da diversidade da população em relação ao número de gerações. O índice de diversidade médio é de aproximadamente 0.6, o que significa que dos 50 indivíduos que compõem a população, cerca de 30 mantiveram-se distintos em cada geração.

43

Figura 6.2.1.5 – Gráfico de Diversidade Populacional

6.2.2 Grafo 274

Para este segundo caso, foi utilizado um grafo de maior complexidade (figura 6.2.2.1) encontrado no banco de dados (OR-Library), considerando os custos fuzzy como números triangulares do tipo ]1.1,,- 9.0[ α+α ccc onde α∈[0,10]. Ao todo, o grafo é constituído por 50 nós e 274 arestas.

Figura 6.2.2.1 – Grafo 274 plotado em MatLab

44

Para este grafo temos em torno de 3.55x1081 árvores geradoras e aproximadamente 300.000 árvores foram analisadas para a obtenção do melhor resultado.

Em 10 testes realizados obtivemos o resultado abaixo (Tabela 6.2.2.1), no qual cada árvore é constituída por uma combinação específica de arestas e o valor de fitness corresponde ao grau de possibilidade da árvore encontrada ter custo menor ou igual à árvore geradora mínima modal

Solução Árvores Fitness Custos

1

[3-6-7-13-17-21-24-32-41-47-48-55-61-68-72-75-81-86-89-98-100-118-127-134-138-142-151-156-161-168-179-180-181-183-186-188-

193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1824 2085 2352]

2

[6-7-13-17-24-32-41-47-48-55-61-68-72-73-75-81-86-89-98-100-118-124-134-138-142-151-156-160-161-168-179-180-181-183-186-

188-193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1825 2085 2353]

3

[6-7-17-24-32-41-47-48-55-61-64-68-72-73-75-81-86-89-98-100-118-124-134-138-142-151-156-160-161-168-179-180-181-183-186-

188-193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1827 2085 2352]

4

[6-7-17-24-32-41-47-48-55-61-64-68-72-75-81-86-89-98-100-118-123-134-138-140-142-151-156-160-161-168-179-180-181-183-186-

188-193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1831 2085 2349]

5

[6-7-13-17-24-32-41-47-48-55-61-68-72-75-81-86-89-98-100-118-124-134-138-140-142-151-156-160-161-168-179-180-181-183-186-

188-193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1826 2085 2352]

6

[6-7-17-24-32-41-47-48-55-61-64-68-72-75-81-86-89-98-100-118-124-127-134-138-140-142-151-156-161-168-179-180-181-183-186-

188-193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1824 2085 2353]

7

[6-7-17-32-41-47-48-55-61-64-68-72-75-81-86-89-98-100-118-124-134-138-140-142-151-156-160-161-168-179-180-181-183-186-188-

193-195-197-206-219-225-228-231-246-250-252-253-254-268]

1.0000

[1827 2085 2352]

8

[6-7-17-21-24-32-41-47-48-55-61-64-68-72-75-81-86-89-98-100-118-124-134-138-142-151-156-160-161-168-179-180-181-183-186-

188-193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1829 2085 2349]

9

[3-6-7-17-24-32-41-47-48-55-61-64-68-72-75-81-86-89-98-100-118-134-138-140-142-151-156-160-161-168-179-180-181-183-186-188-

193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1829 2085 2351]

10/T*

[6-7-17-24-32-41-47-48-55-61-64-68-72-75-81-86-89-98-100-118-124-134-138-140-142-151-156-160-161-168-179-180-181-183-186-

188-193-195-197-206-219-225-231-246-250-252-253-254-268]

1.0000

[1828 2085 2351]

Tabela 6.2.2.1 - Melhores Indivíduos encontrados

Pelo fato da árvore geradora mínima modal ser aquela que tem maior possibilidade de ser a melhor de todas as árvores geradoras, ela representa o melhor indivíduo da população (Figura 6.2.2.2).

45

Figura 6.2.2.2 - Melhor Indivíduo encontrado

Como vemos no gráfico de convergência (Figura 6.2.2.3), o melhor indivíduo foi encontrado por volta da 800ª geração. Isso se deve ao fato do grafo ser de grande complexidade e por adotarmos uma população relativamente pequena (100 indivíduos). Caso optássemos por trabalhar com uma população maior, provavelmente a convergência seria obtida com um número menor de gerações.

Figura 6.2.2.3 – Gráfico de Convergência

46

O grau de possibilidade de cada aresta participar da solução pode ser visto na tabela abaixo (Tabela 6.2.2.2).

Arestas Poss. Arestas Poss. Arestas Poss. Arestas Poss. Arestas Poss. Arestas Poss. 1 0.9869 48 1.0000 95 0.9887 139 0.9925 186 1.0000 232 0.9887 2 0.9886 49 0.9887 96 0.9849 140 1.0000 187 0.9962 233 0.9981 3 1.0000 50 0.9981 97 0.9848 141 0.9849 188 1.0000 234 0.9906 4 0.9887 51 0.9925 98 1.0000 142 1.0000 189 0.9887 235 0.9831 5 0.9925 52 0.9943 99 0.9924 143 0.9906 190 0.9962 236 0.9962 6 1.0000 53 0.9906 100 1.0000 144 0.9943 191 0.9962 237 0.9962 7 1.0000 54 0.9981 101 0.9868 145 0.9906 192 0.9850 238 0.9962 8 0.9867 55 1.0000 102 0.9887 146 0.9831 193 1.0000 239 0.9962 9 0.9944 56 0.9867 103 0.9962 147 0.9943 194 0.9905 240 0.9887

10 0.9924 57 0.9981 104 0.9925 148 0.9905 195 1.0000 241 0.9905 11 0.9962 58 0.9848 105 0.9943 149 0.9943 196 0.9943 242 0.9888 12 0.9943 59 0.9887 106 0.9943 150 0.9887 197 1.0000 243 0.9981 13 1.0000 60 0.9887 107 0.9887 151 1.0000 198 0.9830 244 0.9887 14 0.9887 61 1.0000 108 0.9962 152 0.9981 199 0.9887 245 0.9925 15 0.9943 62 0.9906 109 0.9962 153 0.9943 200 0.9868 246 1.0000 16 0.9868 63 0.9925 110 0.9944 154 0.9868 201 0.9981 247 0.9981 17 1.0000 64 1.0000 111 0.9944 155 0.9849 202 0.9811 248 0.9905 18 0.9906 65 0.9887 112 0.9924 156 1.0000 203 0.9850 249 0.9981 19 0.9886 66 0.9868 113 0.9981 157 0.9868 204 0.9906 250 1.0000 20 0.9906 67 0.9831 114 0.9962 158 0.9943 205 0.9925 251 0.9962 21 1.0000 68 1.0000 115 0.9906 159 0.9886 206 1.0000 252 1.0000 22 0.9906 69 0.9944 116 0.9906 160 1.0000 207 0.9888 253 1.0000 23 0.9962 70 0.9887 117 0.9944 161 1.0000 208 0.9906 254 1.0000 24 1.0000 71 0.9664 118 1.0000 162 0.9811 209 0.9905 255 0.9847 25 0.9905 72 1.0000 119 0.9868 163 0.9888 210 0.9925 256 0.9962 26 0.9925 73 1.0000 120 0.9905 164 0.9868 211 0.9812 257 0.9831 27 0.9906 74 0.9925 121 0.9906 165 0.9962 212 0.9981 258 0.9811 28 0.9868 75 1.0000 122 0.9981 166 0.9868 213 0.9962 259 0.9887 29 0.9831 76 0.9981 123 1.0000 167 0.9981 214 0.9963 260 0.9925 30 0.9943 77 0.9962 124 1.0000 168 1.0000 215 0.9906 261 0.9943 31 0.9925 78 0.9850 125 0.9962 169 0.9869 216 0.9888 262 0.9887 32 1.0000 79 0.9924 126 0.9981 170 0.9924 217 0.9888 263 0.9981 33 0.9925 80 0.9924 127 1.0000 171 0.9887 218 0.9925 264 0.9962 34 0.9962 81 1.0000 128 0.9887 172 0.9981 219 1.0000 265 0.9850 35 0.9868 82 0.9962 129 0.9924 173 0.9962 220 0.9887 266 0.9962 36 0.9905 83 0.9924 130 0.9943 174 0.9906 221 0.9925 267 0.9981 37 0.9812 84 0.9906 131 0.9962 175 0.9887 222 0.9962 268 1.0000 38 0.9831 85 0.9869 132 0.9962 176 0.9886 223 0.9943 269 0.9868 39 0.9717 86 1.0000 133 0.9831 177 0.9906 224 0.9943 270 0.9907 40 0.9850 87 0.9925 134 1.0000 178 0.9868 225 1.0000 271 0.9849 41 1.0000 88 0.9944 135 0.9850 179 1.0000 226 0.9944 272 0.9888 42 0.9981 89 1.0000 133 0.9831 180 1.0000 227 0.9905 273 0.9887 43 0.9924 90 0.9887 134 1.0000 181 1.0000 228 1.0000 274 0.9943 44 0.9943 91 0.9925 135 0.9850 182 0.9981 229 0.9925 45 0.9924 92 0.9981 136 0.9849 183 1.0000 230 0.9943 46 0.9887 93 0.9925 137 0.9906 184 0.9906 231 1.0000 47 1.0000 94 0.9925 138 1.0000 185 0.9905 232 0.9887

Tabela 6.2.2.2 – Grau de possibilidade das arestas

O tempo total consumido para a realização de cada teste foi de 2 horas, em média.

47

Os parâmetros iniciais foram variados para analisar o comportamento do algoritmo. No entanto, os resultados acima podem ser obtidos com os seguintes dados iniciais:

- Número de gerações: 3000

- Tempo limite (em minutos): 240

- Tamanho da população: 100

- Número de melhores indivíduos armazenados: 10

- Taxa de Cruzamento: 30%

- Taxa de Mutação: 20%

- Numero de tentativas para obtenção de melhor individuo após crossover: 5

- Taxa de Preservação de indivíduos: 20%

- Taxa de melhores indivíduos preservados: 10%

- Taxa de piores indivíduos preservados: 10%

Como podemos ver no Gráfico de Convergência (Figura 6.2.2.3), em torno da geração 800 um indivíduo com possibilidade igual 1 foi encontrado, porém, como percebemos, existem mais árvores com o mesmo grau de possibilidade de ser menor ou igual a árvore geradora mínima modal. Então, o número de gerações deve ser expandido de tal forma a encontrar todas essas árvores.

O teste mais completo realizado foi o descrito acima. No entanto, outros testes menores, foram realizados obtendo soluções menos satisfatórias.

A figura 6.2.2.4 mostra o comportamento da diversidade da população conforme o número de gerações. Como podemos ver, o índice de diversidade manteve-se em torno de 0.85. Isso significa que na população constituída por 100 indivíduos, aproximadamente 85 mantiveram-se distintos em cada geração.

Figura 6.2.2.4 – Gráfico de Diversidade Populacional

48

6.2.3 Análise dos Resultados

Para as duas instâncias de testes adotadas, em todos os testes realizados, o algoritmo apresentou uma boa performance em relação ao tempo de processamento e diversidade populacional e, apesar dos problemas tratados serem complexos, os resultados foram satisfatórios em relação às soluções.

Para os dois problemas analisados, se fossemos utilizar o método comparativo, levaríamos diversos dias, meses ou anos para encontrarmos o conjunto de soluções, pois o espaço de busca é muito extenso. Supondo que um bom computador consiga comparar 105 árvores por segundo, levaríamos cerca de 106 segundos (~11 dias) para encontrarmos o conjunto solução para o Grafo Itália e cerca de 1076 segundos (~1071 dias) para encontrarmos o conjunto solução para o Grafo 274. Enquanto que o algoritmo genético encontrou soluções muito boas em menos de um minuto para o grafo Itália e em cerca de duas horas para o Grafo 274.

Em relação à diversidade populacional também tivemos uma boa performance. Para o grafo Itália, a diversidade reduziu nas 30 primeiras gerações atingindo uma certa “estabilidade” nas gerações seguintes. Esse fenômeno pode ser explicado pela característica do grafo, que fixa diversas arestas a estarem presentes em todas as árvores geradoras, e, portanto, influenciando diretamente na diversidade da população. Como vimos, o mesmo não aconteceu com o Grafo 274 que apresentou pequenas variações durante todas as gerações. Isso se deve pela estrutura do grafo e pelo tamanho da população utilizado. Provavelmente, se utilizássemos populações maiores, o índice de diversidade melhoraria, pois exploraríamos mais o espaço de busca.

As árvores-soluções encontradas estão muito próximas da árvore T*, deixando claro que a qualidade das soluções está muito boa. Pois todas as árvores possuem valor de fitness bem próximos da árvore-base (T*) e cada uma delas têm grande possibilidade de ser a árvore geradora mínima. Outro fator importante é o grau de possibilidade associados as arestas, pois notamos que as arestas que possuem maior grau de possibilidade de participar da árvore geradora mínima são aquelas que estão presentes nas melhores árvores encontradas, provando a coerência dos resultados obtidos.

49

7. Conclusões

Neste projeto apresentamos um algoritmo genético e usamos teoria de possibilidade para encontrarmos soluções referentes ao problema da árvore geradora mínima com estrutura crisp e parâmetros fuzzy, baseando-nos no estudo realizado por (Takahashi, 2003).

Os resultados obtidos através dos testes realizados foram coerentes com o que esperávamos como resposta. O fato do valor de fitness dos melhores indivíduos estar próximo de 1 indica que as melhores árvores encontradas possuem um alto grau de possibilidade de participar da solução do problema. Apesar da qualidade dos resultados, mais testes devem ser realizados utilizando-se outras instâncias para melhor verificação do desempenho do algoritmo proposto.

Uma vez que o algoritmo genético é uma forma atraente de resolver este tipo de problema, sugerem-se como trabalhos futuros o estudo de novas técnicas que promovam uma melhoria no desempenho do atual algoritmo. Algumas características, como a necessidade de uma maior troca de arestas para se obter uma melhoria, ao invés de apenas uma troca considerada na mutação clássica do algoritmo genético, nos leva a considerar técnicas mais recentes de computação natural, como as técnicas de sistemas imunológicos artificiais para tentar obter soluções melhores. Também, evitar árvores com grau de possibilidade nula através dos cortes ou da busca de regiões próximas da árvore-base para a geração de novas árvores podem ser levados em consideração para a geração da população inicial.

50

8. Bibliografia

[1] R.K. Ahuja, T.L. Magnati e J.B. Orlin (1193) – Network flows: theory, algorithms and applications – Prentice-Hall

[2] M. Ali, B. Ramamurthy e J.S. Deogun (2000) – Routing and wavelength assignment with power considerations in optical networks – Computer Networks, 32, pp.539-555

[3] M.P. Blue, B.W. Bush e J. Puckett (2002) – Unified approach to fuzzy graph problems – Fuzzy Sets and Systems, 125 (03), pp.335-368

[4] P.T. Chang e E.S. Lee (1999) – Fuzzy decision Networks and Deconvolution – Computers and Mathematics with Applications, 37 (11-12), pp.53-63

[5] Y. Chunde (1996) – On the Optimization Problem of Spanning Tree in Fuzzy Network – The Journal of China Universities of Posts and Telecommunications, 03 (02), pp.22-25

[6] D. Dubois e H. Prade (1980) – Fuzzy Sets and Systems – Academic Press

[7] W. Pedrycs e F. Gomide (1998) – An Introduction to Fuzzy Sets: Analysis and Design – London: MIT Press

[8] M.C. Goldbarg e H.P. Luna (2000) – Otimização Combinatória e Programação Linear: Modelos e Algoritmos – Editora Campus, pp.283-293

[9] Z. Michalewicz (1996) – Genetic Algorithms + Data Structures = Evolution Programs – Springer

[10] S. Okada (2001) – Interactions among Paths in Fuzzy Shortest Path Problems – 9th International Fuzzy Systems Associations World Congress, Vancouver, Canada, pp.41-46

[11] M.T. Takahashi, A. Yamakami (2003) – Um Estudo sobre Árvore Geradora Mínima com Parâmetros Fuzzy

[12] G.R. Raidl e B.A. Julstrom (2001) – Edge-sets: An effective evolutionary of spanning trees – Institute of Computer Graphics and Algorithms, Vienna University of Technology, TR-186-1-01-01 (to appear in the IEEE transactions on Evolutionary Computations)

[13] U. Manber – Introduction to Algorithms – A Creative Approach

[14] T. H. Cormen, C. E. Leiserson e R. L. Rivest, – Introduction to Algorithms

[15] (OR-Library) - http://www.brunel.ac.uk/depts/ma/research/jeb/info.html

[16] M. T. Takahashi (2004) – Contribuições ao Estudo de Grafos Fuzzy: teorias e algoritmos – Universidade Estadual de Campinas, Faculdade de Engenharia Elétrica e de Computação, Departamento de Telemática.

[17] van Laarhoven, P. J. M.; Aarts, E. H. L.,"Simulated annealing : theory and applications", Kluwer Academic Publishers, 1987.

[18] Haykin, S.S. – Neural networks : a comprehensive foundation – Prentice Hall, 1999

[19] Koza, J. R. Genetic Programming: On the Programming of Computers by Means of Natural Selection, MIT Press. 1992.

51

[20] Bäck, T.; Fogel, D. B.; Michalewicz, Z. Evolutionary Computation 1 - Basic Algoritmhs and Operators, Institute of Physics Publishing, Bristol and Philadelphia, 2000.

[21] Bäck, T.; Fogel, D. B.; Michalewicz, Z. Evolutionary Computation 2 - Advanced Algoritmhs and Operators, Institute of Physics Publishing, Bristol and Philadelphia, 2000.

[22] Michalewicz, Z.; Genetic Algorithm + Data Structures = Evolution Programs, 3rd Edition, Springer-Verlag, 1996.

[23] Larrañaga, P.; Kuijpers, C. M. H.; Murga, R. H.; Inza, I.; e Dizdarevic, S. Genetic algorithms for the travelling salesman problem: A review of representations and operators, Articial Intelligence Review, 13 (1999), páginas. 129-170. Disponível em <http://citeseer.ist.psu.edu/article/naga99genetic.html>, acessado em Acessado em: 5 de maio de 2004.

[24] Bremmerman, H.J.; Rogson, M. e Salaff, S. Search by Evolution, em Maxfield, M.; Callahan, A. e Fogel, L. J., Biophysics and Cybernetic Systems, Spartan Books, Washington, pg. 157-167. [2] Reichenberg, I. Evolutionstrategie: Optimierung Technischer Systeme nach Prinzipien der Biologischen Evolution, Stuttgart: Fromman-Holzboog, 1973.

[25] Holland, J. Adaptation in Natural and Artificial Systems, University of Michigan Press, Ann Arbor. 1975.

[26] Fogel, L. J. Autonomous Automata, Ind. Res. 4, pg. 14-19. 1962.

52