Exercícios Resolvidos de Otimização

Ver Teoria

Enunciado

A figura abaixo mostra dois carros A e B conectados por três molas lineares com rigidez igual a k 1 = 5   N / m , k 2 = 10   N / m e k 3 = 8   N / m . Não há atrito no sistema.

As molas estão em sua posição sem deformação quando a força P aplicada é zero. A partir do seguinte problema de otimização para a função da energia potencial E P :

m i n i m i z e   E P = 0,5 k 2 x 1 2 + 0,5 k 3 x 2 - x 1 2 + 0,5 k 1 x 2 2 - P x 2

  1. Plote a superfície e as curvas de nível da função;
  2. Obtenha os deslocamentos otimizados x 1 e x 2 usando f m i n s e a r c h com ponto inicial x 1 , x 2 = ( 1,1 ) e P = 100   N .

Passo 1

O enunciado nos dá uma função E P x 1 , x 2 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 sistema composto por dois carros conectados por molas, representada pela função dada no enunciado:

E P x 1 , x 2 = 0,5 k 2 x 1 2 + 0,5 k 3 x 2 - x 1 2 + 0,5 k 1 x 2 2 - P x 2

Logo, a energia potencial do sistema E P x 1 , x 2 é minha função objetivo.

A função objetivo depende das variáveis x 1 e x 2 e de algumas constantes, como a rigidez das molas e a força P , dadas pelo enunciado:

k 1 = 5   N / m

k 2 = 10   N / m

k 3 = 8   N / m

P = 100   N

As variáveis x 1 e x 2 são as variáveis de projeto. Em outras palavras, queremos encontrar quanto x 1 e x 2 devem ser para que a energia potencial E P x 1 , x 2 seja a menor possível.

Usaremos dois métodos para encontrar a posição dos carros A e B, representada por x 1 e x 2 , respectivamente, que minimizam E P x 1 , x 2 :

  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. Essas funções foram utilizadas no exercício anterior, mas vamos revê-las detalhadamente, para fixar bem como elas funcionam;
  2. Usando f m i n s e a r c h , com um chute inicial x 1 , x 2 = ( 1,1 ) .

Passo 2

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

Em seguida, vamos criar dois vetores, x 1 e x 2 , representando uma faixa de valores que x 1 e x 2 podem assumir:

Os vetores x 1 e x 2 vão de - 10 a 10 , com um passo de 1 . 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 x 1 e x 2 , que 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 x 1 e x 2 , que têm 21 elementos, e cria duas matrizes quadradas X 1 e X 2 , de tamanho 21 × 21 . Cada linha da matriz X 1 é o vetor x 1 , repetido 21 vezes. Já cada coluna da matriz X 2 é o vetor x 2 , repetido 21 vezes.

Para ver bem direitinho como o m e s h g r i d ( ) funciona, você pode rodar o script que você escreveu até agora e pedir ao MATLAB para imprimir x 1 e X 1 e compará-los, e fazer a mesma coisa para x 2 e X 2 .

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 X 1 será o eixo X do gráfico da superfície e das curvas de nível da função E P x 1 , x 2 . Já a matriz X 2 será o eixo Y.

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

Repare que usei o ponto ao lado das matrizes (por exemplo, X 1 . ^ 2 ), para indicar que queremos realizar a operação em cada elemento da matriz.

Passo 3

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

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.

Vai dar para entender melhor aplicando a s u r f c no exercício. Para gerar a superfície da função E P x 1 , x 2 , 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 ( X 1 , X 2 , E P ) cria a superfície da energia potencial, tendo X 1 no eixo X, X 2 no eixo Y e E P no eixo Z.

Na terceira 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 quarta linha, dizemos que o eixo X do gráfico corresponde à variável de projeto x 1 , com o comando x l a b e l ( ‘ x _ 1 ’ ) .

Na quinta linha, dizemos que o eixo Y do gráfico corresponde à variável de projeto x 2 , com o comando y l a b e l ( ‘ x _ 2 ’ ) .

Finalmente, na sexta linha, indicamos que o eixo Z do gráfico corresponde à energia potencial, com o comando z l a b e l ( ' E P ( x _ 1 , x _ 2 ) ' ) .

Vamos executar o programa pra ver essa superfície:

Repare que logo abaixo da superfície, no plano x 1 x 2 , temos as curvas de nível da superfície.

Para analisar a superfície e identificar o ponto de mínimo, na janela do gráfico, use o botão “Rotate 3D”, destacado abaixo, para “girar” a superfície.

Podemos ver as coordenadas dos pontos da superfície clicando neles. O ponto com menor E P que encontrei tem coordenadas x 1 = 4 , x 2 = 10 e E P = - 526 . 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 X 1 no eixo X, X 2 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 do gráfico corresponde à variável de projeto x 1 , com o comando x l a b e l ( ‘ x _ 1 ’ ) .

Na quarta linha, dizemos que o eixo Y do gráfico corresponde à variável de projeto x 2 , com o comando y l a b e l ( ‘ x _ 2 ’ ) .

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

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

Repare que as curvas com menor E P estão no canto superior direito do gráfico. Quanto mais afastado do canto superior direito, maior a intensidade de E P .

A curva de menor intensidade mostrada no gráfico é E P = - 500 . Isto significa que as coordenadas x 1 e x 2 que dão o mínimo E P estão no interior dessa curva e que a energia potencial mínima é pelo menos - 500 , 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 x 1 = 4 e x 2 = 9 , que dão um E P = - 517,5 .

Passo 5

Encontrei dois pontos diferentes em cada gráfico, pois é muito difícil detectar 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).

Antes de implementar o f m i n s e a r c h , vamos relembrar como ele é:

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

Precisamos fornecer a ela 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 x 1 , x 2 . Abra um script novo e digite:

Chamei a função que contém a função objetivo de e n e r g i a _ p o t e n c i a l , mas você pode chamar do que quiser. e n e r g i a _ p o t e n c i a l tem como entrada o vetor x , que tem dois elementos contendo as variáveis de projeto do problema de otimização: x 1 e x 2 . A saída de e n e r g i a _ p o t e n c i a l é 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 x 1 , x 2 , listadas no passo 1.

Após criar um script com a função objetivo, vamos implementar a 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 n _ p o t , digite as linhas de código:

Na primeira linha, entramos com o “chute” inicial das variáveis de projeto x 1 e x 2 , 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 n e r g i a _ p o t e n c i a l (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   x 1   e   x 2 que dão o menor E P possível.

A terceira linha calcula o valor de E P usando a função e n e r g i a _ p o t e n c i a l , 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 = - 529,4118 e ela ocorre em x 1 = 4,7059 e x 2 = 10,5883 . Até que não tá tão longe do ponto que encontrei na superfície, né?

Resposta

A energia potencial mínima é E P = - 529,4118 e ela ocorre em x 1 = 4,7059 e x 2 = 10,5883 .