• Sonuç bulunamadı

İskân Sırasında Çıkan Karışıklıklara Dair

Para testar a ferramenta computacional desenvolvida durante sua construção, bem como para comparar o desempenho de um Algoritmo Genético com o desempenho de um Sistema Híbrido (envolvendo um Sistema de Inferências Nebuloso para ajustar parâmetros de algoritmos genéticos em tempo de execução), esta ferramenta foi utilizada inicialmente para resolver um problema de Minimização de Funções.

Neste caso, cada indivíduo do Algoritmo Genético foi modelado como um vetor de dígitos binários (ou bits - sendo que cada bit pode obviamente valer apenas “0” ou “1”), e corresponde a um valor do domínio da função. Segundo [Obitko, Slavík – 1999], esta é a representação de indivíduos mais usada em Algoritmos Genéticos, e foi selecionada por ser uma representação muito conveniente para a realização de cruzamentos e mutações. Para simulações, foi utilizada uma população de 16 (dezesseis) indivíduos, na qual cada indivíduo possuía 16 (dezesseis) bits. Os vetores de bits foram considerados como valores inteiros e positivos, codificados em notação binária. Desta forma, o espaço de busca do Algoritmo Genético é o intervalo de números inteiros de 0 (valor “zero”, correspondente a um vetor com todos os bits em “0”) a 216 = (valor decimal “65.536”, correspondente a um vetor com

4.1.1. Função Elaborada Para os Experimentos

Uma função foi escolhida para ser minimizada no experimento, a qual deveria ser contínua e assim assumir um valor mínimo no intervalo fechado em questão. Além disso, é desejável que esta função possua vários pontos de valor mínimo local dentro do intervalo, de forma a testar a capacidade do Algoritmo Genético de encontrar o valor mínimo global (e não um valor mínimo local). A função escolhida foi uma soma de senóides e cossenóides, conforme a fórmula abaixo:

+

+

+

+

=

3000

.

.

2

cos

.

2

,

0

4000

.

.

2

cos

.

2

,

0

2

.

2

)

(x

sen

16

x

x

x

f

π

π

π

π

A função resultante pode ser observada na figura a seguir:

Figura 4.1: Função utilizada para o problema de minimização, com indivíduos de 16 bits.

Esta função foi inspirada em um exemplo encontrado em [Obitko, Slavík – 1999]. A parcela (1) da fórmula da função corresponde a uma curvatura com concavidade voltada para cima, localizada sobre o intervalo correspondente ao espaço de busca do algoritmo. Esta parcela, por si só, assume um único valor mínimo neste intervalo. As parcelas (2) e (3)

(1) (2) (3) 0,5 0,7 0,9 1,1 1,3 1,5 1,7 1,9 2,1 2,3 2,5 0 10000 20000 30000 40000 50000 60000 70000 Parcela (1) Soma

(2) e (3) – gera “ruído” sobre a curvatura da parcela (1), criando diversos “vales”, os quais correspondem a pontos de mínimo local na função final

4.1.2. Implementação dos Algoritmos para este Problema

Conforme citado na seção anterior, para a construção do Algoritmo Genético para este problema, a codificação dos indivíduos utilizada foi a de vetores binários. Além disso, foram utilizados:

Mecanismo de Seleção: “Seleção por Classificação” [Rezende – 2003], escolhido por possuir uma distribuição de probabilidades de seleção mais homogênea entre os indivíduos;

Operador de Cruzamento: operador com “Ponto de Cruzamento Único” [Rezende – 2003];

Operador de Mutação: “Troca de Valores” [Rezende – 2003].

O Algoritmo Genético implementado trabalha com populações de indivíduos de tamanho fixo (ou seja: não varia em tempo de execução). A população inicial é formada com valores aleatórios (sem utilizar nenhum conhecimento prévio a respeito do problema, para sua formação).

É importante salientar que, quando se trabalha com AG’s, não existe um único modo de implementação de um algoritmo. Segundo [Rezende – 2003], “Algoritmos Genéticos são uma classe de procedimentos com um conjunto de passos distintos e bem especificados, no qual cada um destes passos possui muitas possíveis variações”. Assim sendo, também se fez necessário definir o procedimento a ser utilizado no AG desenvolvido. A ferramenta computacional aqui desenvolvida segue os mesmos passos do exemplo de [Obitko, Slavík – 1999] para a minimização de funções de uma dimensão, listados a seguir:

Algoritmo 1: a implementação utilizada no presente trabalho para Algoritmos Genéticos que resolvem o problema de Minimização de Funções.

Para a construção do AGN, o código em linguagem C do programa denominado “Controlador Fuzzy Universal - Versão 5.0” do trabalho [Burdelis, Cepukas, Sofiatti – 2001] foi adaptado para ser utilizado como o código referente ao SIN. Este SIN foi implementado para realizar leituras do tamanho da população (“Pop”) (o qual é fixo por toda a duração de cada experimento) e do número de gerações (ou iterações) realizadas até o momento (“Ng”), do AGN. Com base nestes valores, e também na base de conhecimento definida

1 Geração da população inicial;

2 Cálculo da aptidão de cada indivíduo da população; 3 Geração da nova população:

3.1 Elitismo: os “n” indivíduos de maior aptidão são copiados para a nova população (sendo “n” um valor inteiro positivo, fixo durante a execução do algoritmo); 3.2 Geração dos novos indivíduos:

3.2.1 Seleção de 2 (dois) indivíduos da população atual (por operadores de seleção do AG) para cruzamento;

3.2.2 Cruzamento entre estes dois indivíduos, de acordo com a probabilidade (ou taxa) de cruzamento, gerando 2 (dois) indivíduos filhos;

3.2.3 Mutação dos 2 (dois) indivíduos filhos, de acordo com a probabilidade (ou taxa) de mutação;

3.2.4 Os novos 2 (dois) indivíduos são inseridos na nova população;

3.2.5 Repetir os passos “3.2.1” a “3.2.4” até completar a nova população;

4 Substituição da população anterior pela nova população, e incremento do número de iterações realizadas;

Repetir os passos “2” a “4” até atingir o número máximo de iterações desejadas, ou até encontrar o valor mínimo global.

AGN realiza a substituição dos valores anteriores destas grandezas pelos novos (calculados pelo SIN).

Este SIN adaptado do “Controlador Fuzzy Universal - Versão 5.0” do trabalho [Burdelis, Cepukas, Sofiatti – 2001] possui as seguintes características:

• Suporta funções de pertinência triangulares e/ou trapezoidais (dos três tipos seguintes: “Left Fuzzy Number”; “Flat Fuzzy Number” e “Right Fuzzy Number”). • Realiza a fuzificação dos valores de entrada fornecidos pelo AGN, em função da

base de dados do SIN.

• Realiza a Inferência Nebulosa utilizando o método “máx-mín” [Shaw, Simões – 1999].

• Realiza a defuzificação utilizando o “método do centro da área” [Shaw, Simões – 1999].

Nos experimentos iniciais com o AGN, este foi programado para realizar uma nova inferência nebulosa (através do SIN) e substituir os valores de Pm e Pc a cada 5 iterações realizadas pelo AGN.