• Nenhum resultado encontrado

3.2 Variáveis de Projeto

3.2.2 Codificação e Decodificação das Variáveis

Para utilizar o método dos Algoritmos Genéticos é necessário fazer a codificação e a decodificação das variáveis, assim como a montagem do cromossomo que representa uma possível solução para o problema. Durante a execução do programa, as variáveis são codificadas apenas uma vez, mas para cada geração, todos os indivíduos são decodificados. O tamanho do cromossomo a ser tratado é influenciado pela geometria da viga e pela quantidade de possíveis valores atribuídos a cada variável, logo a solução de vigas com geometria ou espaço de busca diferentes será representada por cromossomos com tamanhos distintos.

No programa foi implementado a codificação binária e o código de Gray. Na codificação binária, valores consecutivos têm representações nas quais os valores dos bits são distintos em mais de uma posição, enquanto que no código de Gray dois valores consecutivos diferem pela permuta de apenas um bit (Tabela 3.1). Segundo COLEY (1999), o Algoritmo Genético pode ser mais eficiente quando pequenas variações na codificação representarem pequenas variações na solução, o que acontece quando se utiliza o código de Gray.

Tabela 3.1 - Comparação entre a codificação binária e o código de Gray Variáve is Codificação Binária Código de Gray

10 000 000 20 001 001 30 010 011 40 011 010 50 100 110 60 101 111 70 110 101 80 111 100

37

Quando é utilizado o código de Gray, a codificação e a decodificação das variáveis são realizadas de forma análoga a quando se utiliza a codificação binária. A diferença está na aplicação de funções antes e depois dos operadores de cruzamento e mutação, que convertem, respectivamente, a codificação binária em código de Gray e vice-versa.

Tanto na codificação binária como no código de Gray, se o número de variáveis a serem codificadas não for igual a uma potência de dois (Equação 3.1), a quantidade de codificações disponíveis será maior do que a quantidade de variáveis. Logo, algumas variáveis serão representadas mais do que uma vez. Alguns dos métodos utilizados para fazer a repetição de variáveis são:

I. adotar o mesmo valor para todas as codificações excedentes; II. repetir os valores das variáveis seguindo uma ordem sequencial; ou III. repetir valores estrategicamente selecionados de forma que codificações

próximas representem valores iguais ou próximos.

2€‚ƒ„@<  < 2€‚ƒ (3.1)

3.1

onde:  é o número de variáveis; e  é o número de bits.

A Figura 3.1 ilustra a codificação de cada método para o caso de cinco valores diferentes. No método I, somente parte do espaço de busca é expandido, o que pode criar uma região de máximo local e dificultar a localização do máximo global. No método II, a vantagem de utilizar o código de Gray é perdida no início da repetição das variáveis, pois neste ponto a permuta de um bit não conduz a uma variável adjacente. No método III, o espaço de busca é expandido de forma proporcional e as vantagens da utilização do código de Gray são preservadas, logo este método foi o escolhido para ser utilizado no programa.

38

Figura 3.1 - Comparação entre os métodos de representação de variáveis repetidas.

A codificação da resistência à compressão do concreto é feita com base na quantidade de valores fornecidos pelo usuário. Utilizando a Equação 3.2 calcula-se o número de bits () necessários para codificar a variável.

  = .~&c( †! }! }2  − 1‡ + 1 (3.2)

3.2

onde: ( ) é a quantidade de valores de resistência característica à compressão disponíveis; e ( ) é o número de bits necessários para codificar a resistência à compressão do concreto.

Considerações sobre a agressividade do meio ambiente não são feitas automaticamente pelo programa, cabendo ao usuário definir o cobrimento e as classes de concreto compatíveis com a classe de agressividade do problema em análise para que sejam atendidos os requisitos da NBR 6118:2007.

Os alelos referentes à resistência a compressão do concreto são decodificados utilizando a Equação 3.3  = ˆ‰Š2. ((&% .%b( † (( ) − 1) ∙ ( .|(ac~/) − 1) 2€‚ƒ(ˆ‰)− 1 ‡‹ (3.3) 3.3

39

onde: ˆ‰ ) é o vetor que armazena os valores do   e seus respectivos preços; ((&% .%b(( ) é uma função que arredonda o número para o inteiro mais próximo; e .|( ) é a função que converte números binários em inteiros não negativos e não nulos.

O tamanho do vetor de armazenamento dos dados é o dobro da quantidade de dados armazenados, pois a cada valor de   está associado um preço que é encontrado utilizando a Equação 3.4, mas como todo vetor, o primeiro valor está associado ao índice zero (ˆ‰(0)) e não ao índice um (ˆ‰(1)). Convém ressaltar que os dados são armazenados na mesma ordem em que são fornecidos pelo usuário, logo é desejável que esta ordem seja crescente ou decrescente, pois caso ela seja aleatória, os benefícios em se utilizar o código de Gray podem ser reduzidos.

$ ( ) = ˆ‰†2. ((&% .%b( †

(( ) − 1) ∙ ( .|(ac~/) − 1)

2€(ˆ‰)− 1 ‡ + 1‡

(3.4)

3.4

onde: $ ( ) é a função que retorna o custo unitário do concreto em função do  .

Ilustra-se abaixo o vetor de armazenamento gerado (Tabela 3.2) e um exemplo do processo de codificação e decodificação da resistência a compressão do concreto (Tabela 3.3).

Tabela 3.2 - Exemplo do vetor ˆ‰( ). Índice Valor 0 20 1 200 2 25 3 250 4 30 5 300 6 35 7 350 8 40 9 400

40

Tabela 3.3 - Exemplo de codificação e decodificação do  .

A codificação da biela () é feita com base no ângulo inicial, ângulo final e incrementos fornecidos pelo usuário. Utilizando a Equação 3.5 calcula-se o número de bits () necessários para codificar a variável.

 = .~&c( Œ ! } W.−  6 [ ! }2  + 1 (3.5) 3.5

onde:  e  são respectivamente o ângulo inicial e final de inclinação da biela; .6 é o incremento do ângulo de inclinação da biela; e () é a função que retorna o número de bits necessários para codificar a inclinação da biela.

Caso o usuário deseje considerar apenas um valor de inclinação da biela, o ângulo inicial deverá ser igual ao ângulo final ( = ) e o programa adotará uma rotina específica para fazer esta consideração, tendo em vista que a Equação 3.5 não se aplica neste caso, pois não é possível calcular o logaritmo de zero.

O incremento tem que ser sempre um valor positivo, portanto se um valor menor ou igual a zero for inserido o programa modifica esse valor para 1. Também cabe ao usuário verificar se a diferença entre o ângulo final e inicial é um múltiplo do incremento, caso contrário, devido à rotina implementada, o ângulo final não será considerado no espaço de busca.

Codificação 5 Nbit (fck) N (fck) Alelo Vfck ( ) fck De codificação 000 0 20 001 010 25 25 2 2 4 4 3 111 6 8 35 40 30 30 6 35 110 011 100 101

41

A decodificação dos alelos relativos à inclinação da biela é feita utilizando a

Equação 3.6.

 = 6Š((&% .%b( † − 1 ∙  .|ac~/ − 12€6− 1 ‡‹ (3.6)

3.6

onde: 6 ) é o vetor que armazena os valores de .

Comparando as Equações 3.3 e 3.6, nota-se que a diferença entre elas é a multiplicação por 2 feita dentro do vetor de armazenamento. Isto não ocorre na

Equação 3.6 pelo fato de não ter preços atrelados a cada inclinação da biela. Ilustra-se

abaixo um exemplo do processo de codificação e decodificação da inclinação da biela (Tabela 3.4).

Tabela 3.4 - Exemplo de codificação e decodificação de .

Para as demais variáveis (altura da viga (ℎ), bitola da armadura positiva (∅ ), bitola da armadura negativa (∅C) e bitola de armadura transversal (∅ )), a codificação e a decodificação são feitas de forma semelhante a da resistência do concreto ( ), bastando modificar a variável que está sendo tratada e o respectivo vetor de armazenamento nas Equações 3.2 e 3.3.

Com a quantidade de bits necessários para codificar cada variável, define-se o tamanho do cromossomo do indivíduo. Os alelos de ∅ , ∅C e ∅ são repetidos, respectivamente, para cada vão, apoio e vão entre apoios da viga.

Alelo VQ ( ) Q Codificação Nbit (fck) IncQ Qi Qf 30 45 5 2 De codificação 30 35 40 45 00 01 10 11 0 1 2 3

42

Documentos relacionados