Exercícios Resolvidos de Otimização

Ver Teoria

Enunciado

Considere o mecanismo de dois pares de barras, mostrado abaixo:

Os elos A O e A C têm o mesmo comprimento L 1 = 0,5   m e os elos C B e B D têm o mesmo comprimento L 2 = 0,3   m . A junta O é uma junta fixa, e as juntas C e D são conexões por pino em duas corrediças que se movem sem atrito ao longo de uma linha horizontal. O mecanismo é submetido a três forças externas. Elas são as forças verticais P 1 = 3   k N e P 2 = 1   k N nas juntas A e B , respectivamente, e uma força horizontal P = 3   k N na junta D . Assume-se que as barras estavam alinhadas e esticadas ao longo de uma linha horizontal antes da aplicação das cargas. Também se assume que o peso do mecanismo é desprezível. O equilíbrio do mecanismo submetido às cargas aplicadas é obtido minimizando a função de energia potencial:

m i n i m i z e   E P = - P 1 L 1 s i n s i n   α   - P 2 L 2 s i n s i n   β   + 2 P [ L 1 1 - c o s c o s   α   + L 2 1 - c o s c o s   β   ]

  1. Plote a superfície e as curvas de nível da função;
  2. Use f m i n s e a r c h   com ponto inicial α , β = ( 1,1 ) radianos para encontrar a energia potencial mínima.

Passo 1

O enunciado nos dá uma função E P α , β e pede para que encontremos o mínimo dela usando dois métodos.

A primeira coisa que devemos entender bem antes de atacar o exercício é qual é o problema de otimização. Para isto, devemos ter bem claro:

  • “O que eu quero minimizar?”, definindo a função objetivo;
  • “O que eu quero minimizar depende do quê?”, definindo as variáveis de projeto.

O que queremos minimizar é a energia potencial do mecanismo composto por dois pares de barras, representada pela função dada no enunciado:

E P α , β   = - P 1 L 1 s i n s i n   α   - P 2 L 2 s i n s i n   β   + 2 P [ L 1 1 - c o s c o s   α   + L 2 1 - c o s c o s   β   ]

Logo, a energia potencial do sistema E P α , β é minha função objetivo.

A função objetivo depende dos ângulos α e β e de algumas constantes, como o comprimento das barras e as cargas às quais o mecanismo é submetido, dadas pelo enunciado:

L 1 = 0,5   m

L 2 = 0,3   m

P 1 = 3   k N

P 2 = 1   k N

P = 3   k N

Os ângulos α e β são as variáveis de projeto. Em outras palavras, queremos encontrar quanto α e β devem valer para que a energia potencial E P α , β seja a menor possível.

Usaremos dois métodos para encontrar os ângulos α e β que minimizam E P α , β :

  1. Gerando a superfície e a curvas de nível: usaremos as funções s u r f c e c o n t o u r para gerar os gráficos;
  2. Usando f m i n s e a r c h , com um chute inicial α , β = ( 1,1 ) radianos.

Passo 2

Vamos começar pela letra a. Em um novo script, entre as constantes listadas no passo 1:

Perceba que converti as forças de k N para N , multiplicando-as por 10 3 .

Em seguida, vamos criar dois vetores, a l p h a e b e t a , representando uma faixa de valores que α e β podem assumir:

Os vetores a l p h a e b e t a vão de 0 a π 2 , com um passo de 0,01 . Eles servirão para criar os eixos X e Y dos gráficos da superfície e das curvas de nível pedidos na letra a.

Para podermos usar as funções s u r f c e c o n t o u r do MATLAB, devemos criar matrizes a partir dos vetores a l p h a e b e t a , as quais contêm as coordenadas dos vetores. Faremos isso usando a função m e s h g r i d ( ) :

A função m e s h g r i d ( ) pega os vetores a l p h a e b e t a , que têm 158 elementos, e cria duas matrizes quadradas A e B , de tamanho 158 × 158 . Cada linha da matriz A é o vetor a l p h a , repetido 158 vezes. Já cada coluna da matriz B é o vetor b e t a , também repetido 158 vezes.

A função m e s h g r i d ( ) serve para auxiliar na criação de gráficos em três dimensões. A matriz A será o eixo X do gráfico da superfície e das curvas de nível da função E P α , β . Já a matriz B será o eixo Y.

O eixo Z dos gráficos será a energia potencial. Por isso temos que criar uma matriz de tamanho 158 × 158 com os resultados de E P α , β para cada elemento das matrizes A e B . Digite no MATLAB a equação da energia potencial dada pelo enunciado, substituindo α e β pelas matrizes A e B :

Perceba que usei os três pontos (...) para quebrar a linha de código em duas, para que a equação da energia potencial coubesse toda no meu script, sem ter que usar uma barra de rolagem para vê-la por inteiro.

Passo 3

Após ter criado as matrizes A , B e E P , podemos gerar os gráficos pedidos na letra a. Vamos começar com a superfície da função E P α , β , que será gerada usando a função s u r f c do MATLAB. A função s u r f c tem a sintaxe:

s u r f c ( X , Y , Z )

A s u r f c plota uma superfície tridimensional com as curvas de nível abaixo dela. Ela gera um gráfico 3D com os valores da matriz X no eixo X, da matriz Y no eixo Y e da matriz Z no eixo Z.

Para gerar a superfície da função E P α , β , adicione no script as seguintes linhas de código:

Na primeira linha, pedimos ao MATLAB para gerar uma figura com o comando f i g u r e ( 1 ) , para termos o gráfico da superfície em uma janela diferente do gráfico das curvas de nível.

Na segunda linha, o comando s u r f c ( A , B , E P ) cria a superfície da energia potencial, tendo A no eixo X, B no eixo Y e E P no eixo Z.

Na terceira linha, o comando s h a d i n g   i n t e r p interpola as cores do gráfico, de forma que a superfície fica sem a malha, tendo um gradiente de cores bem bonito. Você vai ver mais pra baixo, quando gerarmos o gráfico.

Na quarta linha, o comando c o l o r b a r faz com que o gráfico tenha uma barra de cores indicando a intensidade da energia potencial.

Na quinta linha, dizemos que o eixo X do gráfico corresponde à variável de projeto α , com o comando x l a b e l ( ‘ \ a l p h a ’ ) .

Na sexta linha, dizemos que o eixo Y do gráfico corresponde à variável de projeto β , com o comando y l a b e l ( ‘ \ b e t a ’ ) .

Finalmente, na última linha, indicamos que o eixo Z do gráfico corresponde à energia potencial, com o comando z l a b e l ( ' E P ( \ a l p h a , \ b e t a ) ' ) .

Colocamos a barra na frente de a l p h a e b e t a para que apareçam as letras gregas α e β no eixo do gráfico.

Vamos executar o programa pra ver essa superfície:

Repare que logo abaixo da superfície, no plano α β , temos as curvas de nível da superfície.

Podemos ver as coordenadas dos pontos da superfície clicando neles. O ponto com menor E P que encontrei tem coordenadas α = 0.48 , β = 0.17 e E P = - 378.5 . Contudo, eu não tenho certeza se esse realmente é o ponto de mínimo, pois é difícil encontrar o ponto exato de mínimo olhando só a superfície.

Vamos gerar as curvas de nível em um gráfico separado para ver se facilita.

Passo 4

Para gerar um gráfico de curvas de nível, usaremos a função c o n t o u r , que tem a seguinte estrutura:

c o n t o u r ( X , Y , Z )

Esse comando cria um gráfico de curvas de nível, onde as isolinhas (linhas que ligam pontos de mesmo valor) correspondem aos valores da matriz Z . As matrizes X e Y definem o eixo X e o eixo Y do gráfico de curvas de nível.

Para criar o gráfico de curvas de nível, digite no seu script os comandos:

Na primeira linha, pedimos ao MATLAB para criar uma segunda figura com o comando f i g u r e ( 2 ) , para que o gráfico de curvas de nível seja gerado em uma janela diferente da janela onde foi plotada a superfície, no passo 3.

Na segunda linha, o comando c o n t o u r ( X 1 , X 2 , E P , ' S h o w T e x t ' , ' o n ' ) cria o gráfico das curvas de nível da energia potencial, tendo A no eixo X, B no eixo Y e E P dando os valores para as isolinhas. As strings no final do comando ( ' S h o w T e x t ' , ' o n ' ) pedem ao MATLAB para mostrar o valor de cada curva do gráfico.

Na terceira linha, indicamos que o eixo X do gráfico corresponde a α , com o comando x l a b e l ( ‘ \ a l p h a ' ) . Já na quarta linha, dizemos que o eixo Y do gráfico corresponde a β , com o comando y l a b e l ( ‘ \ b e t a ' ) .

Bora rodar o programa pra ver as curvas de nível:

Note que é o mesmo desenho que temos no plano α β no gráfico da superfície, do passo 3.

Repare que as curvas com menor E P estão na parte inferior do gráfico. A curva de menor intensidade mostrada no gráfico é E P = 0 . Isto significa que os ângulos α e β que dão o mínimo E P estão no interior dessa curva e que a energia potencial mínima é pelo menos 0 , mas pode assumir valores menores ainda.

Podemos ver as coordenadas de certos pontos ao clicar sobre o ponto no gráfico. No gráfico acima, o ponto com menor E P que encontrei tem coordenadas α = 0.47 , β = 0.17 , que dão um E P = - 378.8 .

Passo 5

Encontrei dois pontos com coordenadas muito próximas em cada gráfico, mas mesmo assim é muito difícil definir o mínimo de uma função olhando somente as figuras. A análise dos gráficos serve apenas para termos uma noção de onde se localiza o ponto de mínimo. Na minha busca, com certeza deixei passar algum ponto com energia potencial menor.

Por isso, vamos usar o f m i n s e a r c h   para encontrar o ponto de mínimo de maneira mais precisa (e responder à letra b do exercício). O f m i n s e a r c h tem a sintaxe:

x   =   f m i n s e a r c h ( @ f u n ç ã o , x 0 )

Precisamos fornecer a ele no mínimo duas entradas:

  • @ f u n ç ã o : uma função representando a função objetivo;
  • x 0 : um vetor contendo um “chute” inicial das variáveis de projeto.

A saída de f m i n s e a r c h é um vetor x contendo os valores das variáveis de projeto que minimizam a função objetivo.

Vamos criar uma nova função no MATLAB para representar a função objetivo E P α ,   β . Abra um script novo e digite:

Chamei a função que contém a função objetivo de e p _ m e c a n i s m o , mas você pode chamar do que quiser. e p _ m e c a n i s m o tem como entrada o vetor x , que tem dois elementos contendo as variáveis de projeto do problema de otimização: α e β . O primeiro elemento do vetor x representa α e o segundo, β . A saída de e p _ m e c a n i s m o é a variável E P , que é a energia potencial que queremos minimizar.

Repare que tive que entrar novamente com as constantes da função E P α ,   β , listadas no passo 1.

Após criar um script com a função objetivo, vamos implementar o f m i n s e a r c h . Em um novo script, salvo na mesma pasta onde está o script da função e p _ m e c a n i s m o , digite as linhas de código:

Na primeira linha, entramos com o “chute” inicial das variáveis de projeto α e β , armazenado no vetor x 0 . O enunciado pediu para adotarmos x 0   =   1 ,   1   .

Na segunda linha, usamos f m i n s e a r c h . Para indicar a função objetivo em f m i n s e a r c h , usamos o nome da função criada com a função objetivo com um @ na frente. Por isso a primeira entrada de f m i n s e a r c h , neste caso, é @ e p _ m e c a n i s m o (caso tenha dado um nome diferente, não esqueça de trocar!). O algoritmo de otimização por trás de f m i n s e a r c h vai procurar o mínimo da função objetivo, isto é, o menor valor possível de E P , partindo de x 0 .

A saída de f m i n s e a r c h é o vetor x , de dois elementos, com os valores de α e β que dão o menor E P possível.

A terceira linha calcula o valor de E P usando a função e p _ m e c a n i s m o , tendo como entrada o vetor x dado por f m i n s e a r c h . Desta forma, encontramos a energia potencial mínima.

Vamos executar o programa e ver qual o ponto de mínimo que o f m i n s e a r c h nos dá:

Encontramos que a energia potencial mínima é E P = - 378,9307 e ela ocorre em α = 0,4636   r a d e β = 0,1652   r a d . Até que deu um resultado bem pertinho dos valores que tiramos dos gráficos =D

Resposta

A energia potencial mínima é E P = - 378,9307 e ela ocorre em α = 0,4636   r a d e β = 0,1652   r a d