• Nenhum resultado encontrado

4.4 FERRAMENTA PROPOSTA

4.4.5 Descrição do algoritmo

Para demonstrar o funcionamento do código implementado será utilizado nessa seção o caso de ny = 1, onde o único parâmetro considerado a ser obtido é o tamanho da população. Para facilitar a identificação, o problema formulado pelas Eqs.(36) e (37), são respectivamente nomeados como GA1 e GA2, e o procedimento mostrado na Figura 33 é descrito passo-a-passo como segue:

• GA1 envia a variável y para GA2;

• GA2 recebe y interpreta como o tamanho da população para a otimização da função objetivo;

• Para cada y enviado GA2 computa o valor ótimo de f(x*(y));

• Usando f(x*(y)) como a aptidão da função, GA1 determina o tamanho ótimo da população para o problema solucionado por GA2;

Figura 33 - Representação esquemática do exemplo ny =1.

Fonte: Elaborado pelo autor.

É importante destacar que uma vez que o valor ótimo é recebido de GA2, ele é normalizado da seguinte forma:

2 ( *( )) ( *( )) f x GA 0, 01 (1) f x y fpadyy (38) GA1 envia o vetor y, contendo o tamanho da população, para GA2 GA2 interpreta y como o tamanho da população GA2 otimiza a função analítica através do uso do tamanho da população y recebido de GA1 f(x*(y)) é enviado para GA1 como a aptidão da função utilizando y

onde

f x( *( ))y

GA2 é o tamanho ótimo da população y(1) recebido de GA2, e fpad é o valor padrão derivado de amostras geradas em Rn espaços projetados utilizando a técnica de DOE LHS (Latin Hypercube Sample) disponível da função LHSDESIGN do MATLAB, (Mathworks, 2014). Cem (100) amostras são criadas para a avaliação de f(x), e o valor médio é adotado para fpad. A segunda parte da Eq.(38) leva em consideração o número de indivíduos necessários para obter

f x( *( ))y

GA2, desta forma penalizando futuras soluções com populações maiores. O valor de 0,01 foi considerado o mais adequado após testes com diferentes taxas durante o desenvolvimento do esquema de normalização.

• GA1

Os valores da variável y são modificados a cada geração com os parâmetros GA (para cada exemplo estudado serão indicados os parâmetros configurados para o GA externo), de acordo com as restrições de limite (lb,ub) estabelecidas pelo usuário. A Figura 34 ilustra esquematicamente como GA1 trabalha. GA1 e GA2 comunicam-se através da função objetivo, F(y), chamada por GA1, como demonstrado na Figura 35. A avaliação da função ótima para cada indivíduo na população é conduzida com o otimizador GA2 (Figura 36). Este processamento é feito em paralelo através da opção “Vetorização” utilizada em GA1 (ver Figura 37). Isso instrui GA1 a mandar para GA2 todos os indivíduos da variável y criados por cada geração a ser avaliada simultaneamente. Ao fim do processo, esses valores ótimos retornam como um vetor para GA1. Os parâmetros do GA1 foram utilizados os pré-definidos pelo MATLAB (vide Apêndice A), exceto o número máximo de gerações (igual a 20 no caso dos problemas analíticos e 2 a 5 no caso de problemas de estruturas) e tamanho de população (padrão do MATLAB no caso dos problemas analíticos e 5 no caso de problemas de estruturas).

Figura 34 - Código esquemático de GA1 para ny =1

Figura 35 - Comunicação entre GA1 e GA2

Fonte: Elaborado pelo autor.

• GA2

A função objetivo de GA2 é a função alvo original f(x). O algoritmo GA é executado com os parâmetros informados em y. No problema unidimensional acima, y é o vetor com valores de tamanho da população. Assim que GA2 converge, o valor correspondente de f(x) para o dado tamanho da população é retornado para GA1, como pode ser visto na Figura 36. O processo descrito para uma variável (tamanho da população) é basicamente o mesmo empregado quando a metodologia é aplicada aos parâmetros expostos na Tabela 6 onde ny = 9.

Figura 36 - Código esquemático de GA2 para ny=1.

Fonte: Elaborado pelo autor.

Trechos dos scripts do laboratório de comunicação para a ferramenta são expostos na Figura 37, com o comando responsável em negrito. A Figura 38 apresenta o típico mfile (script do MATLAB) quando ftarget (função objetivo) é uma função analítica (exemplo com a função Griewangk).

Figura 37 - Roteiros para GA1 e GA2.

Fonte: Elaborado pelo autor.

Figura 38 - Típica ftarget para uma função analítica.

Fonte: Elaborado pelo autor.

Lab 1 Lab 2

Beginning of GA1 Beginning of GA2

lb =[20] ftargetname = 'Griewangk'

ub =[200] lb = -600*ones(1,10)

ub = 600*ones(1,10)

n = length (lb )

options = gaoptimset('Vectorized','on','Generations',20) nindiv = labReceive(1)

for i=1:nindiv

y (i,:) = labReceive(1)

3. GA call

[y ,F] = ga(@F,1,[],[],[],[],lb ,ub ,[],IntCon,options) xps = y (i,1)

gen = round (5000/xps)

options = gaoptimiset ('PopulationSize',xps,'Generations',gen)

5. GA call

[x,f]=ga(@ftarget,n,[],[],[],[],lb ,ub ,[],options);

6. Optimum obtained using the parameters sent from GA1

labSend (f,1);

end

3. Interpretation of variable sent from GA1

4. Substitution of default specifications for the parameters settings sent from GA1 to optimize the target function

IntCon = [1] (it means that the variable associated to the

bounds lb and ub is an integer)

2. Modification of GA default specifications, but not the default parameters like crossover and mutation type

1. Definition of parameter bounds (population size of GA2) 1. Definition of a target function

2. GA2 receives the variables sent from GA1

function f=F(y) [nindiv,ny] = size (y)

labSend (nindiv,2) for i = 1:nindiv labSend (y(i,:),2) f(i) = labReceive(2) end function f = fgriewangk (x) o = 0; for i=1:length (x) a(i) = 1+ o; o = o + 1; end f = 1 + sum(x.^2/4000)-prod(cos(x./sqrt(a)));

5 CASOS ESTUDADOS

5.1 INTRODUÇÃO

Para realizar os experimentos foi utilizado o Algoritmo Genético disponível no pacote do MATLAB (Mathworks, 2014), conforme descrito no Capítulo 4. Para validação das rotinas implementadas, dois tipos de testes foram selecionados da literatura: exemplos numéricos e exemplos associados à análise estrutural.

Para cada exemplo estudado nesse trabalho serão apresentadas as respectivas função objetivo, variáveis de projeto, limites, restrições, parâmetros investigados do GA, indicação da aplicação ou não da técnica APM para lidar com restrições, características dos materiais empregados nas estruturas, combinações de carga estudadas em cada caso, etc. (ou seja, serão devidamente definidos os problemas executados pelo GA interno – GA2).

A metodologia empregada para realização dos experimentos conduzidos nesse trabalho é esquematizada na Figura 39. A etapa 1 consiste na definição do problema, que pode ser desmembrado em mais de um caso (etapa 2). No caso de pórticos, por exemplo, pode ser feita uma variação no problema em relação ao carregamento, à consideração de restrições etc., de forma a configurar mais de um caso de estudo para o mesmo problema. Na etapa 3 são conduzidos de fato os testes de otimização, que são:

A. Teste 1: Otimização usando GA do MATLAB com parâmetros padrão (exceto número de gerações e população a depender do teste). Os valores utilizados para esses dois parâmetros são apresentados em cada seção específica);

B. Aplicação M_GA, ferramenta proposta pelo presente trabalho (conforme apresentado no Capítulo 4) para investigação da configuração de parâmetros do Algoritmo Genético para o problema estudado;

C. Teste 2: Otimização usando GA com parâmetros/operadores que foram melhor solução obtida dentre as rodadas de aplicação do M_GA;

D. Teste 3: Otimização usando GA com os parâmetros/operadores médios das soluções das rodadas de aplicação do M_GA.

Devido ao comportamento randômico inerente ao GA, foram realizadas 10 (dez) rodadas para os testes realizados na etapa 3, inclusive a aplicação do M_GA foi conduzida 10 (dez) vezes.

Figura 39 - Metodologia dos experimentos conduzidos.

Fonte: Elaborado pelo autor.

Para cada problema, as soluções obtidas, considerando os testes apresentados acima, foram comparadas entre si e com os resultados reportados na literatura (etapa 4). A identificação para cada tipo de crossover e mutação foi apresentada anteriormente no Capítulo 4 deste trabalho e será nesta seção apresentada em termos de seus identificadores (índices de identificação).

É importante ressaltar que, quando for mencionado o critério de parada do algoritmo de otimização, serão utilizados os índices-padrão do GA do MATLAB (indicado por exitflag):

0_XX – Algoritmo parou por ter atingido o número máximo de gerações

estabelecido, XX indica o número máximo de gerações atingido;

1_XX – Algoritmo parou por não ter mudança significativa nos resultados a partir

de parâmetros de controle do GA do MATLAB. Inclui a condição de violação das restrições ser menor do que a tolerância estabelecida. XX indica a geração em que o algoritmo parou.

Documentos relacionados