• Nenhum resultado encontrado

Bioinformática Avançada e Biologia de Sistemas Optimização

N/A
N/A
Protected

Academic year: 2021

Share "Bioinformática Avançada e Biologia de Sistemas Optimização"

Copied!
218
0
0

Texto

(1)

A. Ismael F. Vaz

Departamento de Produção e Sistemas Escola de Engenharia Universidade do Minho aivaz@dps.uminho.pt

Mestrado em Bioinformática Ano lectivo 2009/2010

(2)

Conteúdo

1 Introdução

2 Optimização

3 Optimização não linear sem restrições 4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade 10 Optimização com restrições com o R

(3)

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade

(4)

Apresentação - Docente

Aulas teóricas e teórico-práticas A. Ismael F. Vaz - aivaz@dps.uminho.pt www.norg.uminho.pt/aivaz

Horário de atendimento Marcação por email.

(5)

Página da disciplina;

www.norg.uminho.pt/aivaz

Três fichas TPs para resolver ao longo desta parte do módulo (Nota mínima de 8);

A classificação final do módulo é: Ficha TP1+Ficha TP2+Ficha TP33 . A classificação na Unidade Curricular (UC) tem uma fórmula de cálculo própria.

É obrigatória a presença em 2/3 das aulas efectivas (1/3 de faltas – atenção às justificações/estatutos).

(6)

Material necessário e de apoio

Calculadora científica; Folhas das fichas TPs; Papel e caneta;

Livro de Computação Numérica; www.norg.uminho.pt/emgpf Sebenta de Optimização Não Linear; www.norg.uminho.pt/emgpf

Software R - http://www.r-project.org; Fichas TPs e acetatos disponíveis na página; www.norg.uminho.pt/aivaz

(7)

Optimização

A optimização é uma área da matemática aplicada com inúmeras aplicações no nosso dia a dia.

Exemplo de aplicações

Poluição do ar (determinação de políticas óptimas), Robótica (determinação de trajectórias óptimas), Processos de fermentação semi-contínua (etanol, cerveja!!), etc... e astrofísica.

Engenharia

(8)

Controlo óptimo - Um exemplo

Problema de optimização do processo semi-contínuo de produção de Etanol.

O problema de optimização é: (t0 = 0 e tf = 61.2 dias)

max u(t) J (tf) ≡ x3(tf)x4(tf) s.a dx1 dt = g1x1− u x1 x4 dx2 dt = −10g1x1+ u 150 − x2 x4 dx3 dt = g2x1− u x3 x4 dx4 dt = u 0 ≤ x4(tf) ≤ 200 0 ≤ u(t) ≤ 12 ∀t ∈ [t0, tf] com g1=  0.408 1 + x3/16   x 2 0.22 + x2  g2=  1 1 + x3/71.5   x 2 0.44 + x2 

onde x1, x2e x3são as concentrações da

massa celular, substrato e produto (g/L),

e x4é o volume (L). As condições iniciais

são:

x(t0) = (1, 150, 0, 10)T.

(9)

Grande exigência em termos numéricos; Grande exigência em termos de programação;

Solução da equação diferencial com o CVODE (software em C); Problemas codificados em AMPL (linguagem de modelação); Algoritmo para optimização sem derivadas;

(10)

Programa detalhado

Aula Matéria

1 Grafos (Cláudio Alves)

2 Optimização Combinatória (Cláudio Alves)

3 Ficha de avaliação.

4 Introdução à optimização não linear (sem restrições). Definições e

condições de optimalidade.

5 Introdução ao R. Definição de vectores e matrizes. Codificação de

funções matemáticas e operadores.

6 Método de Newton e quasi-Newton. Modelação de casos em R(função

nlm e optim).

7 Ficha de Avaliação. Introdução à optimização não linear com res-trições. Tipos de problemas e suas características. Condições de optimalidade. Tratamento de restrições lineares e não lineares.

8 Modelação de casos e uso de R(funções solveLP, constrOptim e Rdonlp2).

9 Modelação de casos e uso de R(funções solveLP, constrOptim e Rdonlp2).

10 Revisões eFicha de avaliação.

(11)

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade

(12)

Classificação

Os problemas de optimização podem ser classificados de acordo com: as funções envolvidas (na função objectivo e nas restrições) o tipo de variáveis usadas (inteiras, binárias, discretas, contínuas, etc...)

o tipo de restrições consideradas (igualdade, desigualdade, infinitas, complementaridade, etc...)

o tipo de solução que se pretende obter (local ou global)

diferenciabilidade das funções envolvidas (optimização com ou sem derivadas)

(13)

Não existesoftware que resolva todos os tipos de problemas.

O tipo de problema que se pretende resolver condicionao software (solver) a usar.

Um solver para optimização contínua nãopode ser usado para resolver problemas com variáveis discretas.

Um solver que use derivadas (ou as estime), aplicado a um problema que envolva funções não diferenciáveis, pode convergir (se convergir!!!) para um ponto de descontinuidade da derivada, apresentando-a como solução.

(14)

Tipo de problemas

Programação linear min(max) cTx(+d) s.a Ax = b Ex ≤ (≥)f Programação quadrática min xTQx + cTx s.a Ax = b Ex ≤ f

(15)

Optimização não linear

min f (x) s.a c(x) = 0

h(x) ≤ 0

Desde que na definição do problema seja usada uma função não linear. f (x), c(x) e h(x) podem ser funções lineares.

(16)

Classificação das variáveis

Booleanas ou binárias (0 ou 1) Inteiras (Por exemplo 1,2,3,4,5,6,. . . )

Discretas (Por exemplo preto, azul, verde, vermelho, etc...) Contínuas (Por exemplo x ∈ [0, 2])

(17)

Óptimo local (determinação de um minimizante local ou relativo) Óptimo global (determinação de um minimizante global ou absoluto)

(18)

Classificação quanto à estrutura

Programação semi-definida (envolve matrizes semi-definidas) Programação semi-infinita (uma função objectivo sujeita a uma infinidade de restrições)

Programação estocástica ou robusta (envolve parâmetros incertos, conhecendo-se um intervalo de variação)

Problemas de complementaridade (restrições em que se uma for diferente de zero então a outra é necessariamente zero)

Problemas de controlo óptimo (determinar a melhor forma de controlar um determinado sistema - frequentemente modelado com equações diferenciais)

etc...

(19)

Estocásticos (Procura da solução de forma aleatória, mas controlada)

Algoritmos genéticos Colónias de formigas Colónias de partículas etc...

Grande parte das vezessem convergência garantida. Usados para a procura global (quando funcionam!!!). Determinísticos

Dados os parâmetros iniciais (aproximação inicial e parâmetros do algoritmo) executa sempre da mesma forma.

Grande parte das vezescom convergência garantida para um óptimo local.

Híbridos

(20)

Conteúdo

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade

10 Optimização com restrições com o R

(21)

A formulação matemática de um problema de optimização, na sua forma mais geral, é min x∈Rnf (x) s.a ci(x) = 0, i = 1, . . . , m cj(x) ≥ 0, j = m + 1, . . . , t

onde f (x) é a função objectivo, ci(x) = 0 são as restrições de igualdade e cj(x) ≥ são as restrições de desigualdade.

(22)

Equivalência entre problemas

O problema de optimização (maximização) max

x∈Rng(x)

s.a ci(x) = 0, i = 1, . . . , m

˜

cj(x) ≤ 0, j = m + 1, . . . , t

é equivalente ao problema de optimização (minimização) min

x∈Rnf (x) ≡ −g(x)

s.a ci(x) = 0, i = 1, . . . , m

cj(x) ≡ −˜cj(x) ≥ 0, j = m + 1, . . . , t

(23)

−1.5 −1 −0.5 0 0.5 1 1.5 2 2.5 −6 −4 −2 0 2 4 6 x f(x), −f(x) x* f(x*) −f(x*) f (x) = (x − 0.5)2+ 2 g(x) = −f (x) = −(x − 0.5)2− 2

(24)

Exemplo

Pretende-se determinar o volume máximo de uma lata (cilindro), fechada nas duas extremidades, sabendo que a quantidade de chapa a usar é de 1000 cm2. Sendo r o raio da tampa e h a altura da lata, uma possível

formulação do problema de optimização é max

(r,h)∈R2πr

2h

s.a 2πr2+ 2πrh = 1000

que pode ser transformado no problema de minimização min

x∈R2−πx

2 1x2

s.a 2πx21+ 2πx1x2= 1000

(25)

Apenas iremos considerar problemas de minimização e sem restrições. A sua formulação é pois

min

x∈Rnf (x). Classificação dos problemas (mais usuais)

Problemas unidimensionais (n = 1, ou seja, x ∈ R);

Problemas multidimensionais (n > 1, ou seja, x = (x1, . . . , xn)T ∈ Rn);

Problemas de programação linear (f (x) e c(x) são funções lineares, i.e., f (x) = Ax, c(x) = Ax − b);

Problemas de programação quadrática (f (x) é uma função quadrática, i.e.,

f (x) = 1

2x

TGx + dTx, e c(x) são funções lineares);

Problemas com limites simples (restrições nas variáveis do tipo al≤ xl≤ bl,

l = 1, . . . , n);

Problemas de programação não linear (pelo menos uma das funções envolvidas, f (x), c(x) é não linear).

(26)

Classificação de mínimos

x∗ é

minimizante local forte se ∃δ tal que f (x∗) < f (¯x), ∀¯x ∈ Vδ(x∗);

minimizante local fraco se ∃δ tal que f (x∗) ≤ f (¯x), ∀¯x ∈ Vδ(x∗);

minimizante global forte se f (x∗) < f (¯x), ∀¯x ∈ Rn; minimizante global fraco se f (x∗) ≤ f (¯x), ∀¯x ∈ Rn; Onde Vδ(x∗) é uma vizinhança de x∗ de raio δ (||¯x − x∗|| < δ).

(27)

Mínimo global forte Função ilimitada Mínimo global fraco

f (x∗) < f (¯x) f (x∗) ≤ f (¯x)

(28)

Mínimo local

∃δ : f (x∗) < f (¯x), ∀¯x ∈ Vδ(x∗).

∃δ : f (x∗) ≤ f (¯x), ∀¯x ∈ V δ(x∗).

(29)

Máximo e maximizante; Mínimo e minimizante; Óptimo local ou global;

Convergência local e global de algoritmos. Um algoritmo diz-se global se determina um minimizante (maximizante) dada uma qualquer aproximação inicial. Um algoritmo diz-se local se determina um minimizante partindo apenas de uma aproximação inicial suficientemente perto do minimizante. (Não confundir com a determinação de mínimos locais ou globais).

(30)

Condições de optimalidade

Condições necessárias para a existência de um mínimo f0(x∗) = 0;

f00(x∗) ≥ 0.

Condições suficientes para a existência de um mínimo f0(x∗) = 0;

f00(x∗) > 0.

(31)

f (x) = (x − 1.5)2 f (x) = sin(x) f0(1.5) = 2 × (1.5 − 1.5) = 0 f0(π2) = cos(π2) = 0 f00(1.5) = 2 > 0 f00(π2) = − sin(π2) = −1 < 0 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 0 0.05 0.1 0.15 0.2 0.25 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2 0.84 0.86 0.88 0.9 0.92 0.94 0.96 0.98 1 1.02

(32)

Exemplos

f (x) = x4 f (x) = x3 f0(0) = 3 × (0)3 = 0 f0(0) = 3 × (0)2= 0 f00(0) = 12 × (0)2= 0 f00(0) = 6 × (0) = 0 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1 −1 −0.8 −0.6 −0.4 −0.2 0 0.2 0.4 0.6 0.8 1

Verifica-se a condição necessária, mas não a condição suficiente

(33)

Gradiente de f (x) : Rn→ R, x = (x 1, . . . , xn)T, vector de dimensão n ∇f (x) = g(x) =      ∂f ∂x1 ∂f ∂x2 . . . ∂f ∂xn      = ∂f ∂x1 , ∂f ∂x2 , . . . , ∂f ∂xn T

Matriz Hessiana, matriz de dimensão n × n

∇2f (x) = G(x) =    ∂2f ∂x2 1 . . . ∂x∂2f n∂x1 . . . . ∂2f ∂x1∂xn . . . ∂2f ∂x2 n   

(34)

Condições de optimalidade

Condições necessárias para a existência de um mínimo g(x∗) = 0 (sistema não linear);

G(x∗)  0 (semi-definida positiva).

Condições suficientes para a existência de um mínimo g(x∗) = 0 (sistema não linear);

G(x∗)  0 (definida positiva).

(35)

Pretende-se determinar todos os pontos óptimos do seguinte problema de optimização min x∈R2x 2 1+ x32+ 2x1x2 ≡ f (x)

Da condição de necessária e suficiente de primeira ordem temos que g(x) = (2x1+ 2x2, 3x22+ 2x1)T = (0, 0)T, ou seja, ( 2x1+ 2x2 = 0 3x22+ 2x1 = 0 ⇔ ( x1= −x2 3x22− 2x2= 0 ⇔    x1= −x2 x2= 0 ∨ x2 = 2 3 Os pontos ¯x = (0, 0)T e ˆx = (−23,23)T são pontos estacionários de f (x).

(36)

Cont.

Para verificar as condições de segunda ordem temos que estudar G(¯x) e G(ˆx). G(x) =  2 2 2 6x2  , G(¯x) =  2 2 2 0  , G(ˆx) =  2 2 2 4  det(|2|) = 2, det  2 2 2 0  = −4, det  2 2 2 4  = 4 e temos que G(¯x) é indefinida (¯x é ponto sela - descanso) e G(ˆx) é definida positiva (ˆx é mínimo local forte).

(37)

−1.5 −1 −0.5 0 0.5 1 1.5 −2 −1 0 1 2 −10 −5 0 5 10 15 x1 x2 f(x) −1.5 −1 −0.5 0 0.5 1 1.5 −1.5 −1 −0.5 0 0.5 1 1.5 f (x) = x21+ x32+ 2x1x2

(38)

Motivação para os métodos numéricos

Na determinação analítica dos pontos estacionários é necessário resolver um sistema não linear, que é quase sempre de difícil resolução.

Exemplo

Considere-se a função f (x) = x1ex2 − 2x1x2.

Os pontos estacionários de f (x) obtêm-se através da resolução do sistema não linear

(

ex2 − 2x

2 = 0

x1ex2 − 2x1 = 0

(39)

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade

(40)

O que é o R?

R

R pode ser considerado como uma implementação da linguagem S desenvolvida nos laboratorios da Bell por Rick Becker, John Chambers e Allan Wilks.

O ambiente R (linguagem de programação, GUI, etc..) é usado por muitas pessoas como um sistema estatístico. Embora seja usado para a estatística o ambiente R pode ser visto como um sistema em que muitas das técnicas modernas de estatística se encontram implementadas.

Algumas das técnicas são fornecidas com o sistema (built in) enquanto que outras são fornecidas como pacotes adicionais (packages).

(41)

O que aprender?

Neste caso apenas iremos introduzir os comandos básicos e a criação de scripts necessários aos capítulos seguintes.

O R possui algumas funções para optimização disponíveis na versão base, opcionais como pacotes e outras que se podem obter na Internet.

Funções na versão base

uniroot - Determinação de zeros de funções unidimensionais. optimize - Optimização unidimensional sem restrições. optim - Optimização multidimensional sem restrições.

nlm - Optimização multidimensional sem restrições com algoritmo do tipo Newton.

(42)

Pacotes necessários (usados).

Disponíveis na CRAN

linprog (solveLP - Programação linear). Instalação usando o Menu Packages->Install package(s).

...

Na web

Rdonlp2 (donlp2 - Optimização multidimensional com restrições). Obtém-se em arumat.net/Rdonlp2.

Algencan - Possui uma interface de ligação ao R, mas é necessário compilar o código fornecido. Pode-se obter em

www.ime.usp.br/~egbirgin/tango/r.php ...

Carregar os pacotes

Não esquecer de fazer Packages->Load package.

(43)

Ferramentas pouco similares

Outros programas pouco similares são o MATLAB, Mathematica e o Maple

Ferramentas similares

(44)

Ambiente R (R GUI)

(45)

Aritméticas > 2+3*2-1.5*2^2 [1] 2

Variáveis built-in – constantes > pi

[1] 3.141593

Expressões (com o recurso a funções matemáticas) > a <- 2*sin(pi)^2+3*exp(1)+sqrt(2)+cosh(2) > a

(46)

Operações básicas

Ajuda

> help(’acos’)

É aberta uma nova janela com a ajuda referentes às funções trigonométricas.

(47)

Precisão

O R por defeito imprime apenas 7 casa decimais, mas essa opção (entre outras) pode ser modificada.

> options(digits=15) > pi [1] 3.14159265358979 > options() $add.smooth [1] TRUE $check.bounds [1] FALSE $chmhelp [1] TRUE ...

(48)

Operações básicas com vectores

Vectores > x <- c(10.4, 5.6, 3.1, 6.4, 21.7) > x [1] 10.4 5.6 3.1 6.4 21.7 > 1/x [1] 0.09615385 0.17857143 0.32258065 0.15625000 0.04608295 > y <- c(x, 0, x) > y [1] 10.4 5.6 3.1 6.4 21.7 0.0 10.4 5.6 3.1 6.4 21.7

Um vector é definido como a concatenação de vários escalares.

(49)

Operações com vectores > v <- 2*x + y + 1

Warning message: In 2 * x + y :

longer object length is not a multiple of shorter object length > v <- x*c(2, 3, 4, 5, 6)+1

> v

(50)

Operações básicas com arrays e matrizes

Operações com arrays

Um vector para ser considerado um array tem que ser definida a sua dimensão. > dim(v) <- c(1,5) > v [,1] [,2] [,3] [,4] [,5] [1,] 21.8 17.8 13.4 33 131.2 > dim(v) <- c(5,1) > v [,1] [1,] 21.8 [2,] 17.8 [3,] 13.4 [4,] 33.0 [5,] 131.2

(51)

Função para definição de arrays e matrizes

As funções matrix() e array() permitem uma forma mais rápida e natural de definir matrizes e arrays.

> x <- array(1:20, dim=c(4,5)) > x [,1] [,2] [,3] [,4] [,5] [1,] 1 5 9 13 17 [2,] 2 6 10 14 18 [3,] 3 7 11 15 19 [4,] 4 8 12 16 20 > i <- array(c(1:3,3:1), dim=c(3,2)) > i [,1] [,2] [1,] 1 3 [2,] 2 2 [3,] 3 1

(52)

Operações básicas com vectores e matrizes

Visualização e atribuição > x[i] [1] 9 6 3 > x[i] <- 0 > x [,1] [,2] [,3] [,4] [,5] [1,] 1 5 0 13 17 [2,] 2 0 10 14 18 [3,] 0 7 11 15 19 [4,] 4 8 12 16 20

(53)

Repetição de valores > Z <- array(0, c(3,4,2)) > Z , , 1 [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0 , , 2 [,1] [,2] [,3] [,4] [1,] 0 0 0 0 [2,] 0 0 0 0 [3,] 0 0 0 0

(54)

Operações básicas com vectores e matrizes

Operações com matrizes e vectores > I=matrix(1,2,2) > x=array(c(1,2),dim=c(2,1)) > Ix <- I %*% x > Ix [,1] [1,] 3 [2,] 3 > I*x

Error in I * x : non-conformable arrays

(55)

Operações com vectores – Funções > Ix [,1] [1,] 3 [2,] 3 > cos(Ix) [,1] [1,] -0.9899925 [2,] -0.9899925

Operações com vectores

> a=array(1:3,dim=c(1,3)) > b=array(4:6,dim=c(1,3)) > a+b

[,1] [,2] [,3]

(56)

Operações básicas com vectores e matrizes

Operações elemento a elemento > a*b

[,1] [,2] [,3]

[1,] 4 10 18

Operações com vectores > 2*a+b^2

[,1] [,2] [,3]

[1,] 18 29 42

(57)

Operações com vectores > a %*% b

Error in a %*% b : non-conformable arguments > a %*% aperm(b)

[,1]

[1,] 32

Operações com vectores > aperm(a) %*% b

[,1] [,2] [,3]

[1,] 4 5 6

[2,] 8 10 12

(58)

Operações básicas com vectores e matrizes

Matriz > A<-matrix(1:6,3,2) > A [,1] [,2] [1,] 1 4 [2,] 2 5 [3,] 3 6 Matriz 3 × 2. O R é case sensitive, i.e., A é diferente de a.

Matriz transposta > aperm(A) [,1] [,2] [,3] [1,] 1 2 3 [2,] 4 5 6 Matriz 2 × 3.

(59)

> B<-matrix(6:1,3,2) > B [,1] [,2] [1,] 6 3 [2,] 5 2 [3,] 4 1 > A %*% aperm(B) [,1] [,2] [,3] [1,] 18 13 8 [2,] 27 20 13 [3,] 36 27 18 > aperm(A) %*% B [,1] [,2] [1,] 28 10 [2,] 73 28 > A+B [,1] [,2] [1,] 7 7 [2,] 7 7 [3,] 7 7 > A %+% B

Error: could not find function "%+%"

(60)

Sistemas lineares

Um sistema linear pode ser representado na forma de matricial como Ax = b, em que A é uma matriz (dos coeficientes), x é a solução do sistemas e b é um vector (dos termos independentes).

Sistema    x1 +2x2 +3x3 = 1 4x1 +5x2 +6x3 = 2 7x1 +8x2 +9x3 = 3 ≡   1 2 3 4 5 6 7 8 9     x1 x2 x3  =   1 2 3   i.e. A =   1 2 3 4 5 6 7 8 9   x =   x1 x2 x3   e b =   1 2 3  

(61)

Um exemplo (diferente do anterior) > A<-matrix(c(1,2,3,5,6,7,3,4,7),3,3) > b<-array(1:3,dim=c(3,1)) > x <- solve(A,b) > x [,1] [1,] 1.000000e+00 [2,] 4.163336e-17 [3,] -8.326673e-17 > A%*%x-b [,1] [1,] 0 [2,] 0 [3,] 0

(62)

Inversa de uma matriz

O exemplo anterior > A<-matrix(c(1,2,3,5,6,7,3,4,7),3,3) > solve(A) [,1] [,2] [,3] [1,] -1.75 1.75 -0.25 [2,] 0.25 0.25 -0.25 [3,] 0.50 -1.00 0.50 > A%*%solve(A) [,1] [,2] [,3]

[1,] 1.000000e+00 2.220446e-16 1.110223e-16 [2,] 0.000000e+00 1.000000e+00 0.000000e+00 [3,] 3.330669e-16 2.220446e-16 1.000000e+00

(63)

Curiosidades > absdetA <- prod(svd(A)$d) > absdetA [1] 8 > det(A) [1] -8

svd - singular value decomposition - retorna uma lista em que d são os elementos da diagonal.

(64)

Acesso a elementos de vectores e matrizes

Acesso a vectores

> x <- seq(-pi, pi, by=.5) > x [1] -3.1415927 -2.6415927 -2.1415927 -1.6415927 -1.1415927 -0.6415927 [7] -0.1415927 0.3584073 0.8584073 1.3584073 1.8584073 2.3584073 [13] 2.8584073 > y <- sin(x) > y

[1] -1.224606e-16 -4.794255e-01 -8.414710e-01 -9.974950e-01 -9.092974e-01

[6] -5.984721e-01 -1.411200e-01 3.507832e-01 7.568025e-01 9.775301e-01

[11] 9.589243e-01 7.055403e-01 2.794155e-01

> y[2:3]

[1] -0.4794255 -0.8414710

(65)

Acesso a matrizes

> A <- matrix(seq(length=10, from=-5, by=.2),5,2) > A [,1] [,2] [1,] -5.0 -4.0 [2,] -4.8 -3.8 [3,] -4.6 -3.6 [4,] -4.4 -3.4 [5,] -4.2 -3.2 > A[2:4,1] [1] -4.8 -4.6 -4.4

(66)

Matrizes e vectores especiais

Zeros e uns > matrix(0,2,2) [,1] [,2] [1,] 0 0 [2,] 0 0 > matrix(1,2,2) [,1] [,2] [1,] 1 1 [2,] 1 1 Identidade - Aleatórias > diag(3) [,1] [,2] [,3] [1,] 1 0 0 [2,] 0 1 0 [3,] 0 0 1 > x <- rnorm(50) > X <- matrix(rnorm(4),2,2) > X [,1] [,2] [1,] 0.9333478 -0.9596665 [2,] 1.2975969 1.1051097 > Y <- matrix(runif(4),2,2) > Y [,1] [,2] [1,] 0.8034793 0.9085925 [2,] 0.2916994 0.2851831

(67)

Atribuições > A <- matrix(1,3,3) > A[1:2,1] <- 2 > A [,1] [,2] [,3] [1,] 2 1 1 [2,] 2 1 1 [3,] 1 1 1 > A[3,c(1,3)]<-4 > A [,1] [,2] [,3] [1,] 2 1 1 [2,] 2 1 1 [3,] 4 1 4 Troca de valores > A[c(1,2),1]<-2*A[c(1,2),1] > A [,1] [,2] [,3] [1,] 4 1 1 [2,] 4 1 1 [3,] 4 1 4 > A[2:3,3]=A[3:2,3] > A [,1] [,2] [,3] [1,] 4 1 1 [2,] 4 1 4 [3,] 4 1 1

(68)

Vectores lógicos

Vectores lógicos > ages <- c(12, 11, 18, 19, 11, 60, 65, 71, 7, 10) > adults <- ages >= 18 > old <- ages >=65 > adults

[1] FALSE FALSE TRUE TRUE FALSE TRUE TRUE TRUE FALSE FALSE

> old

[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE

> active <- adults & !old > active

[1] FALSE FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE FALSE

> totaladults <- sum(adults*ages) > totaladults

[1] 233

(69)

Operadores lógicos

Símbolo Representa Símbolo Representa

> Maior que >= Maior ou igual que

< Menor que <= Menor ou igual que

!= Diferente de == Igual a

! Negação & E

(70)

Valores em falta

Not a Number (NaN) e infinito (Inf) > x <- c(1, 2, NaN, 0)

> y <- c(1, 0, 2, 0) > z <- x/y

> z

[1] 1 Inf NaN NaN

> is.na(z)

[1] FALSE FALSE TRUE TRUE

> is.nan(z)

[1] FALSE FALSE TRUE TRUE

> is.finite(z)

[1] TRUE FALSE FALSE FALSE

> is.infinite(z)

[1] FALSE TRUE FALSE FALSE

(71)

Funções

Função Descrição

max Elemento máximo de um vector

min Elemento mínimo de um vector

sum Soma de todos os elementos

mean Média aritmética

(72)

Mensagens e display de variáveis

Ficheiros > i <- 1:3

> X <- matrix(1:10,ncol=5)

> write(X, file="exp.txt", sep = "\t") > write(cbind(i,X[1,i]), file="exp.txt", ncolumns=2, append=TRUE, sep = "\t") Conteúdo de exp.txt 1 2 3 4 5 6 7 8 9 10 1 2 3 1 3 5

(73)

União de matrizes > i [1] 1 2 3 > x [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10 > c(i,x[1,i]) [1] 1 2 3 1 3 5 > cbind(i,x[1,i]) i [1,] 1 1 [2,] 2 3 [3,] 3 5 > rbind(i,x[1,i]) [,1] [,2] [,3] i 1 2 3 1 3 5

(74)

Definição de funções

> fx <- function(x) x^2+3+cos(x) > fx function(x) x^2+3+cos(x) > fx(2) [1] 6.583853

(75)

> fun1 <- function(data, data.frame, graph, limit) { [corpo da função omitido]

}

A função pode então ser chamada de diversas formas equivalentes: > ans <- fun1(d, df, TRUE, 20)

> ans <- fun1(d, df, graph=TRUE, limit=20)

> ans <- fun1(data=d, limit=20, graph=TRUE, data.frame=df) Também podem ser definidos valores por defeito para determinados parâmetros

> fun1 <- function(data, data.frame, graph=TRUE, limit=20) { ... } Podendo a função ser chamada das diversas formas:

> ans <- fun1(d, df)

(76)

Scripts

Definição

Um script trata-se da execução de uma série de comandos. Os scripts são guardados em ficheiros de extensão .r.

Ficheiro bioinf.r i <- 1:3 X <- matrix(1:10,ncol=5) Execução > source("bioinf.r") > X [,1] [,2] [,3] [,4] [,5] [1,] 1 3 5 7 9 [2,] 2 4 6 8 10

(77)

Plot

> x <- seq(-pi,pi,0.1) > plot(x,sin(x))

> plot(x,sin(x),’l’)

> plot(x,sin(x),’l’,ylab=’sin(x)’)

> title(main=’O meu primeiro gráfico’, xlab=’x’, ylab=’sin(x)’)

(78)

Desenho de gráficos 2D

-3 -2 -1 0 1 2 3 -1 .0 -0 .5 0 .0 0 .5 1 .0 x si n (x )

O meu primeiro gráfico

x

si

n

(x

)

(79)

Sobreposição

> x<-seq(0,4*pi,0.1)

> plot(x,sin(x),’l’,ylab=’sin(x)+cos(x)’) > par(new=TRUE)

(80)

Desenho de gráficos 2D

0 2 4 6 8 10 12 -1 .0 -0 .5 0 .0 0 .5 1 .0 x si n( x )+ c os (x ) 0 2 4 6 8 10 12 -1 .0 -0 .5 0 .0 0 .5 1 .0 x

(81)

Usando marcas e tipos de linhas > plot(x,cos(x),’l’,lty=2) > par(lty=2)

> plot(x,cos(x),’l’)

Função par

(82)

Desenho de gráficos 2D

0 2 4 6 8 10 12 -1 .0 -0 .5 0 .0 0 .5 1 .0 x co s (x)

(83)

Plot3

> x <- seq(-10, 10, length= 30) > y <- x

> f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r } > z <- outer(x, y, f)

> z[is.na(z)] <- 1

> op <- par(bg = "white")

> persp(x, y, z, theta = 30, phi = 30, expand = 0.5, col = "lightblue")

(84)

Desenho de gráficos 3D

x

y z

(85)

Contour > x=seq(-pi,pi,0.1) > y=seq(0,pi,0.1) > fx <- function(x,y) {sin(x^2)+2*sin(y)} > z <- outer(x,y,fx) > contour(x,y,z) > contour(x,y,z,nlevel=50)

(86)

Desenho de curvas de nível

-0.5 -0.5 -0.5 -0.5 0 0 0 0 0 0 .5 0 .5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 1 1 1 1 1 1 1.5 1.5 1.5 2 2 2 2 .5 2.5 2.5 2.5 -3 -2 -1 0 1 2 3 0. 0 0 .5 1. 0 1 .5 2. 0 2 .5 3. 0

(87)

-0. 7 -0. 7 -0.6 -0 .6 -0.3 -0.3 -0.3 -0.2 -0 .1 0 0 0 0 0 0 .1 0.1 0.1 0.2 0 .2 0.2 0.2 0 .2 0.3 0 .3 0 .3 0.3 0 .3 0.3 0.4 0.4 0.4 0.4 0 .4 0.5 0.5 0.5 0.5 0.5 0 .6 0.6 0.6 0.6 0 .6 0 .6 0.7 0 .7 0.7 0.7 0.7 0.7 0 .7 0.8 0.8 0.8 0.8 0.8 0.8 0.8 0 .9 0 .9 0.9 0.9 0.9 0.9 0.9 1 1 1 1 1 .1 1.1 1.1 1 .2 1.2 1 .2 1.3 1.3 1 .3 1 .4 1.4 1 .4 1 .5 1.5 1.5 1 .6 1.6 1.6 1 .7 1.7 1 .7 1.8 1.8 1.8 1 .9 1.9 1 .9 2 2 2 2 .1 2.1 2.1 2 .1 2.2 2.2 2.2 2 .2 2 .3 2.3 2.3 2 .3 2 .4 2 .4 2.4 2 .4 2 .5 2.5 2.5 2 .5 2 .6 2.6 2.6 2 .6 2 .7 2.7 2.7 2 .7 2.8 2.8 2.9 2.9 -3 -2 -1 0 1 2 3 0. 0 0 .5 1. 0 1 .5 2. 0 2 .5 3. 0

(88)

Funções R

> open.account <- function(total) { + list(

+ deposit = function(amount) { + if(amount <= 0)

+ stop("Deposits must be positive!\n") + total <<- total + amount

+ cat(amount, "deposited. Your balance is", total, "\n\n") + },

+ withdraw = function(amount) { + if(amount > total)

+ stop("You donŠt have that much money!\n") + total <<- total - amount

+ cat(amount, "withdrawn. Your balance is", total, "\n\n") + },

+ balance = function() {

+ cat("Your balance is", total, "\n\n") + })}

(89)

> ross <- open.account(100) > robert <- open.account(200) > ross$withdraw(30)

30 withdrawn. Your balance is 70 > ross$balance()

Your balance is 70 > robert$balance() Your balance is 200

(90)

Funções R – O if

Função > fx <- function(x) { + if(x>0) x else -x + } > fx(2) [1] 2 > fx(-2) [1] 2 > fx(c(2,-2)) [1] 2 -2 Warning message: In if (x > 0) x else -x :

the condition has length > 1 and only the first element will be used

(91)

Função – Cont. > x <- c(6:-4) > sqrt(x)

[1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NaN

[9] NaN NaN NaN

Warning message: In sqrt(x) : NaNs produced > sqrt(ifelse(x >= 0, x, NA)) [1] 2.449490 2.236068 2.000000 1.732051 1.414214 1.000000 0.000000 NA [9] NA NA NA > ifelse(x >= 0, x, NA) [1] 6 5 4 3 2 1 0 NA NA NA NA > ifelse(x >= 0, x, 0) [1] 6 5 4 3 2 1 0 0 0 0 0

(92)

Funções R – O for

Execução > for(i in 1:5) print(1:i) [1] 1 [1] 1 2 [1] 1 2 3 [1] 1 2 3 4 [1] 1 2 3 4 5

(93)

Execução > for(n in c(2,5,10,20,50)) { + x <- stats::rnorm(n) + cat(n,":", sum(x^2),"\n") + } 2 : 1.439276 5 : 2.110872 10 : 3.601880 20 : 16.54088 50 : 40.6597

(94)

Zeros de funções

A função uniroot

> f <- function (x) sin(x)+2*cos(x)

> xmin <- uniroot(f, c(0, pi), tol = 0.0001) > xmin $root [1] 2.034445 $f.root [1] -2.477787e-06 $iter [1] 5 $estim.prec [1] 5e-05

O intervalo tem que obedecer a f (lower) ∗ f (upper) ≤ 0.

(95)

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade

(96)

Forma geral do problema

A formulação matemática de um problema de optimização multidimensional, sem restrições é

min

x∈Rnf (x),

com f (x) : Rn→ R (n > 1) duas vezes diferenciável.

(97)

Gradiente de f (x) : Rn→ R, x = (x 1, . . . , xn)T, vector de dimensão n ∇f (x) = g(x) =      ∂f ∂x1 ∂f ∂x2 . . . ∂f ∂xn      = ∂f ∂x1 , ∂f ∂x2 , . . . , ∂f ∂xn T

Matriz Hessiana, matriz de dimensão n × n

∇2f (x) = G(x) =    ∂2f ∂x2 1 . . . ∂x∂2f n∂x1 . . . . ∂2f ∂x1∂xn . . . ∂2f ∂x2 n   

(98)

Alguns conceitos

O vector gradiente ‘aponta’ no sentido de subida da função.

−10 −5 0 5 10 −10 −5 0 5 10 −200 −100 0 100 g(x) −g(x) f (x) = − x21− x22− 2x1x2+ 10 g(x) = (−2x1− 2x2, −2x2− 2x1)T g(1, 1) = (−4, −4)T

(99)

A matrix Hessiana indica a concavidade (convexa ou côncava). −10 −5 0 5 10 −10 −5 0 5 10 −200 −150 −100 −50 0 50 f (x) = − x21− x22− 2x1x2+ 10 G(x) =  −2 −2 −2 −2  Semi-definida negativa.

(100)

Método de Newton

A função f (x), em x∗ = x + d pode ser aproximada por

f (x∗) ≈ f (x) + g(x)Td +1 2d

TG(x)d (1)

que resulta da expansão em série de Taylor de f (x), com x∗ suficientemente perto de x.

A aproximação quadrática (1) pode ser usada para determinar o vector d em que x é um vector fixo. Derivando em ordem a d e igualando a zero obtemos

g(x) + G(x)d = 0 ⇔ G(x)d = −g(x) (2)

(101)

Quando a função f (x) é quadrática obtém-se a solução resolvendo o sistema linear (2). No caso em que f (x) não é quadrática, o novo ponto x + d não é mínimo e o processo deve ser repetido iterativamente. As equações iterativas do processo são

x(k+1) = x(k)+ d(k)

G(x(k))d(k)= −g(x(k)), para k = 1, 2, . . .

Nota: O método de Newton possui terminação quadrática, i.e., se f (x) for uma função quadrática convexa o método de Newton necessita no máximo de n iterações para encontrar a solução exacta.

(102)

Método de Newton - Falhas de convergência

O método de Newton pode falhar nas seguintes condições: A matriz G(x(k)) é singular e d(k) não é sequer definido.

O vector direcção d(k) é quase ortogonal a g(x(k)) e não é possível

progredir ao longo de d(k).

O vector direcção d(k) não aponta no sentido descendente de f e não

é possível garantir a descida do valor da função.

A matriz G(x(k))−1 existe e é definida positiva, o vector direcção d(k)

é de descida, no entanto o comprimento é tal que

f (x(k+1)) > f (x(k)), e o novo ponto não é melhor que o anterior.

(103)

O método de segurança de Newton resolve as possíveis falhas do método de Newton.

A matriz G(x(k)) é singular e d(k) não é sequer definido. Neste caso

toma-se como direcção de procura a direcção de descida máxima (d(k)= −g(x(k))).

Como a direcção de descida máxima resolve os restantes problemas (excepto o problema do comprimento da direcção) não e necessário verificar a quase-ortogonalidade e a descida da função objectivo.

(104)

Cont.

O vector direcção d(k) é quase ortogonal a g(x(k)) e não é possível

progredir ao longo de d(k). −6 −4 −2 0 2 4 6 −6 −4 −2 0 2 4 6 −g(1,1) g(1,1) Quase ortogonal se |g(x(k))Td(k)| ≤ ηkg(x(k))kkd(k)k

Se for quase ortogonal então

d(k)= −g(x(k))

(105)

O vector direcção d(k) não aponta no sentido descendente de f e não é

possível garantir a descida do valor da função. d(k) é direcção de descida se

g(x(k))Td(k)≤ ηkg(x(k))kkd(k)k.

Caso d(k) não seja direcção de descida faz-se

(106)

Cont.

A matriz G(x(k))−1 existe e é definida positiva, o vector direcção d(k) é de

descida, no entanto o comprimento é tal que f (x(k+1)) > f (x(k)), e o novo

ponto não é melhor que o anterior.

O método de Newton tem convergência local, i.e., x(k) tem de ser

suficientemente próximo de x∗ para que o método funcione. A convergência global obtém-se através da introdução da procura unidimensional (regiões de confiança!!).

x(k+1) = x(k)+ αd(k) em que o α deve ser calculado para garantir que

f (x(k+1)) < f (x(k)) Decréscimo simples

(107)

Na procura unidimensional exacta pretende-se determinar (exactamente) qual o valor de α que minimiza a função

φ(α) = f (x(k+1)) com x(k+1) = x(k)+ αd(k), usando as condições de optimalidade

φ0(α) = 0 e φ00(α) > 0.

No entanto a solução para o problema minα∈Rφ(α) não é de fácil resolução (difícil implementação e cálculos computacionais pesados).

(108)

Procura unidimensional

Critério de Armijo e divisões sucessivas de α por dois. Pressupondo que a direcção de procura é de descida, gera-se uma sequência de valores,

{ωjα}, j = 0, 1, 2, . . . com α = 1 e ω = 1 2

até se encontrar um elemento que origine uma redução (significativa) no valor de f

f (x(k)) − f (x(k)+ ωjαd(k)) ≥ −µ1ωjαg(x(k))Td(k).

O primeiro elemento encontrado é usado como o comprimento do passo na iteração k (α(k)= ωjα).

(109)

Considera-se as três condições para o critério de paragem kx(k+1)− x(k)k kx(k+1)k ≤ 1 |f(k+1)− f(k)| |f(k+1)| ≤ 2 kg(k+1)k ≤ 3

(110)

Exemplo

Considere-se o seguinte problema de optimização min x∈R2x 4 1+ x22− 3x1 partindo de x(1)= (0, 1)T e com  = 0.5. Temos que g(x) = (4x31− 3, 2x2)T e G(x) =  12x21 0 0 2 

(111)

g(1) = g(x(1)) = (−3, 2)T G(1)= G(x(1)) =  0 0 0 2   0 0 3 0 2 −2  → Impossível

Como a matriz G(x(1)) é singular temos que d(1) = −g(1) = (3, −2)T.

Não é necessário verificar a quase ortogonalidade e passa-se para a procura unidimensional.

(112)

Procura unidimensional

x(1) = (0, 1)T f(1) = 1 g(1)Td(1)= −13 α = 1 x = x¯ (1)+ d(1) = (0, 1)T + 1(3, −2)T = (3, −1)T f (¯x) = 73 1 − 73 = f (x(1)) − f (¯x)  10−3× 1 × 13 α = 0.5 x = (0, 1)¯ T + 0.5(3, −2)T = (1.5, 0)T f (¯x) = 0.5625 1 − 0.5625 = f (x(1)) − f (¯x) ≥ 10−3× 0.5 × 13 Aceita-se α(1) = 0.5 e tem-se x(2)= (1.5, 0)T.

(113)

kx(2)− x(1)k

kx(2)k =

1.52+ 12

1.5 = 1.201  0.5

Logo passa-se à próxima iteração. As restantes condições seriam (neste caso não é necessário verificar)

|f(2)− f(1)| |f(2)| = 1 − 0.5625 0.5625 = 0.7778  0.5 e kg(2)k = k(10.5, 0)Tk = 10.5  0.5

(114)

2

a

iteração x

(2)

= (1.5, 0)

T g(2) = (10.5, 0)T G(2)=  27 0 0 2   27 0 −10.5 0 2 0  → d(2) = (−0.3889, 0)T

d(2) é quase ortogonal com o gradiente?

kd(2)k = 0.3889 kg(2)k = 10.5

(g(2))Td(2) = (10.5, 0)(−0.3889, 0)T = −4.0835

4.0835 = |(g(2))Td(2)|  10−4× 0.3889 × 10.5 = 4.0835 × 10−4, logo d(2) não é quase ortogonal com o gradiente (se fosse d(2) = −g(2)).

(115)

d(2) é direcção de descida?

kd(2)k = 0.3889 kg(2)k = 10.5

(g(2))Td(2)= (10.5, 0)(−0.3889, 0)T = −4.0835

− 4.0835 = (g(2))Td(2) ≤ 10−4× 0.3889 × 10.5 = 4.0835 × 10−4, logo d(2) é direcção de descida (se não fosse d(2) = −d(2)).

(116)

Conteúdo

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade

10 Optimização com restrições com o R

(117)

O método Quasi-Newton usa uma matriz aproximação à matriz Hessiana (ou à sua inversa) da função objectivo.

O uso de uma matriz aproximação evita o cálculo da matriz Hessiana (segundas derivadas) que pode ser difícil de obter.

A aproximação à inversa da Hessiana, em vez da própria Hessiana, substituí a resolução de um sistema linear em cada iteração, por um produto matriz vector. (G(x)d = −g(d) → d = −G(x)−1g(x)).

(118)

Cont.

A matriz aproximação é actualizada em cada iteração usando a informação das derivadas (gradiente) da iteração anterior.

A fórmula mais conhecida é devida a Broyden, Fletcher, Goldfarb e Shanno (B.F.G.S.) H(k+1) = I −s (k)y(k)T s(k)Ty(k) ! H(k) I − y (k)s(k)T y(k)Ts(k) ! + s (k)s(k)T s(k)Ty(k) em que s(k)= α(k)d(k)= x(k+1)− x(k) e y(k)= g(k+1)− g(k).

Quando s(k)Ty(k)> 0 e H(k) é simétrica e definida positiva, a formula de

actualização garante que a matriz H(k+1) é simétrica e definida positiva. A fórmula B.F.G.S. satisfaz a propriedade de terminação quadrática.

(119)

Na primeira iteração temos que H(1)= I (simétrica e definida positiva).

Quando se usa a técnica de recomeço a matriz H(k)= I sempre que

(k − 1) mod n = 0.

Como H(k) é simétrica e definida positiva não é necessário verificar a quase

ortogonalidade e se a direcção calculada é de descida para a função objectivo.

Os problemas numéricos com a matriz H(k), tais como ‘overflow’ na actualização de H(k),

um deslocamento ao longo da direcção de procura muito longo devido à quase ortogonalidade da direcção com o gradiente,

(120)

Exemplo

Considere-se o seguinte problema de optimização (x(1) = (0, 1)T e  = 0.5)

min x∈R2x 4 1+ x22− 3x1 Temos que g(x) = (4x3 1− 3, 2x2)T. 1a iteração g(1) = g(x(1)) = (−3, 2)T H(1)= I d(1) = −Hg(1) = (3, −2)T. Procura unidimensional

. . . (ver exemplo do segurança de Newton) Aceita-se α(1) = 0.5 e vem que x(2)= (1.5, 0)T.

(121)

kx(2)− x(1)k

kx(2)k =

1.52+ 12

1.5 = 1.201  0.5

Logo passa-se à próxima iteração.

2a iteração x(2) = (1.5, 0)T e g(2)= (10.5, 0)T H(2)= I − s (1)y(1)T s(1)Ty(1) ! H(1) I −y (1)s(1)T y(1)Ts(1) ! + s (1)s(1)T s(1)Ty(1) s(1)= x(2)− x(1) = (1.5, 0)T − (0, 1)T = (1.5, −1)T y(1)= g(2)− g(1) = (10.5, 0)T − (−3, 2)T = (13.5, −2)T

(122)

Cont.

s(1)y(1)T =  1.5 −1  (13.5, −2) =  20.25 −3 −13.5 2  s(1)Ty(1)= (1.5, −1)(13.5, −2)T = 22.25 I −s (1)y(1)T s(1)Ty(1) =  1 0 0 1  −  0.9101 −0.1348 −0.6067 0.0899  =  0.0899 0.1348 0.6067 0.9101  s(1)s(1)T =  1.5 −1  (1.5, −1) =  2.25 −1.5 −1.5 1  H(2)=  0.0899 0.1348 0.6067 0.9101  H(1)  0.0899 0.6067 0.1348 0.9101  +  0.1011 −0.0674 −0.0674 0.0449  H(2)=  0.1274 0.1098 0.1098 1.2413 

(123)

d(2) = −H(2)g(2) = −  0.1274 0.1098 0.1098 0.8202   10.5 0  d(2) =  −1.3377 −1.1529  Procura unidimensional . . .

(124)

Conteúdo

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade 9 Optimização não linear com restrições de desigualdade

10 Optimização com restrições com o R

(125)

O R fornece um conjunto de funções para optimização linear e não linear das quais se destacam:

uniroot - Zero de funções unidimensionais;

optimize - Optimização de uma função unidimensional num intervalo. nlm - Minimização usando um algoritmo do tipo Newton;

optim - Função genérica para optimização baseada nos algoritmos de Nelder-Mead, quasi-Newton e gradientes conjugados;

(126)

Zeros de funções

A função uniroot

> f <- function (x) sin(x)+2*cos(x)

> xmin <- uniroot(f, c(0, pi), tol = 0.0001) > xmin $root [1] 2.034445 $f.root [1] -2.477787e-06 $iter [1] 5 $estim.prec [1] 5e-05

O intervalo tem que obedecer a f (lower) ∗ f (upper) ≤ 0.

(127)

Um navio encontra-se atracado num porto. A distância h, de um dado ponto do casco do navio ao fundo do mar, varia com a maré. Admita que h é dada, em função do tempo x, por

h(x) = 10 − 3 cos(2x).

Qual a distância desse ponto do casco ao fundo do mar no momento da maré alta?

Formulação do problema

maxx∈Rh(x) ≡ 10 − 3 cos(2x)

(128)

Exemplo não linear unidimensional

0 1 2 3 4 5 6 7 8 9 1 01 1 1 21 3 x hx (x )

(129)

Resolução

> hx <- function(x) 10-3*cos(2*x) > x <- seq(0,6,0.1) # Para o plot

> plot(x,hx(x),’l’) # Plot

> optimize(hx,c(1,2),maximum=TRUE) $maximum [1] 1.57078

$objective [1] 13

O algoritmo

O algoritmo usado é um algoritmo do tipo Secção Dourada com interpolação quadrática.

(130)

Exemplo não linear unidimensional - outra abordagem

Resolução > hx <- function(x) 3*cos(2*x)-10 > optimize(hx,c(1,2)) $minimum [1] 1.57078 $objective [1] -13 Função simétrica

Atenção que o minimizante é o mesmo que o maximizante, mas os valores das funções objectivo são o simétrico.

(131)

Considere que um montante xi é afectado ao projecto i, para i = 1, . . . , n,

sendo o retorno esperado desta carteira de projectos dado por

f (x1, . . . , xn) = n X i=1 (αixi− 1 2βix 2 i) + 1 2 n−1 X i=1 (xixi+1) (n > 1).

Para n = 2, α1 = 1, α2 = 2, β1 = β2 = 1, pretende-se calcular x1 e x2 de

modo a maximizar o retorno esperado.

O problema é modelado como um problema de optimização sem restrições max f (x1, x2) ≡  x1− x21 2  +  2x2− x22 2  +x1x2 2

(132)

A resolução – Curvas de nível

Função e curvas de nível > f <- function(x) { + (x[1]-x[1]^2/2)+(2*x[2]-x[2]^2/2)+x[1]*x[2]/2 + } > x1=seq(2,4,0.1) > x2=seq(2,4,0.1) > z<-matrix(0,length(x1),length(x2)) > for (i in 1:length(x1)) + { for (j in 1:length(x2)) + { z[i,j]<-f(c(x1[i],x2[j])) } + } > contour(x1,x2,z,50)

(133)

2.2 2.5 2.5 5 2.6 2.75 2.85 2.9 3 3.05 3.1 3.1 5 3.2 3.3 3.35 3.4 3.4 5 3.5 3.55 3.6 3.6 5 3.7 3.75 3.8 3.85 3.9 3.95 4 4.05 4.1 4 4.15 4.2 4.25 4.2 5 4.3 4.3 4.35 4.3 5 4.4 4.4 4.45 4.45 4.5 4.5 5 4.6 4.6 5 2.0 2.5 3.0 3.5 4.0 2. 0 2 .5 3. 0 3 .5

(134)

Minimização de f (maximização de g)

> g <- function(x) { -f(x) } # problema de maximização > nlm(g,c(2.6,3.3)) $minimum [1] -4.666667 $estimate [1] 2.666664 3.333330 $gradient [1] 0.000000e+00 5.329075e-10 $code [1] 1 $iterations [1] 3

(135)

> g <- function(x) { + res <- (x[1]-x[1]^2/2)+(2*x[2]-x[2]^2/2)+x[1]*x[2]/2 + attr(res, "gradient") <- -1.0*c((1-x[1])+x[2]/2,(2-x[2])+x[1]/2) + -res + } > nlm(g,c(2.6,3.3)) $minimum [1] -4.666667 $estimate [1] 2.666667 3.333333 $gradient [1] -2.220446e-16 2.220446e-16 $code [1] 1 $iterations [1] 3

(136)

Usando o gradiente e a hessiana

> g <- function(x) {

+ res <- (x[1]-x[1]^2/2)+(2*x[2]-x[2]^2/2)+x[1]*x[2]/2

+ attr(res, "gradient") <- -1.0*c((1-x[1])+x[2]/2,(2-x[2])+x[1]/2) + attr(res, "hessian") <- -1.0*matrix(c(-1.0, 0.5, 0.5, -1.0), 2, 2) + -res

+ }

(137)

> nlm(g,c(2.6,3.3),hessian=TRUE) $minimum [1] -4.666667 $estimate [1] 2.666667 3.333333 $gradient [1] -2.220446e-16 2.220446e-16 $hessian [,1] [,2] [1,] 1.0 -0.5 [2,] -0.5 1.0 $code [1] 1 $iterations [1] 1

(138)

A resolução com optim (Nelder-Mead)

> fr <- function(x) (x[1]-x[1]^2/2)+(2*x[2]-x[2]^2/2)+x[1]*x[2]/2 > optim(c(2.6,3.3),fr,control=list(fnscale=-1.0)) $par [1] 2.666414 3.333672 $value [1] 4.666667 $counts function gradient 39 NA $convergence [1] 0 $message NULL

(139)

> optim(c(2.6,3.3),fr,method="BFGS",control=list(fnscale=-1.0)) $par [1] 2.666667 3.333333 $value [1] 4.666667 $counts function gradient 6 4 $convergence [1] 0 $message NULL

(140)

A resolução com optim (quasi-Newton) com gradiente

> gr <- function(x) c((1-x[1])+x[2]/2,(2-x[2])+x[1]/2) > optim(c(2.6,3.3),fr,gr,method="BFGS",control=list(fnscale=-1.0)) $par [1] 2.666667 3.333333 $value [1] 4.666667 $counts function gradient 5 4 $convergence [1] 0 $message NULL

(141)

> optim(c(2.6,3.3),fr,method="BFGS", + control=list(fnscale=-1.0,maxit=4)) $par [1] 2.666667 3.333333 $value [1] 4.666667 $counts function gradient 4 4 $convergence [1] 1 $message NULL

(142)

A solução do problema proposto

> f <- function(x) { + (x[1]-x[1]^2/2)+(2*x[2]-x[2]^2/2)+x[1]*x[2]/2 + } > x1=seq(2,4,0.1) > x2=seq(2,4,0.1) > z<-matrix(0,length(x1),length(x2)) > for (i in 1:length(x1)) + { for (j in 1:length(x2)) + { z[i,j]<-f(c(x1[i],x2[j])) } + } > contour(x1,x2,z,50) > dim(sol$par) <- c(1,2) > points(sol$par,pch=24)

(143)

2.2 2.5 2.5 5 2.6 2.75 2.85 2.9 3 3.05 3.1 3.1 5 3.2 3.3 3.35 3.4 3.4 5 3.5 3.55 3.6 3.6 5 3.7 3.75 3.8 3.85 3.9 3.95 4 4.05 4.1 4 4.15 4.2 4.25 4.2 5 4.3 4.3 4.35 4.3 5 4.4 4.4 4.45 4.45 4.5 4.5 5 4.6 4.6 5 2.0 2.5 3.0 3.5 4.0 2. 0 2 .5 3. 0 3 .5

(144)

Conteúdo

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade

9 Optimização não linear com restrições de desigualdade

10 Optimização com restrições com o R

(145)

min

x∈Rnf (x) (3)

s.a

c(x) = 0

em que f (x) e c(x) são funções não lineares em x.

x = (x1, x2, . . . , xn)T

f (x) : Rn→ R c(x) : Rn→ Rm

n é o número de variáveis do problema m é o número de restrições de igualdade

c(x) = (c1(x), c2(x), . . . , cm(x))T

(146)

Exemplo

Exemplo 1 min x∈R5e x1x2x3x4x5 s.a x21+ x22+ x23+ x24+ x25 = 10 x2x3 = 5x4x5 x31+ x32 = −1

(147)

Temos então f (x) = ex1x2x3x4x5 c1(x) = x21+ x22+ x23+ x24+ x25− 10 c2(x) = x2x3− 5x4x5 c3(x) = x31+ x32+ 1 com n = 5 e m = 3.

(148)

Notação

Gradiente de f (x) (vector de n elementos)

∇f (x) =    ∂f ∂x1 .. . ∂f ∂xn   

Hessiana de f (x) (matriz simétrica de n × n)

∇2f (x) =    ∂2f ∂x2 1 . . . ∂2f ∂xn∂x1 . . . . ∂2f ∂x1∂xn . . . ∂2f ∂x2 n   

(149)

Gradiente de c1(x) (vector de n elementos) ∇c1(x) =    ∂c1 ∂x1 .. . ∂c1 ∂xn    . . .

Gradiente de cm(x) (vector de n elementos)

∇cm(x) =    ∂cm ∂x1 .. . ∂cn ∂xn   

(150)

Notação

Matriz Jacobiano das restrições (matriz n × m)

∇c(x) =    ∂c1 ∂x1 ∂c2 ∂x1 . . . ∂cm ∂x1 .. . ... . . . ... ∂c1 ∂xn ∂c2 ∂xn . . . ∂cm ∂xn    ou ∇c(x) = (∇c1(x)∇c2(x) . . . ∇cm(x))

(151)

Hessiana de c1(x) (matriz simétrica de n × n) ∇2c1(x) =    ∂2c 1 ∂x2 1 . . . ∂2c1 ∂xn∂x1 . . . . ∂2c 1 ∂x1∂xn . . . ∂2c 1 ∂x2 n    . . .

Hessiana de cm(x) (matriz simétrica de n × n)

∇2cm(x) =    ∂2c m ∂x2 1 . . . ∂2cm ∂xn∂x1 . . . . ∂2c m ∂x1∂xn . . . ∂2c m ∂x2 n   

(152)

Condições de optimalidade

Seja λ um vector de m elementos (vector dos multiplicadores de Lagrange) λ = (λ1, λ2, . . . , λm)T

A função Lagrangeana associada ao problema (3) é L(x, λ) = f (x) − λTc(x) = f (x) − m X i=1 λici(x)

(153)

Seja x∗ uma solução do problema. Se os vectores ∇c1(x∗), ∇c2(x∗), . . . ,

∇cm(x∗) (gradientes das restrições, calculados na solução) forem linearmente independentes, então x∗ é ponto regular.

Pergunta:

Como se verifica se um conjunto de vectores é linearmente independente (em termos informáticos)?

(154)

Condições necessárias e suficientes de 1

a

ordem

Seja x∗ uma solução do problema. Se x∗ é ponto regular, então existe um λ∗ tal que

xL(x∗, λ∗) = ∇f (x∗) − ∇c(x∗)λ∗ = 0 n equações e

∇λL(x∗, λ∗) = −c(x∗) = 0 m equações

Este sistema de n + m equações é não linear em x e define as condições Kuhn-Tucker (KT).

O par (x∗, λ∗) chama-se par KT.

(155)

λL(x∗, λ∗) = c(x∗) = 0

significa que o ponto verifica as restrições, ou seja, x∗ é ponto admissível. ∇xL(x∗, λ∗) = ∇f (x∗) − ∇c(x∗)λ∗ = 0 ⇔ ∇f (x∗) = ∇c(x∗)λ∗ ⇔ ∇f (x∗) = m X i=1 λ∗i∇ci(x∗)

significa que o gradiente de f (∇f ) é uma combinação linear dos gradientes das restrições (das colunas de ∇c(x∗)).

Pergunta:

(156)

Exemplo

Exemplo 2 min x∈R2f (x) ≡ x1+ x2 s.a c(x) = x21− x22 = 0 Considere x∗ = (1, −1)T e ¯x = (2, 2)T. Tem-se que ∇f (x) =  1 1  e ∇c(x) =  2x1 −2x2 

(157)

Em x∗ Em ¯x ∇f (x∗) =  1 1  ∇f (¯x) =  1 1  e ∇c(x∗) =  2 2  ∇c(¯x) =  4 −4  ⇒ ⇒  1 1  = λ∗  2 2   1 1  = ¯λ  4 −4  ∃ um λ∗ = 0.5) @ umλ¯

(158)

Condição necessária de 2

a

ordem - Mínimo

Seja x∗ uma solução do problema. Se x∗ é ponto regular então para todos os vectores s ∈ Rn que verificam ∇c(x)Ts = 0 (direcções tangentes às

curvas admissíveis), tem-se

sT∇2xxL(x∗, λ∗)s ≥ 0. Nota: ∇2xxL(x, λ) = ∇2f (x) − m X i=1 λi∇2ci(x)

(159)

Se (x∗, λ∗) é um par KT, isto é, verifica as condições KT  ∇xL(x∗, λ∗) = 0 ∇λL(x∗, λ∗) = 0 e se sT∇2 xxL(x∗, λ∗)s > 0

para todo o s (s 6= 0) tal que

∇c(x∗)Ts = 0 então x∗ é minimizante local forte.

(160)

O exemplo em x

∗ ∇2xxL(x∗, λ∗) =  0 0 0 0  − 0.5  2 0 0 −2  =  −1 0 0 1  ∇c(x∗)Ts = 0 ⇒ s1 = −s2 Como sT∇2xxL(x∗, λ∗)s = (−s2, s2)  −1 0 0 1   −s2 s2  = 0 nada se pode concluir.

Problema:

Verificar as condições de optimalidade para o Exemplo 2 com x1 = (−1, 1),

x2= (0, 0) e x3 = (−1, −1).

(161)

1 Introdução

2 Optimização

3 Optimização não linear sem restrições

4 R - Introdução

5 Método de Segurança de Newton

6 Método quasi-Newton

7 Optimização sem restrições com o R

8 Optimização não linear com restrições de igualdade

9 Optimização não linear com restrições de desigualdade

(162)

Formulação geral:

min

x∈Rnf (x) (4)

s.a

c(x) ≥ 0

em que f (x) e c(x) são funções não lineares em x.

x = (x1, x2, . . . , xn)T

f (x) : Rn→ R c(x) : Rn→ Rm

n é o número de variáveis do problema m é o número de restrições de desigualdade

c(x) = (c1(x), c2(x), . . . , cm(x))T

Vamos supor que f (x) e c(x) são funções duas vezes diferenciáveis.

(163)

Seja λ um vector de m elementos (vector dos multiplicadores de Lagrange) λ = (λ1, λ2, . . . , λm)T

A função Lagrangeana associada ao problema (4) é L(x, λ) = f (x) − λTc(x) = f (x) − m X i=1 λici(x)

(164)

Restrições activas

Seja ¯x um ponto dado.

As restrições ci(¯x) ≥ 0, i ∈ A, dizem-se activas em ¯x se ci(¯x) = 0.

O conjunto A contém os índices das restrições activas. Restrições activas

Poderíamos dizer que as restrições activas são aquelas que participam na caracterização da solução. Enquanto que as não activas “não interessam” para essa caracterização.

(165)

Seja x∗ uma solução do problema.

Se os vectores ∇ci(x∗), i ∈ A (gradientes das restrições activas, calculados na solução) forem linearmente independentes, então x∗ é ponto regular. Ponto regular

A definição é idêntica para o caso das restrições de igualdade, mas no caso de problemas com restrições de desigualdade só as restrições activas é que “contam”.

(166)

Condições necessárias e suficientes de 1

a

ordem - Mínimo

Seja x∗ uma solução do problema. Se x∗ é ponto regular, então existe um λ∗ tal que

∇xL(x∗, λ∗) = ∇f (x∗) − ∇c(x∗)λ∗= 0 ponto estacionário da Lag.

c(x∗) ≥ 0 admissibilidade λ∗ ≥ 0 “positiveness” e

(λ∗)Tc(x∗) = 0 complementaridade

(167)

A complementaridade ((λ∗)Tc(x) = 0) diz-nos que as restrições não

activas têm multiplicadores iguais a zero (ci(x∗) > 0 ⇒ λ∗i = 0, i /∈ A).

Para as restrições activas os multiplicadores de Lagrange correspondentes podem ou não ser zero. Se forem zero estamos na presença de um problema degenerado. No caso de não existirem multiplicadores iguais a zero para as restrições activas diz-se que a complementaridade é estrita.

c(x∗) ≥ 0

(168)

Interpretação das condições KT

xL(x∗, λ∗) = ∇f (x∗) − ∇c(x∗)λ∗ = 0 ⇔ ∇f (x∗) = ∇c(x∗)λ∗ ⇔ ∇f (x∗) = m X i=1 λ∗i∇ci(x∗)

significa que o gradiente de f (∇f ) é uma combinação linear dos gradientes das restrições (das colunas de ∇c(x∗).

Nota:

As restrições inactivas não influenciam, uma vez que λ∗i = 0, i /∈ A.

(169)

Exemplo min x∈R2f (x) ≡ x1 s.a (x1+ 1)2+ x22 ≥ 1 x21+ x22 ≤ 2 Considere x1 = (0, 0)T, x2= (−1, −1)T e x3= (0,√2)T. Tem-se que L(x, λ) = x1− (λ1, λ2)  (x1+ 1)2+ x22− 1 2 − x21− x2 2  = x1− λ1 (x1+ 1)2+ x22− 1 + λ2 x21+ x22− 2 

(170)

Condições KT

Logo ∇xL(x, λ) =  1 − 2λ1(x1+ 1) + 2λ2x1 −2λ1x2+ 2λ2x2 

Para x1= (0, 0)T apenas a primeira restrição está activa, logo λ 2 = 0.

Resolvendo ∇xL(x1, λ) = 0 em ordem a λ1 vem



1 − 2λ1 = 0

0 = 0 ⇒ λ1 =

1 2

(171)

∇xL(x2, λ) = 0 em ordem aos multiplicadores de Lagrange obtemos  1 − 2λ2 = 0 2λ1− 2λ2 = 0 ⇒ λ1= λ2 = 1 2

Para x3= (0,√2)T apenas a segunda restrição está activa e resolvendo ∇xL(x3, λ) = 0 em ordem a λ2 (λ1 = 0) obtemos  1 + 2λ2(0) = 0 2λ2 √ 2 = 0

que é um sistema inconsistente e consequentemente x3 não satisfaz as

(172)

Condição necessária de 2

a

ordem - Mínimo

Seja x∗ uma solução do problema. Se x∗ é ponto regular então para todos os vectores s ∈ Rn que verificam ∇C(x∗)Ts = 0, em que C(x∗) é uma matriz formada pelas restrições activas em x∗ (direcções tangentes às curvas admissíveis), tem-se

sT∇2xxL(x∗, λ∗)s ≥ 0.

Nota

Condição idêntica à apresentada para os problemas com restrições de igualdade, mas apenas se considera as restrições activas no caso das desigualdades.

(173)

Se (x∗, λ∗) é um par KT, isto é, verifica as condições KT  ∇xL(x∗, λ∗) = 0 ∇λL(x∗, λ∗) = 0 e se sT∇2xxL(x∗, λ∗)s > 0 para todo o s (s 6= 0) tal que

∇C+(x∗)Ts = 0 então x∗ é minimizante local forte.

C+ é uma matriz formada pelas restrições activas não degeneradas (multiplicadores diferentes de zero).

Referências

Documentos relacionados

Testes com os inseticidas pirimifós metílico e cipermetrina aplicados em combinação com os sinergistas na população de São José do Rio Preto-SP, mostraram que no tratamento

This warranty shall not apply to defects or damage (latent or otherwise) caused by the use of or effect of using batteries other than those of the technical specification and

Nesta seção apresentaremos de forma breve a teoria básica do grau topológico de Brouwer, ferramenta topológica fundamental para a prova do Teorema do Ponto Fixo de Brouwer

É perceptível, desta forma, o constante aumento do aprofundamento dos personagens: os “príncipes” têm agora não só nome e falas, mas personalidades bem desenvolvidas,

ABSTRACT: The toxicological effects of crude ethanolic extracts (CEE) of the seed and bark of Persea americana have been analyzed on larvae and pupae of

Caso haja contratação de sindicância acrescer mais 40 (quarenta) dias. c) O associado deverá respeitar a carência de 90 dias, a contar da data de adesão do benefício, que sempre

Preliminarmente, alega inépcia da inicial, vez que o requerente deixou de apresentar os requisitos essenciais da ação popular (ilegalidade e dano ao patrimônio público). No

No entanto o agricultor tem que semear tudo em 12 horas e para semear um hectar de trigo é necessária uma hora enquanto que para semear um hectar de centeio são necessárias 2 horas..