metodo de otimizac˘ ao para o problema de …ex ercito celestial, e a todas chama pelo nome. o seu...
Post on 30-Jan-2020
0 Views
Preview:
TRANSCRIPT
METODO DE OTIMIZACAO PARA O PROBLEMA DE BALANCEAMENTO
DE TURBINAS
Bruno da Cunha Brandao Reis
Projeto de Graduacao apresentado ao Curso
de Engenharia Mecanica da Escola Politecnica,
Universidade Federal do Rio de Janeiro, como
parte dos requisitos necessarios a obtencao do
tıtulo de Engenheiro.
Orientador: Fernando Pereira Duda
Rio de Janeiro
Setembro de 2018
Brandao Reis, Bruno da Cunha
Metodo de Otimizacao para o Problema de
Balanceamento de Turbinas/ Bruno da Cunha Brandao
Reis. – Rio de Janeiro: UFRJ/Escola Politecnica, 2018.
XI, 35 p.: il.; 29, 7cm.
Orientador: Fernando Pereira Duda
Projeto de Graduacao – UFRJ/ Escola Politecnica/
Curso de Engenharia Mecanica, 2018.
Referencias Bibliograficas: p. 24 – 24.
1. Vibracao. 2. Turbinas. 3. Otimizacao
Combinatoria. 4. Balanceamento. I. Pereira Duda,
Fernando. II. Universidade Federal do Rio de Janeiro,
UFRJ, Curso de Engenharia Mecanica. III. Metodo
de Otimizacao para o Problema de Balanceamento de
Turbinas.
iii
”Levantai os olhos e observai as
alturas: Quem criou tudo isso?
Foi aquele que coloca em mar-
cha cada estrela do seu incontavel
exercito celestial, e a todas chama
pelo nome. O seu poder e incal-
culavel; inextinguıvel a sua forca,
e, por isso, nenhum desses corpos
celestes deixa de atender pronta-
mente.”Isaıas 40:26
iv
Agradecimentos
Primeiramente, agradeco a Deus, por ter me trazido ate aqui. Sem ele nada disso
seria possıvel.
Agradeco a Bia, minha incrıvel namorada que sempre esteve ao meu lado por
toda a faculdade, me dando forcas para nao desistir quando estava difıcil continuar.
Agradeco aos meus pais, Fernando e Sonia, por todo amor, apoio e por terem
incentivado meu sonho de seguir pela area de exatas. E a Gabriela, por tornar meus
dias mais felizes.
Agradeco aos irmaos da igreja, que sempre perseveraram em oracao.
Aos amigos, em especial ao Eduardo Zilves, Rafael Huang e Raphael Costa, que
me acompanharam por toda a graduacao, e ao Valter Junior e Gabriel Valle. Juntos
mostramos como um trabalho em equipe pode fazer a diferenca.
Ao meu professor e orientador, Fernando Pereira Duda, pelos ensinos, paciencia,
disponibiliade e apoio mesmo quando tive a necessidade de trocar de tema de pes-
quisa.
A GE Celma pela oportunidade de estagiar em uma oficina de motores ae-
ronauticos e que me apresentou a necessidade de seguir nessa linha de pesquisa.
A Universidade Federal do Rio de Janeiro, que possibilitou a minha formacao,
aprendizado e desenvolvimento deste trabalho.
A todos que, de forma direta ou indireta, auxiliaram no desenvolvimento deste
trabalho. Muito obrigado!
v
Resumo do Projeto de Graduacao apresentado a Escola Politecnica/UFRJ como
parte dos requisitos necessarios para a obtencao do grau de Engenheiro Mecanico
METODO DE OTIMIZACAO PARA O PROBLEMA DE BALANCEAMENTO
DE TURBINAS
Bruno da Cunha Brandao Reis
Setembro/2018
Orientador: Fernando Pereira Duda
Programa: Engenharia Mecanica
O controle das vibracoes em motores aeronauticos e turbinas a gas e de funda-
mental importancia para sua eficiencia. Irregularidades quanto a fabricacao de seus
componentes podem levar a variacoes de peso que, ao serem montados no rotor,
levam a desbalanceamentos. Neste trabalho sera discutido o problema de balance-
amento de turbinas, cujo objetivo e encontrar a melhor solucao para um problema
de otimizacao combinatoria dos diferentes pesos das pas, para os diversos estagios
de uma turbina a gas ou de um motor aeronautico. Atualmente sao feitas algu-
mas distribuicoes simples como pareamento decrescente ou quadrantes alternados.
Contudo, algoritmos heurısticos sao capazes de reduzir em cerca de 100 vezes o
desbalanceamento resultante quando comparado com as distribuicoes citadas ante-
riormente, reduzindo o tempo de balanceamento do modulo montado. A proposta
de um algoritmo de otimizacao baseado em busca exaustiva por meio de permutacao
foi analizada e comparada com as tecnicas aplicadas na industria, e obteve exito na
redistribuicao, com tempo computacional bem reduzido e proprio para aplicacao no
chao de fabrica.
vi
Abstract of Undergraduate Project presented to POLI/UFRJ as a partial fulfillment
of the requirements for the degree of Mechanical Engineer
OPTIMIZATION METHOD FOR THE TURBINE BALANCING PROBLEM
Bruno da Cunha Brandao Reis
September/2018
Advisor: Fernando Pereira Duda
Department: Mechanical Engineering
The control of vibrations in aeronautical engines and gas turbines is of fundamen-
tal importance for its efficiency. Irregularities in the manufacture of its components
can lead to variations in weight that, when mounted on the rotor, lead to imbal-
ances. In this work we will discuss the turbine balancing problem, whose objective is
to find the best solution to a problem of combinatorial optimization of the different
weights of blades, for the various stages of a gas turbine or an aeronautical engine.
Some simple distributions are currently made such as decreased pairing or alter-
nate quadrants. However, heuristic algorithms are able to reduce by approximately
100 times the resulting imbalance as compared to the aforementioned distributions,
reducing the balancing time of the assembled module. The proposal of an optimiza-
tion algorithm based on exhaustive search by means of permutation was analyzed
and compared with the techniques applied in the industry, and was successful in the
redistribution, with very reduced computational time and suitable for application
on the shop floor.
vii
Sumario
Lista de Figuras ix
Lista de Tabelas xi
1 Introducao 1
1.1 Motivacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Objetivo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2 Revisao Bibliografica 5
2.1 Vibracao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Vibracao em Motores Aeronauticos e Turbinas a Gas . . . . . . . . . 6
2.3 Desbalanceamento . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Materiais e Metodos 10
3.1 Conceitos Basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Algoritmo Principal . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
3.3 Testes Realizados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4 Validacao do Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.1 Verificacao Global . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.4.2 Comparativo entre algoritmos . . . . . . . . . . . . . . . . . . 19
4 Resultados e Discussoes 20
5 Conclusoes e Trabalhos Futuros 23
Referencias Bibliograficas 24
A Codigo em Python 26
viii
Lista de Figuras
1.1 Esquema de motor aeronautico. Fonte: Quora. Disponıvel
em: https://www.quora.com/Do-the-fans-start-rotating-reverse-to-
stop-easily-when-an-airliner-lands. Acesso em: 16/05/2018. . . . . . . 1
1.2 Exemplo de pa do modulo do Fan. Fonte:
Lambda Novatronics. Disponıvel em
http://www.lambdanovatronics.com/commercial/engines/ge90/.
Acesso em 17/07/2018. . . . . . . . . . . . . . . . . . . . . . . . . . . 2
2.1 Ponte de Tacoma, destruıda apos vibracao induzida pelo vento.
Fonte: Mechanical Vibrations, RAO. . . . . . . . . . . . . . . . . . . 5
2.2 Diagrama de resistencia a fadiga para aco UNS G41 300. Fonte:
Elementos de Maquinas de Shigley[1]. . . . . . . . . . . . . . . . . . . 7
2.3 Tela do programa com algumas das distribuicoes. Fonte: SCHENCK.
Disponıvel em https://schenck-rotec.com/files/userImages/images-
katalog/products/WME/WME-3.jpg. Acesso em: 17/07/2018. . . . . 8
3.1 Esquema de disco com massa pontual causando desbalanceamento.
Fonte: Elaborado pelo autor. . . . . . . . . . . . . . . . . . . . . . . . 10
3.2 Diagrama de corpo livre para o esquema de disco com massa pontual.
Fonte: Elaborado pelo autor. . . . . . . . . . . . . . . . . . . . . . . . 11
3.3 Exemplo de distribuicao das pas. Fonte: Elaborado pelo autor. . . . . 12
3.4 Medicao do Peso e Momento. Fonte: SCHENCK. Dis-
ponıvel em: ¡http://www.schenck-worldwide.com/images-
katalog/products/Baureihe-WM/R12-047-02.jpg¿. Acesso em:
17/07/2018. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
ix
3.5 Esquema representativo da medicao de Peso e Momento. Fonte: Ela-
borado pelo autor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
3.6 12 componentes distribuidos. Fonte: Elaborado pelo autor. . . . . . . 14
3.7 Fluxograma do algoritmo. Fonte: Elaborado pelo autor. . . . . . . . . 15
3.8 Distribuicao inicial e final apos algoritmo. Fonte: Elaborado pelo autor. 15
3.9 Histograma comparativo entre todas as possibilidades de ditribuicao.
Fonte: Elaborado pelo autor. . . . . . . . . . . . . . . . . . . . . . . . 18
4.1 Resultados finais para as distribuicoes. Fonte: Elaborado pelo autor. 21
x
Lista de Tabelas
3.1 Resultados para os 10 componentes. . . . . . . . . . . . . . . . . . . . 18
3.2 Resultados do algoritmo aleatorio. . . . . . . . . . . . . . . . . . . . . 19
4.1 Resultados dos desbalanceamentos para os 7 cenarios testados. . . . . 21
4.2 Media dos resultados obtidos para cada distribuicao . . . . . . . . . . 21
4.3 Melhora obtida para cada amostra . . . . . . . . . . . . . . . . . . . 22
xi
Capıtulo 1
Introducao
A aviacao moderna evoluiu muito desde seu inıcio, sendo hoje capaz de transpor-
tar pessoas ou cargas por milhares de quilometros sem precisar reabastecer e com
custo sendo reduzido cada vez mais pelo desenvolvimento de novas tecnologias e
aprimoramento das tecnicas de manutencao.
O principal responsavel por esses avancos sao os motores do tipo TurboFan, como
esquematizado na figura 1.1.
Figura 1.1: Esquema de motor aeronautico. Fonte: Quora. Dis-
ponıvel em: https://www.quora.com/Do-the-fans-start-rotating-reverse-to-stop-
easily-when-an-airliner-lands. Acesso em: 16/05/2018.
1
Devido as altas rotacoes a que esses motores sao submetidos, e tambem de sua
manutencao ser feita apos um tempo razoavelmente grande de operacao, os valores
permitidos de vibracao sao muito pequenos, o que evita o desgaste prematuro dos
componentes e sua baixa eficiencia. Para que essas vibracoes sejam controladas,
diversas tecnicas especiais sao utilizadas, tanto na fabricacao das pecas quanto na
montagem dos modulos, reduzindo o desbalanceamento em cada etapa. Alem disso,
tambem sao realizados balanceamentos dos modulos montados e, no final, o balance-
amento do motor em um banco de provas que simula as condicoes reais de operacao
[2].
Em diversos motores aeronauticos, como tambem em turbinas a gas, cada disco
possui pas, componentes responsaveis pela extracao de energia do ar, no caso dos
modulos de turbina, e tambem pela movimentacao do ar, no caso dos modulos de
compressao e do fan.
Figura 1.2: Exemplo de pa do modulo do Fan. Fonte: Lambda Novatronics.
Disponıvel em http://www.lambdanovatronics.com/commercial/engines/ge90/.
Acesso em 17/07/2018.
Por variacoes durante o processo de fabricacao, desgaste durante o funcionamento
e tambem reparos a que essas pas sao submetidas, a massa delas pode variar. Essas
massas podem variar ate ±5% [3], alterando nao so a massa do componente mas
tambem deslocando a posicao do centro de massa de todo o conjunto montado.
2
1.1 Motivacao
Um dos procedimentos utilizados para reducao do desbalanceamento e a pesagem
dos componentes que sao instalados no rotor, como por exemplo essas pas que ficam
encaixadas nos discos ao longo dos eixos do motor. Atualmente, a distribuicao
e realizada por uma tecnica bem aceita na industria, que consiste em realizar a
medicao do peso momento da pa e distribuir elas com um software da empresa
Schenck, especializada em balanceamento e pesagem desse tipo de componente.
Apesar da distribuicao estar sendo feita corretamente, varios motores vinham
apresentando vibracoes acima dos limites aceitaveis durante o teste final no banco
de provas. Isso motivou a investigacao de todos os procedimentos realizados que
estavam relacionados a vibracao.
Apos as analises dos principais procedimentos, como por exemplo o balancea-
mento de cada modulo e montagem do conjunto, foi questionado se algum outro
componente nao controlado poderia de alguma forma estar influenciando essas vi-
bracoes. A primeira hipotese foi de que os parafusos instalados no rotor poderiam
estar com massas diferentes. Sendo assim, foi requisitado que eles fossem pesados
e trocados caso o peso variasse muito. Nesse momento, surgiu a ideia de que uma
distribuicao poderia ser feita, de modo que a resultante de desbalanceamento ficasse
proximo de zero, e que, de alguma forma, isso seria obtido por meio de um algoritmo
de otimizacao.
Apos o desenvolvimento do algoritmo para a distribuicao dos parafusos, ele foi
testado com os dados das pas e comparado com o software Schenck utilizado para
distribuicao, obtendo resultados da ordem de 100 vezes melhor.
1.2 Objetivo
O objetivo deste trabalho e demonstrar um novo metodo para distribuicao de pas
e qualquer outro componente que seja instalado ao redor do rotor. Comparacoes
serao realizadas quanto a melhora em relacao as distribuicoes que sao realizadas pelo
software principal de distribuicao.
Primeiramente foi feita uma revisao bibliografica sobre o tema, abrangendo as
motivacoes por tras da necessidade de se balancear os rotores e os metodos utilizados
3
para distribuir massas ao redor de eixos. Em seguida sao explicados os metodos uti-
lizados pelo algoritmo e compara-se seus resultados com as distribuicoes fornecidas
pelo software Schenck.
4
Capıtulo 2
Revisao Bibliografica
2.1 Vibracao
As vibracoes estao presentes de diversas formas em nosso cotidiano. Por exemplo, o
som se propaga na forma de ondas mecanicas atraves do ar, causando vibracao nos
tımpanos e permitindo que nos escutemos[4]. Alem disso, vibracoes tambem estao
presentes nos movimentos de maquinas rotativas, pois imprecisoes na fabricacao e
montagem podem levar a desbalanceamentos que causam esse fenomeno. A presenca
dela geralmente leva a um desgaste excessivo dos componentes, podendo levar a
formacao de trincas, afrouxamento de fixadores e falhas estruturais e mecanicas[5].
Figura 2.1: Ponte de Tacoma, destruıda apos vibracao induzida pelo vento. Fonte:
Mechanical Vibrations, RAO.
Dados esses problemas, dependendo do projeto e importante se preocupar com
5
a reducao das vibracoes e investigar suas possıveis causas.
2.2 Vibracao em Motores Aeronauticos e Turbi-
nas a Gas
Para motores aeronauticos e turbinas a gas, e importante evitar os desgastes para
que o motor possa permanecer o maximo de tempo em funcionamento, maximizando
os ganhos do operador. Portanto, os nıveis de vibracao sao constantemente moni-
torados e devem permanecer dentro de valores permitidos para garantir seu correto
funcionamento.
Muitos motores possuem sensores instalados de modo que tos responsaveis pos-
sam acompanhar os nıveis de vibracao durante o funcionamento em voo, alem de
poder analisar o historico de vibracoes e acompanhar quaisquer mudancas em seu
comportamento[6]. Isso se assemelha a um metodo de manutencao preditiva, onde
instrumentos de sensoriamento ficam instalados no equipamento coletando dados
para o monitoramento de seu funcionamento e tambem de qualquer falha latente
que venha a aparecer[7].
As amplitudes das vibracoes devem permanecer dentro de limites especificados
no manual para garantir um correto funcionamento, alta eficiencia e baixo desgaste,
permitindo assim otimizacao da vida util das pecas, maior intervalo entre as manu-
tencoes e elevando os lucros das empresas[8].
Esses limites de vibracao sao definidos por testes de fadiga nos eixos. Eles sao
colocados para rodar com um desbalanceamento conhecido por mais de 10 milhoes
de ciclos. Caso o eixo seja capaz de aguentar os nıveis de vibracao por todos esses
ciclos, pode-se dizer que o material e forte o suficiente para operar por toda a sua
vida [1]. Mesmo assim, e colocado um limite de vida nesses componentes para
garantir que os motores nao venham a falhar durante operacao [8].
2.3 Desbalanceamento
Uma das principais causas de vibracao se deve ao desbalanceamento do rotor. As
principais origens desse desbalanceamento sao defeitos no design, baixa qualidade
6
Figura 2.2: Diagrama de resistencia a fadiga para aco UNS G41 300. Fonte: Ele-
mentos de Maquinas de Shigley[1].
durante a fabricacao e desgastes causados durante o funcionamento[5].
Ao realizar a montagem dos diversos componentes no eixo, qualquer diferenca
entre massas deles pode causar um desequilıbrio, deslocando o centro de massa da
montagem final. Um componente que possui grande efeito nisso e a pa, um dos
maiores componentes a serem montados no eixo e que possui papel fundamental em
seu funcionamento.
Atualmente, e pratica comum na industria realizar a distribuicao previa dessas
pas de modo a reduzir o desbalanceamento apos a montagem. Anteriormente a dis-
tribuicao era aleatoria, sendo requerida algumas horas de trabalho apos a montagem
para que o rotor fosse balanceado, e as vezes necessario a remocao e recolocacao das
pas, por ter sido atingido o numero maximo de pesos permitido para balanceamento
do disco. Posteriormente uma tecnica foi introduzida que consistia na ordenacao
das pas em ordem decrescente de peso. A pa mais pesada e colocada na posicao 1
enquanto que a segunda mais pesada na posicao n/2, a mais leve fica na posicao 2 e
a segunda pa mais leve na posicao (n/2) + 1. Esse processo entao era repetido com
a terceira pa mais pesada na posicao 3 em diante [9].
Hoje o metodo mais utilizado para realizar a distribuicao e por meio do software
BLADIS Net da Schenck [10], em que e possıvel escolher uma dentre as sete possibili-
7
dades de distribuicao. Todas essas distribuicoes consistem em combinacoes simples,
semelhante a descrita anteriormente mas com pequenas variacoes, nenhuma realiza
qualquer tipo de otimizacao para procurar uma solucao melhor. Algumas delas estao
na figura 2.3.
• Single Beam, heavy/ light adjacent, decreasing
• Double Beam, heavy/ light adjacent, decreasing
• Double Beam, heavy/ light adjacent, alternating
• Double Beam Decreasing
• Triple Beam, heavy/ light adjacent, decreasing
• Quadruple Beam, heavy/ light adjacent, decreasing
• Quadruple Beam, forward/ reverse, decreasing
Figura 2.3: Tela do programa com algumas das distribuicoes. Fonte:
SCHENCK. Disponıvel em https://schenck-rotec.com/files/userImages/images-
katalog/products/WME/WME-3.jpg. Acesso em: 17/07/2018.
O problema de distribuicao de pas se trata de um problema de analise combi-
natoria onde o objetivo e encontrar a distribuicao cuja resultante se encontra mais
proximo a zero. Esta situacao esta dentro da classe de problemas NP difıcil e possui
semelhanca com o problema do caixeiro-viajante, cujo objetivo era determinar a me-
nor rota para percorrer uma serie de cidades, de modo que o caminho realizado fosse
o menor possıvel [9]. Este conjunto de problemas ainda nao possui solucao, sendo
inclusive um dos problemas do milenio, definidos pelo Clay Mathematical Institute
[11].
8
Algoritmos heurısticos ja foram propostos para atacar esse problema. Andrew
Mason e Mikael Ronnqvist [9] investigaram a performance do algoritmo de busca na
vizinhanca com aplicacao de esquema duplo Lagrangeano e identificaram melhora
na convergencia para problemas grandes. Pisoulis, Pardalos e Hearn [3] trabalharam
na formulacao do problema de balanceamento de turbinas como um quadratic as-
signment problem (QAP) e aplicaram o algoritmo de greedy randomized adaptative
search procedure (GRASP). Tambem Amiouny, Bartholdi e Vate [12] analisaram
algumas tecnicas como o pareamento das pas, onde elas sao pareadas de acordo com
a diferenca entre as massas para assim serem distribuıdas, reduzindo o numero de
possibilidades que precisam ser testadas.
Todas as tecnicas apresentadas acima obtiveram melhores resultados em com-
paracao ao que e feito usualmente na industria. No capıtulo a seguir sera tratado um
novo algoritmo para obtencao de uma distribuicao e os resultados serao comparados
com as distribuicoes fornecidas pelo software Schenck.
9
Capıtulo 3
Materiais e Metodos
O objetivo deste capıtulo e apresentar o algoritmo desenvolvido para tratar o pro-
blema de balanceamento de turbinas. O codigo foi todo desenvolvido pelo autor
e colaboradores na linguagem de programacao Python, e sua versao completa e
apresentada no Apendice A.
3.1 Conceitos Basicos
O desbalanceamento e causado pela presenca de uma resultante de massa ou um
centro de massa deslocado do eixo de rotacao ou pela ma distribuicao da massa ao
longo do componente. Ele pode ser representado como uma massa pontual localizada
em alguma posicao do corpo, como apresentado na figura 3.1.
Figura 3.1: Esquema de disco com massa pontual causando desbalanceamento.
Fonte: Elaborado pelo autor.
Para que a massa pontual que representa o desbalanceamento fique em movi-
10
mento de rotacao, e preciso que haja uma forca centrıpeta no disco, calculado pela
equacao 3.1.
F = mrω2 (3.1)
Ao realizar o diagrama de corpo livre para o disco, pode-se observar que a forca
centrıpeta para o movimento do desbalanceamento e realizado pelo mancal, unica
fixacao do disco.
Figura 3.2: Diagrama de corpo livre para o esquema de disco com massa pontual.
Fonte: Elaborado pelo autor.
Sendo assim, quanto maior a forca, maior sera o desgaste nele. Alem disso, como
essa forca possui a mesma direcao em que estiver a massa, ela realiza um movimento
harmonico com a mesma frequencia de rotacao do disco.
Vale lembrar que, numa situacao em que a frequencia de rotacao chegue a uma
das frequencias naturais de vibracao do rotor, ocorre o fenomeno de ressonancia,
gerando grandes amplitudes de vibracao e risco para a sua operacao.
No caso dos rotores de motores aeronauticos ou turbinas a gas, as pas sao ins-
taladas ao redor do rotor, formando o conjunto de cada disco. Sendo estas pas de
pesos diferentes, o centro de massa dessa montagem sera a resultante do somatorio
dessa distribuicao. Na figura 3.3 esta esquematizada uma distribuicao de pas. O
comprimento de cada setor circular representa a massa e a distancia do centro de
massa de cada pa, enquanto que o ponto em laranja e a resultante do centro de
massa, que foi amplificado para melhor visualizacao.
Para que as pas e quaisquer outros componentes possam ser distribuıdos ao redor
do rotor e o desbalanceamento ser calculado, e necessario que eles sejam correta-
11
Figura 3.3: Exemplo de distribuicao das pas. Fonte: Elaborado pelo autor.
mente pesados. Para pecas pequenas, como parafusos, precisa realizar a medicao da
massa de cada unidade e listar os valores. Para pecas maiores, com maiores razao
de aspecto, relacao entre a altura e largura, e necessario medir tanto o peso quanto
o momento a partir de sua base.
Na figura 3.5 esta exemplificado a medicao de peso e momento para uma pa.
Figura 3.4: Medicao do Peso e Momento. Fonte: SCHENCK. Disponıvel
em: ¡http://www.schenck-worldwide.com/images-katalog/products/Baureihe-
WM/R12-047-02.jpg¿. Acesso em: 17/07/2018.
Ao medir-se o peso e o momento, e possıvel calcular a massa da pa e a posicao
do centro de massa pelas equacoes 3.3 e 3.5 respectivamente.
F = mg (3.2)
12
Figura 3.5: Esquema representativo da medicao de Peso e Momento. Fonte: Elabo-
rado pelo autor.
m =F
g(3.3)
M = mgl (3.4)
l =M
F(3.5)
De posse desses dois valores, calcula-se a resultante do centro de massa a partir
do somatorio de todas as pas que compoem o disco pelas equacoes 3.6 e 3.7.
mx =Σmilicos(θi)
Σmi
(3.6)
my =Σmilisen(θi)
Σmi
(3.7)
Os valores encontrados na medicao entram no termo limi, sendo, portanto, mais
acurado do que apenas pesar a massa das pas e assumir que o centro de massa esta
localizado na mesma posicao para todas as pas.
Para questoes de otimizacao, nao e necessario calcular o dividendo de somatorio
de massa Σmi pois o objetivo e encontrar o menor desbalanceamento e, para isso,
basta minimizar o raio do centro de massa dado pela equacao 3.8
raio ∗massa =√
(Σmilicos(θi))2 + (Σmilisen(θi))2 (3.8)
13
3.2 Algoritmo Principal
O algoritmo principal desenvolvido neste trabalho consiste numa tecnica de busca
exaustiva por meio de permutacao da distribuicao, onde sao alteradas as posicoes
das pas e verifica-se se o resultado melhorou ou nao.
A tecnica de permutacao utilizada funciona da seguinte maneira: a partir da lista
inicial, faz-se a troca das posicoes dos ultimos dois elementos da lista. No momento
seguinte, os ultimos tres elementos sao trocados, consistindo portanto de 6 iteracoes
e assim por diante. Desse modo, o numero total de iteracoes possıveis e de n!. Com
isso, pode-se observar que o numero de tentativas torna proibitivo o teste de todas
para situacoes onde o numero de componentes e muito grande. Como exemplo, para
um conjunto de 38 pas, como encontrado no CF680-C2 da GE, seriam 5.23 ∗ 1044
possibilidades a serem testadas.
De posse dos valores medidos para os componentes, colocam-se eles em uma lista,
onde cada posicao ja representa uma das posicoes de instalacao como apresentado
na figura 3.6 para uma amostra de 12 componentes com valores aleatorios.
Figura 3.6: 12 componentes distribuidos. Fonte: Elaborado pelo autor.
Essas posicoes sao definidas de acordo com o numero de componentes a serem
instalados ao redor do motor. Isso e porque o angulo entre cada um deles e constante
sendo portanto definido por ∆θ = 2π/n.
Para iniciar a otimizacao, uma distribuicao inicial e escolhida baseada na veri-
ficacao das distribuicoes utilizadas descritas na Revisao Bibliografica. Apos calcular
14
qual o desbalanceamento das distribuicoes mais utilizadas, define-se como inicial
a que obtiver menor resultado para desbalanceamento. Assim garante-se que nao
sera gasto tempo computacional otimizando uma distribuicao que ja nao e boa. Na
figura 3.7 esta descrito o fluxograma de como o algoritmo trabalha.
Figura 3.7: Fluxograma do algoritmo. Fonte: Elaborado pelo autor.
Na figura 3.8 pode-se ver o resultado da distribuicao apos ser otimizada. Para
facilitar a visualizacao, foi utilizada uma distribuicao aleatoria como inicial. Cada
ponto laranja representa uma nova solucao que era melhor que a anterior, sendo
possıvel ver que ela converge para o centro.
Sao definidos dois criterios de parada para o algoritmo. O primeiro consiste
em atingir o valor de desbalanceamento desejado, geralmente valores proximos de
zero, enquanto que o segundo consiste em restringir o numero de iteracoes para
que nao demore muito a gerar os resultados e, assim, o programa possa ser utilizado
dentro do ambiente de fabrica. No computador utilizado para o estudo, com Intel(R)
Core(TM) i7-3630QM CPU @ 2.40 GHz e 8 Gb de memoria ram de 1600 MHz, foi
15
Figura 3.8: Distribuicao inicial e final apos algoritmo. Fonte: Elaborado pelo autor.
obtido uma media de 2000 iteracoes por segundo, rodando Python a partir de um
notebook Jupyter.
Sabe-se que e inapropriado dizer que se pode obter um resultado exato para essa
otimizacao, principalmente devido a nao exatidao dos dados. Estima-se que o erro
humano e variacoes causadas durante as medicoes podem representar cerca de 0.2%
dos valores encontrados [12].
3.3 Testes Realizados
Para comprovacao da eficiencia do algoritmo aqui descrito, foram realizados alguns
testes com o que e utilizado por algumas empresas de manutencao de motores ae-
ronauticos e por companhias aereas. A solucao dessas empresas consiste na utilizacao
do software de balanceamento da SCHENCK, o BladisNet.
O software funciona da seguinte maneira: com os valores das medicoes de peso
momento, ele distribui as pas de acordo com uma das distribuicoes ja apresentadas
na Revisao Bibliografica e calcula o desbalanceamento resultante. O programa avisa
se o resultado esta dentro ou fora dos padroes do manual e e gerado um documento
que vai anexado com o motor para o operador.
Contudo, o limite que o manual permite para esse resultado e de uma ordem
de grandeza tal que ainda sera necessario alguma correcao do balanceamento pos-
teriormente, sendo requerido mais horas de trabalho. E aı que entra a aplicacao de
algoritmos heurısticos, para melhorar o resultado da distribuicao e reduzir o tempo
16
gasto com balanceamento.
Por questoes de confidencialidade, nao foi possıvel utilizar os dados reais de
medicao dos componentes. Portanto, assim como feito por Amiouny, Bartholdi e
Vate [12], foram geradas 10 amostras com media de 100 unidades e variacao de 5%
desses valores por meio das funcoes np.random.normal, que, a partir de uma media
e de um desvio padrao, cria uma amostra com o numero de elementos desejados,
no caso 38, de modo que a distribuicao seja normal. Para verificacao, foi calculada
a media e o desvio padrao de cada uma das amostras e os valores obtidos ficaram
proximos de 100 unidades, com desvio de aproximadamente 5.
Sete cenarios foram analisados:
0 - Distribuicao aleatoria;
1 - Single Beam, heavy/light adjacent, decreasing;
2 - Double Beam decreasing;
3 - Double Beam, heavy/light adjacent, alternating;
4 - Quadruple Beam, heavy/light adjacent, decreasing;
5 - Quadruple Beam, forward/reverse, decreasing;
6 - Otimizacao pelo algoritmo de permutacao.
O primeiro cenario representa uma distribuicao nao realizada, ou seja, sem re-
alizar medicao dos pesos dos componentes, apenas colocando-os aleatoriamente no
disco. De 1 a 5 sao as distribuicoes mais utilizadas dentro do software BladisNet
enquanto que a 6 e o resultado da otimizacao do algoritmo de permutacao realizado
no presente trabalho.
3.4 Validacao do Algoritmo
3.4.1 Verificacao Global
Antes de apresentar os resultados, foi feita uma pequena comparacao para uma
amostra de 10 componentes, quantidade que permite calcular todas as distribuicoes
possıveis e assim ter uma ideia do comportamento de cada uma perante as outras.
Seguindo a mesma metodologia dos testes realizados, os 10 coomponentes foram
gerados aleatoriamente, com media de 100 unidades e desvio padrao de 5. Foram
gerados todas as distribuicoes possıveis e calculado o desbalanceamento resultante
17
de cada uma, sendo que foram desconsideradas as que variavam a posicao inicial,
reduzindo em 10 vezes o numero total de distribuicoes, pois elas sao apenas repeticoes
de outras.
Em seguida foi calculado os desbalanceamentos resultantes de cada distribuicao
e tambem foi calculado uma utilizando o algoritmo proposto neste trabalho, como
pode ser visto na tabela 3.1.
Tabela 3.1: Resultados para os 10 componentes.
Dist1 Dist2 Dist3 Dist4 Dist5 Otimizacao
Desbalanceamento 3.8466599 4.178370 1.046535 3.749977 1.153652 0.036364
Melhora 106 115 29 103 32
Para resumir os resultados acima esta o grafico 3.9, onde pode ser visualizado a
distribuicao dos valores de desbalanceamentos e onde esta localizado cada uma das
resultantes obtidas por cada distribuicao.
Figura 3.9: Histograma comparativo entre todas as possibilidades de ditribuicao.
Fonte: Elaborado pelo autor.
Como pode ser observado, todas as distribuicoes obtiveram sucesso em perma-
necer abaixo da media, que para esse teste foi de 9 unidades, contudo, e possıvel
reduzir ainda mais os valores obtidos com a utilizacao de algoritmos para otimizacao.
A resultante do centro de massa para a distribuicao otimizada esta dentro da menor
faixa de valores, enquanto que as outras ficaram na segunda, quarta e quinta faixas.
18
Isso representa uma melhora de pelo menos 29 vezes com relacao ao melhor dos
valores obtido.
3.4.2 Comparativo entre algoritmos
Como pode ser observado, as tecnicas utilizadas atualmente nao sao capazes de
alcancar os menores valores de desbalanceamento, como a tecnica de otimizacao
consegue. Para demonstrar que o algoritmo aqui proposto nao e a unica opcao para
a resolucao deste problema, foi testado um algoritmo de busca aleatoria (Random
Search - RS), que e um metodo de busca direta, ja que nao depende de derivadas
para a otimizacao [13]. A desvantagem desse metodo e que existe a probabilidade
de que distribuicoes se repitam, perdendo assim eficiencia.
O algoritmo foi setado para 100000 iteracoes para a mesma amostra testada
na secao anterior e, devido ao seu carater aleatorio, foram feitos 10 testes que se
encontram na tabela 3.2.
Tabela 3.2: Resultados do algoritmo aleatorio.
Desbalanceamento Numero de vezes
0.036364 1
0.036926 3
0.041263 3
0.066789 2
0.072190 1
Em uma das iteracoes foi obtido o melhor resultado possıvel, assim como en-
contrado pelo algoritmo proposto pelo trabalho. Nas outras iteracoes foram obtidos
valores bem pequenos, dentro da primeira faixa apresentada no histograma anterior.
Isso demonstra que nao apenas o algoritmo aqui proposto mas outros tambem
sao capazes de encontrar distribuicoes com menores valores para o centro de massa
quando comparado com as distribuicoes utilizadas atualmente.
19
Capıtulo 4
Resultados e Discussoes
Os resultados aqui apresentados foram obtidos a partir de 10 amostras com 38
valores cada, representando um conjunto de pas para o motor CF6 80-C2 da GE
[14]. Para os criterios de parada foram considerados um desbalanceamento de 0.001
e um numero total de 10 milhoes de iteracoes.
Os resultados mostram que a utilizacao de tecnicas heurısticas podem melhorar
muito o resultado do desbalanceamento da distribuicao. Assim como os metodos de
Pitsoulis, Mason e V. Amiouny, o algoritmo aqui apresentado tambem obteve bons
retultados.
A tabela 4.1 apresenta os resultados de desbalanceamento para os 7 casos estu-
dados.
Fazendo a media dessas 10 amostras, e possıvel comparar a diferenca entre cada
uma das distribuicoes. A tabela 4.2 e a figura 4.1 resumem os resultados. Como
pode ser observado, ha uma melhora significativa quando comparado com qualquer
uma das outras distribuicoes.
Isso pode ser explicado pelo fato do algoritmo iniciar a partir de uma das distri-
buicoes a qual ele esta sendo comparado e, a partir daı, ele comeca a procurar por
melhorias.
Contudo, deve-se lembrar que o fato do problema aqui tratado ser NP-difıcil
torna sua solucao muito problematica e, por isso, nao e possivel garantir que o
algoritmo sempre encontrara solucoes melhores que a inicial. Inclusive existe uma
pequena probabilidade de que a distriubuicao aleatoria seja a melhor possıvel, sendo
assim o algoritmo nao conseguira obter nenhuma melhora e qualquer uma das outras
20
Tabela 4.1: Resultados dos desbalanceamentos para os 7 cenarios testados.
Amostra Aleatoria Dist 1 Dist 2 Dist 3 Dist 4 Dist 5 Dist 6
1 42.1848 7.4261 6.0145 2.1402 9.963 2.355 0.0016
2 21.2967 20.8137 10.4724 8.3911 13.9626 5.9861 0.0026
3 39.8172 7.3486 8.7135 5.9461 12.2314 7.2604 2.1618
4 30.3562 7.4657 5.283 1.3479 10.5958 1.6878 0.0021
5 9.8804 22.276 5.5835 0.8846 8.8643 1.7069 0.0015
6 13.2441 11.7021 5.8072 2.0825 10.8711 4.5599 0.0013
7 4.5324 13.8116 6.1399 2.6468 14.8842 5.966 0.3227
8 33.2728 10.0131 5.3891 2.1593 12.3501 1.0105 0.0009
9 27.5695 13.1222 5.7968 5.0669 10.5278 3.169 0.002
10 10.0043 8.9318 8.5755 5.985 15.2751 5.5369 0.0012
Tabela 4.2: Media dos resultados obtidos para cada distribuicao
Aleatoria Dist 1 Dist 2 Dist 3 Dist 4 Dist 5 Dist 6
Media 23.216 12.291 6.778 3.665 11.953 3.924 0.25
Figura 4.1: Resultados finais para as distribuicoes. Fonte: Elaborado pelo autor.
21
distribuicoes obtera um resultado pior que a inicial.
Analisando e comparando cada um dos resultados, pode-se perceber que o algo-
ritmo de permutacao obteve valores muito expressivos de melhora em comparacao
aos demais, da ordem de 1000 vezes, como exemplificado na tabela 4.3.
Tabela 4.3: Melhora obtida para cada amostra
Amostra Melhor Valor Dist 6 Melhora
1 2.1402 0.0016 1337.6276
2 5.9861 0.0026 2335.5127
3 5.9461 2.1618 2.7505
4 1.3479 0.0021 641.4457
5 0.8846 0.0015 602.9733
6 2.0825 0.0013 1598.8157
7 2.6468 0.3227 8.2013
8 1.0105 0.0009 1153.0026
9 3.169 0.002 1600.4285
10 5.5369 0.0012 4702.7466
Em media, a melhora obtida em todas as amostras foi de aproximadamente 1400
vezes. Contudo, nas amostras 3 e 7 os resultados melhoram apenas 2.7 e 8.2 vezes.
Apesar desse resultado ser bem inferior ao observado nas outras amostras, ainda e
um resultado expressivo, visto que ainda assim foi possıvel reduzir o desbalancea-
mento a menos da metade no obtido pelas tecnicas convencionais.
Como falado anteriormente, os criterios de parada utilizados permitiram que
de 9 das 10 amostras atingissem o numero maximo de iteracoes, de 10 milhoes de
tentativas. Mesmo com esse numero de tentativas, nao e garantido que sera obtido
uma melhora para o resultado de desbalanceamento.
Na amostra 8, foi possıvel atingir o criterio de valor de desbalanceamento na
iteracao de numero 9.171.233. Essa falta de padrao com relacao as melhorias obtidas
se deve pelo fato do problema ser NP difıcil.
22
Capıtulo 5
Conclusoes e Trabalhos Futuros
O problema de balanceamento de turbinas consiste na otimizacao de uma analise
combinatoria do tipo NP difıcil. A nao existencia de solucao ate o momento se
comprova com as dificuldades encontradas ao tentar-se obter melhorias com relacao a
distribuicao. Como foi observado, apesar de terem sido feitas 10 milhoes de iteracoes,
nao ha garantia de que havera reducao na resultante de centro de massa. Sempre
existira a probabilidade de que uma das distribuicoes previamente testadas ja seja
a melhor possıvel ou uma das melhores, dificultando ou impossibilitando encontrar
uma distribuicao otimizada.
Contudo, observou-se que os avancos obtidos com o algoritmo de otimizacao
para a distribuicao das pas afetou grandemente o valor da resultante. No pior dos
casos, foi possıvel reduzir para menos da metade do valor obtido anteriormente e no
melhor, a melhora foi de 4700 vezes o valor inicial.
Como explicado anteriormente, esse aprimoramento afeta diretamente a vibracao
durante o funcionamento do motor, pois a resultante e diretamente proporcional a
forca exercida no eixo, que por sua vez, afeta a amplitude de vibracao. A aplicacao
da otimizacao, portanto, pode nao so reduzir o tempo para balanceamento, como
ajudar a reduzir os nıveis de vibracao para valores mais baixos do que os requeridos
como limites do manual.
Para trabalhos futuros, esta o estudo mais aprofundado dos outros algorim-
tos propostos na literatura e a comparacao entre eles quanto a sua performance.
Tambem pode ser investigado a influencia da geometria das pas, nao apenas num
plano 2D mas tambem no 3D e como isso afeta o desbalanceamento.
23
Referencias Bibliograficas
[1] BUDYNAS, R., NISBETH, J., Elementos de Maquinas de Shigley - 10a Edicao.
2016.
[2] GE CELMA, “Revisao de Motores Aeronauticos GE Celma”, 2018.
[3] PITSOULIS, L., PARDALOS, P., HEARN, D., “Approximate solutions to the
turbine balancing problem”, v. 130, pp. 147–155, 02 2001.
[4] FUNDACAO DE OTORRINOLARINGOLOGIA - USP, “Como escutamos”,
2018.
[5] RAO, S., Mechanical Vibrations . Prentice Hall, 2011.
[6] GE AVIATION, “GE Aviation Customer Support”, 2018.
[7] ALVAREZ, O., MANUAL DE MANUTENCAO PLANEJADA. 1988.
[8] GE AVIATION, “CF34-8E Fan Vibration Podcast”, 2018.
[9] MASON, A., RONNQVIST, M., “Solution methods for the balancing of jet
turbines”, v. 24, pp. 153–167, 02 1997.
[10] SCHENCK, “BLADIS Net”, 2018.
[11] CLAY MATHEMATICAL INSTITUTE, “Millenium Problems”, 2018.
[12] V. AMIOUNY, S., J. BARTHOLDI, J., VANDE VATE, J., “Heuristics for
Balancing Turbine Fans”, v. 48, 05 1999.
[13] JASON BROWNLEE PHD, “Clever Algorithms: Nature-Inspired Program-
ming Recipes”, 2018.
[14] GKN AEROSPACE, “GE CF6-80C2 Stage 1 Fan Blade”, 2018.
24
[15] SCIPY.ORG, “numpy.random.normal”, 2018.
25
Apendice A
Codigo em Python
26
Balanceamento_Estatico-TestsAndResults
July 26, 2018
1 Otimização de Balanceamento Estático
Código para otimização de distribuição de componentes ao redor do rotor.
Bibliotecas
In [1]: import mathimport itertoolsimport matplotlib.pyplot as pltimport pylab as plfrom operator import itemgetter, attrgetter
Funções básicas
In [2]: def desbalanceamento(centro_de_massa):d = (centro_de_massa[0]**2+centro_de_massa[1]**2)**0.5 # Módulo do vetorif (centro_de_massa[0]**2)**0.5 < 0.00000001:
centro_de_massa[0] = 0.00000001angulo = math.atan2(centro_de_massa[1],centro_de_massa[0]) # Direção do vetorangulo = math.degrees(angulo)if (angulo**2)**0.5 < 0.0001:
angulo = 0if angulo < 0:
angulo = 360 + anguloreturn [round(d,15),round(angulo,3)]
In [3]: def centro_de_massa(componentes): # Cálcula o CM para a distribuiçãoX_CM = 0Y_CM = 0pos_angular = 0for i in range(len(componentes)):
pos_angular = (2*math.pi*i)/len(componentes) # Posição angularX_CM += componentes[i][0]*componentes[i][1]*math.cos(pos_angular)Y_CM += componentes[i][0]*componentes[i][1]*math.sin(pos_angular)
return [X_CM, Y_CM]
In [4]: def distInicial(componentes): # Distrbuição inicial utilizada na indústriacomponentes = sorted(componentes, key=itemgetter(1),reverse=True)
1
leste = []oeste = []for i in range(len(componentes)):
if i%2 == 0:leste += [componentes[i]]
else:oeste += [componentes[i]]
componentes = leste + oestereturn componentes
Funções de apoio
In [5]: def polar_plot(components,displacements,desb_parada): # polar plotfig = plt.figure(figsize=(4,4))ax = fig.add_axes([0.1, 0.1, 0.8, 0.8], polar=True)width = 5/len(components)theta = []radius = []amplifier = 5for i in range(len(components)):
theta += [2*math.pi*i/len(components)]radius += [components[i][1]]
ax.bar(theta, radius, width=width, bottom=0.0,color="B0",zorder=0)for i in range(len(displacements)):
ax.scatter(displacements[i][1],displacements[i][0]*amplifier,color="C1",zorder=10)circle = pl.Circle((0,0),desb_parada*amplifier, transform=ax.transData._b,color="red",alpha=1)ax.add_artist(circle)plt.show()
In [6]: def txtToMatriz(txt): #Converte txt para matrizmatriz = txt.split("\n")for i in range(len(matriz)):
matriz[i] = matriz[i].split("\t")return matriz
Funções de distribuição
In [7]: # Single Beam, heavy/light adjacent, decreasing - SCHENCKdef Distribution1(componentes):
componentes = sorted(componentes, key=itemgetter(1), reverse =True)count = 0dist = []while len(componentes)>0:
dist += [componentes[0]]componentes.remove(componentes[0])componentes.reverse()
componentes = distreturn componentes
2
# Testecomponentes = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[1,21],[1,22],[1,23],[1,24]]dist_Final=Distribution1(componentes)polar_plot(dist_Final,[[0,0],[0,0]],0)
In [8]: # Double Beam decreasing - SCHENCKdef Distribution2(componentes): # Distrbuição inicial utilizada na indústria
componentes = sorted(componentes, key=itemgetter(1),reverse=True)leste = []oeste = []for i in range(len(componentes)):
if i%2 == 0:leste += [componentes[i]]
else:oeste += [componentes[i]]
componentes = leste + oestereturn componentes
# Testecomponentes = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[1,21],[1,22],[1,23],[1,24]]dist_Final=Distribution2(componentes)polar_plot(dist_Final,[[0,0],[0,0]],0)
3
In [9]: # Double Beam, heavy/light adjacent, alternating - SCHENCKdef Distribution3(componentes):
componentes = sorted(componentes, key=itemgetter(1), reverse =True)leste = []oeste = []count = 0while len(componentes)>0:
if count%2 == 0:leste += [componentes[0]]componentes.remove(componentes[0])
else:oeste += [componentes[0]]componentes.remove(componentes[0])componentes.reverse()
count += 1componentes = leste+oestereturn componentes
# Testecomponentes = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[1,21],[1,22],[1,23],[1,24]]dist_Final=Distribution3(componentes)polar_plot(dist_Final,[[0,0],[0,0]],0)
4
In [10]: # Quadruple Beam, heavy/light adjacent, decreasing - SCHENCKdef Distribution4(componentes):
componentes = sorted(componentes, key=itemgetter(1), reverse =True)quad1 = []quad2 = []quad3 = []quad4 = []count = 0while len(componentes)>0:
if count%4 == 0:quad1 += [componentes[0]]componentes.remove(componentes[0])
elif count%4 == 1:quad2 += [componentes[0]]componentes.remove(componentes[0])
elif count%4 == 2:quad3 += [componentes[0]]componentes.remove(componentes[0])
elif count%4 == 3:quad4 += [componentes[0]]componentes.remove(componentes[0])
count += 1componentes = quad1+quad2+quad3+quad4
5
return componentes
# Testecomponentes = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[1,21],[1,22],[1,23],[1,24]]dist_Final=Distribution4(componentes)polar_plot(dist_Final,[[0,0],[0,0]],0)
In [11]: # Quadruple Beam, forward/reverse, decreasing - SCHENCKdef Distribution5(componentes):
componentes = sorted(componentes, key=itemgetter(1), reverse =True)quad1 = []quad2 = []quad3 = []quad4 = []count = 0while len(componentes)>0:
if count%4 == 0:quad1 += [componentes[0]]componentes.remove(componentes[0])
elif count%4 == 1:quad2 += [componentes[0]]componentes.remove(componentes[0])
elif count%4 == 2:
6
quad3 += [componentes[0]]componentes.remove(componentes[0])
elif count%4 == 3:quad4 += [componentes[0]]componentes.remove(componentes[0])componentes.reverse()
count += 1componentes = quad1+quad2+quad3+quad4return componentes
# Testecomponentes = [[1,1],[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],[1,16],[1,17],[1,18],[1,19],[1,20],[1,21],[1,22],[1,23],[1,24]]dist_Final=Distribution5(componentes)polar_plot(dist_Final,[[0,0],[0,0]],0)
Algoritmo Principal
In [12]: def otimizar_Distribuicao(componentes,desb_parada):# Algoritmo de busca exaustiva baseado em listagem de permutaçãoi = componentes# Distribuiçõesrand = desbalanceamento(centro_de_massa(i))dist1 = Distribution1(i)desb1 = desbalanceamento(centro_de_massa(dist1))
7
dist2 = Distribution2(i)desb2 = desbalanceamento(centro_de_massa(dist2))dist3 = Distribution3(i)desb3 = desbalanceamento(centro_de_massa(dist3))dist4 = Distribution4(i)desb4 = desbalanceamento(centro_de_massa(dist4))dist5 = Distribution5(i)desb5 = desbalanceamento(centro_de_massa(dist5))result = [rand, desb1, desb2, desb3, desb4, desb5]dists = [componentes, dist1, dist2, dist3, dist4, dist5]menor = 0for i in range(1,len(result)):
if result[menor][0] > result[i][0]:menor = i
componentes = dists[menor] # Selecionar melhor distribuiçãod_0 = desbalanceamento(centro_de_massa(componentes))d = [d_0]cont = 0dist_i = componentesfor i in itertools.permutations(componentes): # Permutação
cont += 1CM_i = centro_de_massa(i)d_i = desbalanceamento(CM_i)if d_i[0] < d[-1][0]:
d += [d_i]dist_i = i
if d[-1][0] < desb_parada or cont > 10000000: #Critérios de paradadist_Final = dist_ibreak
return dist_Final
Simulação
In [13]: arquivo = open("Dados2.txt","r")arquivo = arquivo.read()Matriz = txtToMatriz(arquivo)#Matriz = TransporMatriz(Matriz)for i in range(len(Matriz)):
for j in range(len(Matriz[0])):Matriz[i][j] = float(Matriz[i][j])
Matriz2 = []for i in range(len(Matriz)):
Matriz2 += [[]]for j in range(len(Matriz[0])):
Matriz2[-1] += [[1,Matriz[i][j]]]results = []#dist_Final=Distribution4(Matriz2[0])#polar_plot(dist_Final,[[0,0],[0,0]],0)
8
for i in Matriz2:rand = desbalanceamento(centro_de_massa(i))dist1 = Distribution1(i)desb1 = desbalanceamento(centro_de_massa(dist1))dist2 = Distribution2(i)desb2 = desbalanceamento(centro_de_massa(dist2))dist3 = Distribution3(i)desb3 = desbalanceamento(centro_de_massa(dist3))dist4 = Distribution4(i)desb4 = desbalanceamento(centro_de_massa(dist4))dist5 = Distribution5(i)desb5 = desbalanceamento(centro_de_massa(dist5))dist6 = otimizar_Distribuicao(i,0.001)desb6 = desbalanceamento(centro_de_massa(dist6))result = [rand[0], desb1[0], desb2[0], desb3[0], desb4[0], desb5[0], desb6[0]]results += [result]print(result)
[42.184776770715665, 7.426068977061151, 6.014533260851003, 2.140199972674708, 9.96301524544277, 2.354987249127839, 0.001599996810316][21.2967336255815, 20.813673812187368, 10.472411608316376, 8.391063144490532, 13.96261541398699, 5.98605073664049, 0.002563056402961][39.81716263689009, 7.348628388389095, 8.713537853273387, 5.946077588227692, 12.231383592305049, 7.260413800547422, 2.161808783834066][30.356166150200572, 7.465698803155322, 5.282989260216404, 1.347934557226927, 10.595817121325279, 1.687841241278773, 0.002101400935686][9.880424217063863, 22.276035473536734, 5.583483640358841, 0.884625208692966, 8.864315726654356, 1.706877765302284, 0.001467105156768][13.244142275399378, 11.70208838091792, 5.80721018641899, 2.082521090762507, 10.87105857657643, 4.559922857082801, 0.001302539785443][4.532383883854641, 13.81161720723839, 6.139938148794993, 2.64682002741434, 14.884151372533445, 5.966031773096919, 0.322732566095499][33.27275541819786, 10.013075510048822, 5.389141703339329, 2.15933998428894, 12.350061970560834, 1.010491778578443, 0.000876400251767][27.569547979788624, 13.122224693726418, 5.796792307412827, 5.066873522836283, 10.527750404965891, 3.16901800110624, 0.001980105984169][10.004333388216306, 8.931800385884584, 8.575469854998833, 5.985024653230465, 15.275107706823166, 5.536908031146468, 0.001177377495889]
9
top related