Você está na página 1de 2

01/06/2019 Exercício_7.

ipynb - Colaboratory

Exercício 7 - PNL - Com Restrições de


Desigualdade
1) Utilize o método de Newton para resolver o problema de otimização abaixo:
2 2
minimizar f (x) = exp(x) ∗ (4x + 2y + 4xy + 2y + 1)
x

sujeito a: xy ≥ −10

1.5 + xy − x − y ≤ 0

from sympy import *


import numpy as np

# Criando as variáveis simbólicas:

x = Symbol('x')
y = Symbol('y')
lbd1 = Symbol('lbd1')
lbd2 = Symbol('lbd2')
s1 = Symbol ('s1')
s2 = Symbol('s2')

# Definindo a função objetivo e lagrangeano

f = exp(x)*(4*x**2 + 2*y**2 + 4*x*y + 2*y + 1)


L = Matrix([f - lbd1*(x*y - s1**2 + 10) + lbd2*(1.5 + x*y - x - y + s2**2)])

# Cálculo do jacobiano e hessiana

var = Matrix([x,y,lbd1,lbd2,s1,s2])
jacobiano = L.jacobian(var)
hessiana = hessian(L,var)

# Condições iniciais

solucao = Matrix([-20,20,1,1,0,0])
tolerancia = 1e-12
iteracao = 0

# Cálculo do erro

delta_y =-jacobiano.subs([(x,float(solucao[0])),(y,solucao[1]),(lbd1,solucao[2]),
(lbd2,solucao[3]),(s1,solucao[4]),(s2,solucao[5])])
erros = np.abs(delta_y)
maior_erro = np.max(erros)

# Processo iterativo Método de Newton

while maior_erro > tolerancia:

iteracao = iteracao + 1
hessiana_atual = hessiana.subs([(x,float(solucao[0])),(y,solucao[1]),
(lbd1,solucao[2]),(lbd2,solucao[3]),
(s1,solucao[4]),(s2,solucao[5])])
delta_x = hessiana_atual.inv()*delta_y.transpose()
solucao = solucao + delta_x
delta_y = -jacobiano.subs([(x,float(solucao[0])),(y,solucao[1]),
(lbd1,solucao[2]),(lbd2,solucao[3]),
(s1,solucao[4]),(s2,solucao[5])])
erros = np.abs(delta_y)
maior_erro = np.max(erros)

https://colab.research.google.com/drive/1eU6fQ1NEcnDNbO5Jq8bmvR_F6W69m6Xp#scrollTo=HN9pDMQkyNaN&printMode=true 1/2
01/06/2019 Exercício_7.ipynb - Colaboratory
fob = f.subs([(x,float(solucao[0])),(y,float(solucao[1]))])

print('Valor da FOB:',fob)
print('Solução:')
print('x =',float(solucao[0]))
print('y =',float(solucao[1]))
print('lbd1 =',float(solucao[2]))
print('lbd2 =',float(solucao[3]))
print('s1 =',float(solucao[4]))
print('s2 =',float(solucao[5]))
print('Número de iterações:',iteracao)

Valor da FOB: 0.0235503796241751


Solução:
x = -9.547405025104274
y = 1.0474050251042741
lbd1 = 0.018304495965107092
lbd2 = 0.016352465441204937
s1 = 0.0
s2 = 0.0
Número de iterações: 6

https://colab.research.google.com/drive/1eU6fQ1NEcnDNbO5Jq8bmvR_F6W69m6Xp#scrollTo=HN9pDMQkyNaN&printMode=true 2/2

Você também pode gostar