• Nenhum resultado encontrado

Desenvolvimento de um interpretador de problemas para otimização não linear

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvimento de um interpretador de problemas para otimização não linear"

Copied!
122
0
0

Texto

(1)

Desenvolvimento de um Interpretador

de Problemas para Otimiza¸

ao N˜

ao Linear

Por

Christophe Teixeira

Orientador: Doutor Pedro Miguel Mestre Alves da Silva

Co-orientador: Doutora Aldina Isabel de Azevedo Correia

Disserta¸c˜ao submetida `a

UNIVERSIDADE DE TR ´AS-OS-MONTES E ALTO DOURO para obten¸c˜ao do grau de

MESTRE

em Engenharia Electrot´ecnica e de Computadores, de acordo com o disposto no DR – I s´erie – A, Decreto-Lei n.o 74/2006 de 24 de Mar¸co com as altera¸c˜oes introduzidas pelos

Decretos-Leis n.o 107/2008, de 25 de Junho, e 230/2009, de 14 de Setembro, e demais legisla¸c˜ao aplic´avel e no Regulamento de Ciclo de Estudos Conducente ao Grau de Mestre da

Universidade de Tr´as-os-Montes e Alto Douro DR, 2.a s´erie – n.o 149/2011 de 4 de Agosto

(2)
(3)

Desenvolvimento de um Interpretador

de Problemas para Otimiza¸

ao N˜

ao Linear

Por

Christophe Teixeira

Orientador: Doutor Pedro Miguel Mestre Alves da Silva

Co-orientador: Doutora Aldina Isabel de Azevedo Correia

Disserta¸c˜ao submetida `a

UNIVERSIDADE DE TR ´AS-OS-MONTES E ALTO DOURO para obten¸c˜ao do grau de

MESTRE

em Engenharia Electrot´ecnica e de Computadores, de acordo com o disposto no DR – I s´erie – A, Decreto-Lei n.o 74/2006 de 24 de Mar¸co com as altera¸c˜oes introduzidas pelos

Decretos-Leis n.o 107/2008, de 25 de Junho, e 230/2009, de 14 de Setembro, e demais legisla¸c˜ao aplic´avel e no Regulamento de Ciclo de Estudos Conducente ao Grau de Mestre da

Universidade de Tr´as-os-Montes e Alto Douro DR, 2.a s´erie – n.o 149/2011 de 4 de Agosto

(4)
(5)

Orienta¸c˜ao Cient´ıfica :

Doutor Pedro Miguel Mestre Alves da Silva Professor Auxiliar do

Departamento de Engenharias Escola de Ciˆencias e Tecnologia Universidade de Tr´as-os-Montes e Alto Douro

Doutora Aldina Isabel de Azevedo Correia Professora Adjunta do

Departamento de Matem´atica

Escola Superior de Estudos Industriais e de Gest˜ao Instituto Polit´ecnico do Porto

Acompanhamento do trabalho :

Doutor Jo˜ao Lu´ıs Hon´orio Matias

Professor Auxiliar do Departamento de Matem´atica Escola de Ciˆencias e Tecnologia Universidade de Tr´as-os-Montes e Alto Douro

(6)
(7)

”A perfei¸c˜ao n˜ao ´e alcan¸cada quando j´a n˜ao h´a mais nada para adicionar, mas quando j´a n˜ao h´a mais nada que se possa retirar”

Antoine de Saint-Exup´ery

A quem dedico,

Albano de Moura Teixeira, Maria Assun¸ao Ara´ujo Teixeira, Catherine Teixeira, Caroline Teixeira, ucia Valentina Teixeira, Tatiana Ferreira Moura.

(8)
(9)

UNIVERSIDADE DE TR ´AS-OS-MONTES E ALTO DOURO Mestrado em Engenharia Electrot´ecnica e de Computadores

Os membros do J´uri recomendam `a Universidade de Tr´as-os-Montes e Alto Douro a aceita¸c˜ao da disserta¸c˜ao intitulada “ Desenvolvimento de um Interpretador de

Problemas para Otimiza¸c˜ao N˜ao Linear” realizada por Christophe Teixeira

para satisfa¸c˜ao parcial dos requisitos do grau de Mestre. Janeiro 2014

Presidente: Doutor Jos´e Carlos Silva Cardoso,

Direc¸c˜ao do Mestrado em Engenharia Electrot´ecnica e de Computadores do Departamento de Engenharias

da Escola de Ciˆencias e Tecnologia

Universidade de Tr´as-os-Montes e Alto Douro

Vogais do J´uri: Doutora Isabel Cristina Lopes,

Professora Adjunta do Departamento de Matem´atica da Escola Superior de Estudos Industriais e de Gest˜ao Instituto Polit´ecnico do Porto

Doutor Pedro Miguel Mestre Alves da Silva,

Professor Auxiliar do Departamento de Engenharias da Escola de Ciˆencias e Tecnologia

Universidade de Tr´as-os-Montes e Alto Douro

(10)
(11)

Desenvolvimento de um Interpretador

de Problemas para Otimiza¸c˜

ao N˜

ao Linear

Christophe Teixeira

Submetido na Universidade de Tr´as-os-Montes e Alto Douro para o preenchimento dos requisitos parciais para obten¸c˜ao do grau de

Mestre em Engenharia Electrot´ecnica e de Computadores

Resumo — No ˆambito da resolu¸c˜ao de problemas de otimiza¸c˜ao n˜ao linear, existem problemas com express˜oes das fun¸c˜oes envolvidas demasiado complexas, n˜ao suaves ou at´e mesmo desconhecidas, com derivadas n˜ao dispon´ıveis, n˜ao sendo assim poss´ıvel recorrer a m´etodos baseados em derivadas. Desta forma, para a sua resolu¸c˜ao s˜ao utilizados em alternativa m´etodos de pesquisa directa. Para a resolu¸c˜ao deste tipo de problemas foi criada uma API (Application Programming Interface), em tecnologia Java, baseada nesses m´etodos de pesquisa directa. Para a utiliza¸c˜ao dessa ferramenta ´

e necess´ario que os problemas se encontrem na sua forma geral, ou seja, ´e necess´ario estarem definidos dados de entrada como a fun¸c˜ao objetivo, ponto incial e fun¸c˜oes restri¸c˜ao, se existirem.

Na presente disserta¸c˜ao ´e apresentada uma ferramenta, em tecnologia Java, capaz de formular esses problemas a partir de ficheiros codificados em AMPL (A Modeling Language for Mathematical Programming). Dessa formula¸c˜ao resulta um ficheiro Java, que, uma vez compilado, pode ser utilizado como instˆancia da classe utilizada pela API supra mencionada, contendo todos os dados do problema. Desta forma, tendo como dados de entrada o ficheiro criado, ´e poss´ıvel chegar `a solu¸c˜ao do problema utilizando a API.

Palavras Chave: Tecnologia JAVA, AMPL, Problemas de Otimiza¸c˜ao N˜ao Linear, Codifica¸c˜ao de Problemas, Interpretadores.

(12)
(13)

Development of a Problems Solver

for Nonlinear Optimization

Christophe Teixeira

Submitted to the University of Tr´as-os-Montes and Alto Douro in partial fulfillment of the requirements for the degree of Master of Science in Electrical Engineering and Computers

Abstract — In the context of solving nonlinear optimization problems, there are

problems with too complex expressions, with unknown derivatives, and thus it is not possible to use derivative based optimization methods to solve them. Therefore Direct Search Methods can be used as an alternative. Based on those methods, it was created an API (Application Programming Interface), using JAVA technology, to solve this kind of problems. Problems must be in their general form to allow the utilization of this tool, i.e., input data must be defined such as the objective function, initial point and constraint functions, if there are any.

In this work it is presented a tool, developed in Java, capable of formulating these problems from files encoded in AMPL (A Modeling Language for Mathematical Programming). This formulation results in a Java file, which after being compiled can be used as an instance of the class used by the above mentioned API, containing all the data of the problem. Thus, taking as an input the created file it is possible to find the solution for the problem using the API.

Key Words: JAVA Technology, AMPL, Nonlinear Optimization Problems, Encoding

Problems, Parser.

(14)
(15)

Agradecimentos

Gostaria de agradecer a todas as pessoas que de certa forma ajudaram na realiza¸c˜ao deste trabalho, nomeadamente a todos os respons´aveis pela cria¸c˜ao e manuten¸c˜ao de toda a log´ıstica necess´aria ao bom funcionamento, forma¸c˜ao e aprendizagem do Mestrado em Engenharia Electrot´ecnica e de Computadores. Gostaria ainda de agradecer de forma particular `as pessoas que, de uma forma ou de outra, participaram mais activamente na realiza¸c˜ao deste trabalho. S˜ao elas:

Ao Professor Doutor Pedro Miguel Mestre Alves da Silva, Professor Auxiliar do Departamento de Engenharias da Universidade de Tr´as-os-Montes e Alto Douro, orientador deste trabalho, pela paciˆencia, pelas orienta¸c˜oes e, principalmente, pela oportunidade de aprender com a experiˆencia e conhecimento cient´ıfico que lhe pertence.

`

A Professora Doutora Aldina Isabel de Azevedo Correia, Professor Adjunto da Escola Superior de Tecnologia e Gest˜ao de Felgueiras, do Instituto Polit´ecnico do Porto, na qualidade de co-orientadora, pelas suas observa¸c˜oes e orienta¸c˜oes e explica¸c˜oes.

Ao Professor Doutor Jo˜ao Lu´ıs Hon´orio Matias, Professor Auxiliar do Departamento de Matem´atica da Universidade de Tr´as-os-Montes e Alto Douro, pelo apoio

(16)

prestado, pelas suas observa¸c˜oes, sugest˜oes e explica¸c˜oes.

A todos os meus amigos, pelo apoio que me deram, por estarem sempre presentes e por todos os momentos de divers˜ao que me proporcionaram ao longo deste percurso.

`

A minha namorada, Tatiana Ferreira Moura, pelo carinho, compreens˜ao e simplesmente por estar sempre ao meu lado.

Aos meus Pais, que tornaram todo este percurso poss´ıvel e a quem devo tudo o que tenho e tudo o que sou, e `as minhas irm˜as, por todo o apoio incondicional que sempre me deram e pela paciˆencia nos momentos mais dif´ıceis, sem eles n˜ao teria chegado at´e aqui.

A todos, um sincero obrigado!

UTAD, Christophe Teixeira

Vila Real, 31 de Outubro de 2013

(17)

´Indice geral

Resumo xi

Abstract xiii

Agradecimentos xv

´Indice de tabelas xix

´Indice de figuras xxi

Gloss´ario, acr´onimos e abreviaturas xxiii

1 Introdu¸c˜ao 1

1.1 Enquadramento . . . 1

1.2 Objetivos . . . 2

1.3 Motiva¸c˜ao e Contribui¸c˜oes . . . 3

1.4 Organiza¸c˜ao da disserta¸c˜ao. . . 3

2 API de Otimiza¸c˜ao n˜ao Linear 5 2.1 Introdu¸c˜ao . . . 5

2.2 M´etodos de Otimiza¸c˜ao. . . 7

2.3 Implementa¸c˜ao dos M´etodos em Java . . . 15

3 Codifica¸c˜ao de Problemas Matem´aticos 23 3.1 Introdu¸c˜ao . . . 23

(18)

3.2 Principais Codifica¸c˜oes . . . 24

4 Codifica¸c˜ao AMPL 37 4.1 Introdu¸c˜ao . . . 37

4.2 Interpretadores e Solvers de codififca¸c˜ao AMPL . . . 39

5 Desenvolvimento e Implementa¸c˜ao do Interpretador 49 5.1 Introdu¸c˜ao . . . 49

5.2 Tecnologia Java . . . 49

5.3 Codifica¸c˜ao AMPL . . . 50

5.3.1 Interpreta¸c˜ao do Ficheiro . . . 51

5.3.2 Interpreta¸c˜ao dos Parˆametros e das Vari´aveis. . . 53

5.3.3 Interpreta¸c˜ao da Fun¸c˜ao Objetivo e Fun¸c˜oes Restri¸c˜ao . . . . 57

5.3.4 Interpreta¸c˜ao de Operadores e Fun¸c˜oes Matem´aticos . . . 60

5.3.5 C´alculos Aritm´eticos . . . 62

5.3.6 Cria¸c˜ao do Problema em Java . . . 63

5.4 Utiliza¸c˜ao do Interpretador. . . 64

5.5 Codifica¸c˜ao SIF . . . 66

6 Testes, Resultados e Conclus˜oes 69 6.1 Introdu¸c˜ao . . . 69

6.2 Testes e Resultados das Fun¸c˜oes Implementadas . . . 70

6.3 Testes e Resultados do Interpretador . . . 71

6.4 Testes e Resultados da Utiliza¸c˜ao da API . . . 73

6.5 Conclus˜oes e Trabalho Futuro . . . 76

Referˆencias bibliogr´aficas 79

A Exemplo de Codifica¸c˜oes 85

B Resultados da Interpreta¸c˜ao de Problemas AMPL 91

(19)

´Indice de tabelas

3.1 Tabela para Declara¸c˜ao de Parˆametros na Codifica¸c˜ao Gams . . . 26

6.1 Tempos de execu¸c˜ao, em milissegundo, utilizando o parser da API . . 74

6.2 Tempos de execu¸c˜ao, em milissegundo, utilizando problemas em JAVA 74

6.3 Tempos de execu¸c˜ao, em milissegundo, utilizando problemas gerados pelo interpretador . . . 74

6.4 Compara¸c˜ao dos tempos, em milissegundo, de resolu¸c˜ao de Problemas 75

B.1 Resultados para Problemas sem Restri¸c˜oes . . . 91

B.2 Resultados para Problemas com Restri¸c˜oes . . . 92

(20)
(21)

´Indice de figuras

1 M´ınimo Local . . . xxv

2.1 Movimento de reflex˜ao (Fonte: [1]) . . . 8

2.2 Movimento de Nelder-Mead (Fonte: [1]). . . 9

2.3 Funcionamento do M´etodo dos Filtros (Fonte: [1]) . . . 14

2.4 Filtro com quatro pontos (Fonte: [1]) . . . 15

2.5 Diagrama de Classes da API . . . 17

2.6 Exemplo de utiliza¸c˜ao da API Via Java . . . 19

2.7 Exemplo de utiliza¸c˜ao da API Via Web Services . . . 19

2.8 Exemplo de utiliza¸c˜ao da API Via Web Vers˜ao 1 . . . 20

2.9 Exemplo de utiliza¸c˜ao da API Via Web Vers˜ao 2 . . . 21

2.10 Exemplo de utiliza¸c˜ao da API para an´alise do processo iterativo Via Web Vers˜ao 2 . . . 21

3.1 N´umero de utiliza¸c˜oes (Fonte: [2]) . . . 25

3.2 Utiliza¸c˜ao em percentagem (Fonte: [2]) . . . 25

3.3 Problema de otimiza¸c˜ao HS62 codificado em GAMS . . . 26

3.4 Divis˜ao da Matriz (Fonte: [3]) . . . 28 xxi

(22)

3.5 Exemplo de um problema de otimiza¸c˜ao e a sua codifica¸c˜ao em SPARSE SDPA (Fonte: [3]) . . . 29

3.6 Estrutura das colunas da codifica¸c˜ao MPS (Fonte: [4]) . . . 30

3.7 Problema de otimiza¸c˜ao codificado em MPS (Fonte: [4]) . . . 31

3.8 Problema de otimiza¸c˜ao Burglar2 codificado em MOSEL (Fonte: [5]) 32

3.9 Palavras-chave utilizadas pela codifica¸c˜ao CPLEX para os tipos de dados (Fonte: [6]) . . . 36

3.10 Problema de otimiza¸c˜ao codificado em CPLEX (Fonte: [7]) . . . 36

4.1 Problema S353 codificado em AMPL . . . 38

5.1 Problema S233 codificado em AMPL . . . 52

5.2 Interpreta¸c˜ao do Ficheiros . . . 54

5.3 Interpreta¸c˜ao dos Parˆametros e das Vari´aveis . . . 56

5.4 Declara¸c˜ao de Vari´aveis do Problema S233 . . . 56

5.5 Declara¸c˜ao de Vari´aveis do Problema S380 . . . 57

5.6 Interpreta¸c˜ao da Fun¸c˜ao Objetivo e Fun¸c˜oes Restri¸c˜ao . . . 58

5.7 Defini¸c˜ao das restri¸c˜oes do Problema S330 . . . 60

5.8 Interface do Interpretador . . . 65

5.9 Declara¸c˜ao de Vari´aveis. . . 66

5.10 Declara¸c˜ao de Vari´aveis utilizando um Ciclo . . . 67

6.1 Resultado da Interpreta¸c˜ao das Vari´aveis . . . 70

6.2 Resultado da Interpreta¸c˜ao da Fun¸c˜ao Objetivo . . . 70

6.3 Resultado da Interpreta¸c˜ao das Fun¸c˜oes Restri¸c˜ao . . . 70

(23)

Gloss´

ario, acr´

onimos e

abreviaturas

Gloss´

ario de termos

Fun¸c˜ao Objetivo — Fun¸c˜ao matem´atica real de vari´aveis reais que, a partir das vari´aveis de decis˜ao, define o valor da solu¸c˜ao [1].

Fun¸c˜ao Restri¸c˜ao — Fun¸c˜ao matem´atica que define os valores aceit´aveis ou admiss´ıveis das vari´aveis [1].

Fun¸c˜ao derivada — Dada uma fun¸c˜ao, f(x) num intervalo I ∈ R e x0 ∈ I, a derivada de f(x) em x0 ´e dada por [8]:

f′(x0) = lim

h→0

f (x0+h)−f(x0) h

Uma fun¸c˜ao diz-se diferenci´avel se o for em todos os pontos do intervalo I. Assim, surge uma fun¸c˜ao y, denominada por fun¸c˜ao derivada, dada por:

y(x) = f′(x),∀ x ∈ R

(24)

Fun¸c˜ao Suave — Fun¸c˜ao matem´atica em que ´e poss´ıvel determinar a sua 1a e 2a derivada em todo o seu dom´ınio [1].

Problemas n˜ao lineares inteiros mistos — Problemas matem´aticos constituidos por vari´aveis cont´ınuas discretas, com fun¸c˜ao objetivo e fun¸c˜oes restri¸c˜ao n˜ao lineares [9].

Matriz hessiana — Matriz quadrada formada pelas segundas derivadas de uma

fun¸c˜ao [10], dada por:

Hıȷ(x) = δδ2f (x)

xıδxȷ

Fun¸c˜ao quadr´atica — Fun¸c˜ao dada por:

f (x) = ax2+ bx + c

onde a, b, c s˜ao n´umeros reais e a̸= 0.

Fun¸c˜ao cont´ınua — Seja f uma fun¸c˜ao e a um ponto do dom´ınio de f . A fun¸c˜ao diz-se continua em a se:

lim

x→af (x) = f (a)

A fun¸c˜ao ´e cont´ınua se f ´e cont´ınua em todos os pontos do seu dom´ınio.

Fun¸c˜ao Linear — Uma fun¸c˜ao linear ´e representada por uma equa¸c˜ao de uma reta, ou seja, do tipo:

f (x) = ax + b

em que a e b s˜ao n´umeros reais, com a̸= 0. a representa o declive da reta e b ´e a intersec¸c˜ao com o eixo dos yy.

(25)

Fun¸c˜ao convexa — Sendo I um intervalo de R e f : I → R, f diz-se convexa se:

∀ a, b ∈ I e t ∈ [0, 1], f(ta + (1 − t)b) ≤ tf(a) + (1 − t)f(b)

ou seja, o gr´afico da fun¸c˜ao f fica sempre abaixo do segmento que une dois quaisquer pontos pertencentes a f .

M´ınimo local — Um ponto x0 ´e denominado de m´ınimo local quando f (x0)

f (x) para todo x suficientemente pr´oximo de x0. Ilustrado na Figura1

Figura 1 – M´ınimo Local

Matriz Esparsa — Matriz que apresenta um grande n´umero de elementos igual a zero.

(26)

Lista de acr´

onimos

Sigla Expans˜ao

AMPL A Modeling Language for Mathematical Programming

SIF Standard Input Format

API Application Program Interface

Lista de abreviaturas

Abreviatura Significado(s)

et al. e outros (autores) etc. etecetera, outros i.e. isto ´e, por conseguinte

(27)

1

Introdu¸c˜

ao

1.1

Enquadramento

Quando falamos de problemas de otimiza¸c˜ao, deparamo-nos com situa¸c˜oes onde n˜ao ´

e poss´ıvel usar m´etodos baseados na deriva¸c˜ao para as suas resolu¸c˜oes, devido `a complexidade das fun¸c˜oes derivadas ou da pr´opria fun¸c˜ao objetivo ou em casos onde a fun¸c˜ao objetivo ´e n˜ao suave ou at´e desconhecida. Nesses casos podemos recorrer a m´etodos de pesquisa directa [1]. Estes diferem em fun¸c˜ao do tipo de problema, com ou sem restri¸c˜oes.

Muitos desses problemas s˜ao codificados em linguagem matem´atica seguindo um formato padr˜ao, tornando o seu processo de resolu¸c˜ao mais f´acil, visto que em alguns casos, onde os problemas possuem centenas de vari´aveis, o processo de entrada de dados pode tornar-se muito demorado e vulner´avel a erros [11].

Uma vez o problema codificado, ´e ent˜ao poss´ıvel obter a sua resolu¸c˜ao utilizando interpretadores dependendo do tipo de codifica¸c˜ao em que se encontra o problema. Alguns destes interpretadores n˜ao s´o formulam os problemas como tamb´em permitem a sua resolu¸c˜ao utilizando v´arios m´etodos de otimiza¸c˜ao. Tendo como dados de entrada ficheiros contendo os problemas, todo o processo de resolu¸c˜ao ´e mais rapido

(28)

2 CAP´ITULO 1. INTRODUC¸ ˜AO

e pode ser feito a qualquer momento sem necessidade de reescrever o problema a cada resolu¸c˜ao.

1.2

Objetivos

Para a resolu¸c˜ao de problemas de otimiza¸c˜ao foi desenvolvida uma API (Application Programming Interface) [1], que recorre aos m´etodos de pesquisa directa, mas que, para a sua utiliza¸c˜ao ´e necess´ario formular os dados de entrada como a fun¸c˜ao objetivo, o valor dos pontos iniciais e as fun¸c˜oes restri¸c˜ao, caso existam. Esta formula¸c˜ao ´e efectuada quer atrav´es de um ficheiro em Java, quer atrav´es da passagem destes dados (sob a forma de uma string) para uma classe que representa genericamente os problemas.

Este trabalho visa o desenvolvimento, em tecnologia Java, de uma ferramenta capaz de interpretar problemas matem´aticos codificados em AMPL (A Modeling Language for Mathematical Programming). Feita essa interpreta¸c˜ao, a ferramenta deve formular o problema na sua forma geral, ou seja, definir a sua fun¸c˜ao objetivo, as fun¸c˜oes restri¸c˜ao e os seus pontos iniciais. A partir destes dados deve ser criado e compilado um ficheiro Java contendo fun¸c˜oes capazes de devolver a dimens˜ao do problema, o valor do pontos iniciais das vari´aveis, o n´umero de restri¸c˜oes de cada tipo, o n´umero total de restri¸c˜oes, o tipo de uma determinada restri¸c˜ao, o valor de uma determinada fun¸c˜ao restri¸c˜ao num determinado ponto e o valor da fun¸c˜ao objetivo num determinado ponto.

Para a resolu¸c˜ao do problema, dever´a ser poss´ıvel `a API recorrer ao ficheiro compilado, n˜ao sendo assim necess´ario a formula¸c˜ao e introdu¸c˜ao do problema por parte do utilizador. Al´em disso o utilizador n˜ao dever´a necessitar de ter conhecimentos de programa¸c˜ao para criar um novo problema.

(29)

1.3. MOTIVAC¸ ˜AO E CONTRIBUIC¸ ˜OES 3

1.3

Motiva¸

ao e Contribui¸

oes

Este trabalho veio complementar trabalhos j´a realizados, nomeadamente a API referida, permitindo assim a utiliza¸c˜ao de problemas codificados em AMPL no estudo de m´etodos para a otimiza¸c˜ao de problemas. Obtendo um problema formulado a partir destes ficheiros ´e poss´ıvel a utiliza¸c˜ao da API de uma forma simples e imune a poss´ıveis erros na formula¸c˜ao dos problemas feita pelo utilizador. Para al´em de tornar poss´ıvel o estudo de um problema sem necessidade do utilizador o formular a cada utiliza¸c˜ao, a utiliza¸c˜ao dos problemas codificados permite ainda a utiliza¸c˜ao da API no estudo de problemas que envolvem centenas de vari´aveis e restri¸c˜oes, que seria impratic´avel se o problema fosse formulado e inserido pelo utilizador. Existem ainda bibliotecas de problemas ”padr˜ao”codificados em AMPL, normalmente utilizados para testar m´etodos de otimiza¸c˜ao, que passam a ser utiliz´aveis pela API.

De referir ainda que a API existente recorre a um parser que interpreta as express˜oes introduzidas pelo utilizador. Desta forma ´e poss´ıvel desenvolver aplica¸c˜oes que aceitam em run-time as express˜oes dos problemas. Contudo, este parser, para al´em de n˜ao aceitar os problemas ”padr˜ao”existentes, apresenta problemas ao n´ıvel da velocidade de execu¸c˜ao. Assim, com o presente trabalho pretende-se tamb´em resolver este problema de desempenho, criando um ”novo”interpretador/parser mais eficiente recorrendo `a compila¸c˜ao dinˆamica de c´odigo.

1.4

Organiza¸

ao da disserta¸

ao

Esta disserta¸c˜ao encontra-se estruturada em seis cap´ıtulos. No presente Cap´ıtulo ´e feita uma introdu¸c˜ao de enquadramento e apresenta-se os objetivos e motiva¸c˜oes do trabalho, resumindo desta forma o trabalho realizado.

No Cap´ıtulo 2 faz-se uma abordagem `a otimiza¸c˜ao n˜ao linear, sendo apresentados os m´etodos tidos em conta para a resolu¸c˜ao deste tipo de problemas.

(30)

4 CAP´ITULO 1. INTRODUC¸ ˜AO

´

E feita uma abordagem, no Cap´ıtulo 3 e 4, `as codifica¸c˜oes existentes para problemas de otimiza¸c˜ao, sendo no Cap´ıtulo 3 apresentadas as mais utilizadas no ´ultimo ano e no Cap´ıtulo 4 a codifica¸c˜ao tida em conta neste trabalho, quanto `as suas caracter´ısticas e `as ferramentas existentes para interpreta¸c˜ao e resolu¸c˜ao dos problemas codificados. No Cap´ıtulo 5 ´e apresentada a implementa¸c˜ao do interpretador da codifica¸c˜ao referida, descrevendo todo o processo de formula¸c˜ao do problema a partir do ficheiro, como pode ser utilizado e quais os resultados dessa utiliza¸c˜ao.

A finalizar a disserta¸c˜ao, ´e efectuada no Cap´ıtulo 6 uma apresenta¸c˜ao e discuss˜ao dos resultados obtidos nos testes realizados ao interpretador e apresentam-se no final deste, as conclus˜oes e algumas perspectivas de trabalho futuro.

(31)

2

API de Otimiza¸c˜

ao n˜

ao Linear

2.1

Introdu¸

ao

Entende-se por otimiza¸c˜ao de problemas a obten¸c˜ao de uma solu¸c˜ao, ou um conjunto de solu¸c˜oes, ´otimas para uma determinada fun¸c˜ao ou conjunto de fun¸c˜oes. Em otimiza¸c˜ao o valor ´otimo de uma fun¸c˜ao tanto pode ser o seu m´ınimo como o seu m´aximo. Nesta disserta¸c˜ao ser´a considerado o m´ınimo. Em problemas relativamente simples de resolver podem ser utilizados m´etodos baseados em derivadas, no entanto existem problemas onde esses m´etodos n˜ao podem ser aplicados devido `a sua complexidade, ao facto da fun¸c˜ao objetivo ser n˜ao suave ou mesmo desconhecida e das suas derivadas n˜ao estarem dispon´ıveis [12]. Como alternativa podem ser utilizados os denominados m´etodos de pesquisa direta.

Os m´etodos de pesquisa direta v˜ao progredindo em dire¸c˜ao ao valor ´otimo, tendo como base a compara¸c˜ao de valores da fun¸c˜ao objetivo em diversos pontos. Sendo esta a ´unica informa¸c˜ao que utilizam, permitem a resolu¸c˜ao de problemas onde a fun¸c˜ao objetivo e as restri¸c˜oes podem ser n˜ao suaves, n˜ao lineares, descont´ınuas, n˜ao convexas e com muitos m´ınimos locais [10].

Para que a resolu¸c˜ao de um problema seja poss´ıvel ´e necess´ario que este esteja 5

(32)

6 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

formulado, isto ´e, estarem definidas as suas vari´aveis, a fun¸c˜ao objetivo e as fun¸c˜oes restri¸c˜ao. Esta formula¸c˜ao depende do tipo de problema [13], com ou sem restri¸c˜oes. Assim os problemas sem restri¸c˜oes tˆem a forma de (2.1):

min

x∈Rn f (x) (2.1)

Onde f : Rn→ R ´e a fun¸c˜ao objetivo;

Por outro lado, os problemas com restri¸c˜oes tˆem a forma de (2.2): min x∈Rn f (x) sujeito a ci(x) = 0, i∈ E ci(x)≤ 0, i ∈ I (2.2) Onde:

• f : Rn → R ´e a fun¸c˜ao objetivo;

• ci(x) = 0, i∈ E = {1, 2, ..., t}, representam as restri¸c˜oes de igualdade;

• ci(x)≤ 0, i ∈ I = {t+1, t+2, ..., m}, representa as restri¸c˜oes de desigualdade; • Ω = {x ∈ Rn: c

i = 0, i∈ E ∧ ci(x)≤ 0, i ∈ I} ´e o conjunto de todos os pontos

admiss´ıveis, i.e., define a regi˜ao admiss´ıvel.

Identificado o tipo de problema, e feita a sua formula¸c˜ao matem´atica, ´e necess´ario selecionar o m´etodo de otimiza¸c˜ao mais adequado para a sua resolu¸c˜ao, algo que se pode tornar dificil visto existirem incertezas em rela¸c˜ao ao m´etodo que melhor aproxima a solu¸c˜ao ´otima do problema. No entanto a solu¸c˜ao n˜ao depende apenas do m´etodo utilizado mas t´ambem da formula¸c˜ao matem´atica do problema [1].

(33)

2.2. M´ETODOS DE OTIMIZAC¸ ˜AO 7

2.2

etodos de Otimiza¸

ao

Os m´etodos apresentados neste trabalho para resolu¸c˜ao de problemas de otimiza¸c˜ao n˜ao linear s˜ao os m´etodos utilizados pela API referida anteriormente. Estes m´etodos, a seguir apresentados, diferem em fun¸c˜ao do tipo de problema, com ou sem restri¸c˜oes.

etodos de Otimiza¸

ao para Problemas sem Restri¸

oes

Para a resolu¸c˜ao de problemas sem restri¸c˜oes encontram-se implementados os seguintes m´etodos [1]:

• M´etodo de pesquisa coordenada – ´E o m´etodo de pesquisa padr˜ao mais

simples [12]. Partindo de uma itera¸c˜ao xk, este m´etodo determina a pr´oxima

itera¸c˜ao, procurando num padr˜ao de pontos ou grelha de pontos, usando dire¸c˜oes fixas com distˆancia d a xk, com d ∈ R+. Este m´etodo avalia o

comportamento da fun¸c˜ao objetivo ao longo do padr˜ao de pontos. No exemplo de um problema de minimiza¸c˜ao, se no ponto seguinte, Pi, se verificar uma

redu¸c˜ao simples, ou seja, se f (Pi) < f (xk) ent˜ao esse ponto Pi´e a aproxima¸c˜ao

seguinte. Se n˜ao se verificar nenhuma redu¸c˜ao em nenhuma dire¸c˜ao, ent˜ao a distˆancia d ´e reduzida, usualmente para metade, e ´e feito o teste ao novo padr˜ao de pontos.

• M´etodo de Hooke e Jeeves – Tamb´em ele um m´etodo de pesquisa padr˜ao,

diferencia-se do m´etodo de pesquisa coordenada por utilizar um passo padr˜ao

ao analisar a informa¸c˜ao gerada das itera¸c˜oes anteriores bem sucedidas. Se a itera¸c˜ao anterior for bem sucedida, ent˜ao a dire¸c˜ao xk+1−xk´e considerada uma

dire¸c˜ao promissora e a pesquisa ´e feita em torno de xp = xk+1+ (xk+1− xk).

Se for bem sucedida o ponto ´e aceite, sen˜ao a pesquisa ´e feita em torno de

xk+1, tal como acontecia no m´etodo de pesquisa coordenada.

• M´etodo de Audet et. al. – Semelhante ao m´etodo pesquisa coordenada

(34)

8 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

passo, passo de pesquisa, consiste no c´alculo do valor da fun¸c˜ao objetivo num n´umero finito de pontos tentando encontrar um ponto com menor valor da fun¸c˜ao objetivo. O segundo passo, passo de sondagem, realizado quando o passo de pesquisa n˜ao obteve sucesso, consiste na usual pesquisa coordenada em torno da itera¸c˜ao actual.

• M´etodo de Nelder-Mead – O m´etodo Nelder-Mead, m´etodo Simplex, consiste

na constru¸c˜ao de um Simplex S constituido por um conjunto de n + 1 pontos,

{xi}n+1

i=1, em Rn, ou seja, ´e um poliedro em Rn com n + 1 faces, onde xi ´e o

i-´esimo v´ertice do Simplex S. Sendo um m´etodo Simplex, a itera¸c˜ao seguinte ´e calculada atrav´es da reflex˜ao isom´etrica do pior v´ertice, em rela¸c˜ao ao centroide dos n melhores v´ertices, exemplificada na figura 2.1. Se o valor da fun¸c˜ao objetivo no v´ertice refletido for inferior, o novo v´ertice ´e candidado a minimizante, caso contr´ario escolhe-se o segundo pior v´ertice e repete-se o processo.

(35)

2.2. M´ETODOS DE OTIMIZAC¸ ˜AO 9

Pala al´em deste movimento de reflex˜ao, o m´etodo Nelder-Mead introduziu movimentos n˜ao isom´etricos, conhecidos como movimentos de expans˜ao e contrac¸c˜ao, complementados por um passo de redu¸c˜ao, ou passo encolhido, de todo o Simplex em dire¸c˜ao ao melhor v´ertice. Este ´ultimo ´e utilizado quando os movimentos de expans˜ao e contrac¸c˜ao n˜ao apresentam um valor inferior para a fun¸c˜ao objetivo tendo em conta o novo v´ertice refletido. Neste caso repete-se todo o processo tendo como base o novo Simplex reduzido. Estes movimentos s˜ao apresentados na figura 2.2, sendo o xk o melhor v´ertice do

Simplex.

(36)

10 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

• M´etodo Simplex Convergente - Semelhante ao m´etodo de Nelder-Mead,

introduz um novo passo, chamado de passo de salvaguarda, consiste numa rota¸c˜ao do Simplex em torno do melhor v´ertice v0:

vrot,i= v0− (vi− v0), i = 1, ..., n.

No primeiro passo deste m´etodo, antes do movimento de reflex˜ao, ´e necess´ario escolher e determinar uma s´erie de parˆametros utilizados ao longo do m´etodo e fazer alguns ajustes aos dados. S˜ao eles:

– Ordenar os n + 1 v´ertices do Simplex S = {v0(0), v1(0), ..., vn(0)}, de modo

que:

f0 = f (v0)≤ f1 = f (v1)≤ ... ≤ fn= f (vn).

– Determinar ∆ = diam(S), onde diam(S) representa o diˆametro de S.

– Tendo o Simplex inicial S ={v(0)0 , v(0)1 , ..., vn(0)}, escolher ξ de modo que: von(S)≤ ξ

onde von(S) representa o volume de S e ξ ∈ R+;

– Escolher os parˆametros de expans˜ao, δe; de reflex˜ao, δr; de contrac¸c˜ao para o exterior, δoc; de contrac¸c˜ao para o interior, δic; o ´ındice de redu¸c˜ao

do Simplex, γs; e o parˆametro de controlo do diˆametro do Simplex, γe,

de modo que:

0 < γs < 1 < γe, −1 < δic< 0 < δoc< δr < δe.

Ap´os o c´alculo da reflex˜ao do Simplex (apresentado no m´etodo Nelder-Mead), se este movimento n˜ao apresentar um decr´esimo no valor da fun¸c˜ao objetivo, este m´etodo verifica as condi¸c˜oes apresentadas em (2.3) e, se n˜ao forem satisfeitas, procede ao passo de salvaguarda. No caso das condi¸c˜oes serem satisfeitas o m´etodo, tal como o m´etodo de Nelder-Mead, procede aos movimentos de expans˜ao, contrac¸c˜ao e redu¸c˜ao.

(37)

2.2. M´ETODOS DE OTIMIZAC¸ ˜AO 11

diam({v0, v1, vn−1} ∪ {vr}) ≤ γe∆, von({v0, v1, vn−1} ∪ {vr}) ≥ ξ.

(2.3)

etodos de Otimiza¸

ao para Problemas com Restri¸

oes

A API cont´em, implementados at´e ao momento, para resolver problemas com restri¸c˜oes m´etodos de Penalidade ou Barreira e o m´etodo dos Filtros [1]. Considerando o problema apresentado em (2.2), estes m´etodos de otimiza¸c˜ao para problemas n˜ao lineares com restri¸c˜oes convertem, no caso do m´etodo dos Filtros, o problema em dois problemas sem restri¸c˜oes, e no caso dos m´etodos Penalidade ou Barreira o problema ´e convertido em sub-problemas sem restri¸c˜oes, que s˜ao resolvidos usando os algoritmos anteriormente apresentados, utilizados para resolver problemas sem restri¸c˜oes.

O que diferencia estes m´etodos ´e o facto do m´etodo dos Filtros ter em conta a otimalidade e viabilidade separadamente, isto ´e, a finalidade em minimizar a fun¸c˜ao objetivo e minimizar as viola¸c˜oes das restri¸c˜oes enquanto que os m´etodos de Penalidade e Barreira tratam a otimalidade e viabilidade em conjunto [13].

M´etodos de Penalidade ou Barreira

Tanto os m´etodos de Penalidade como de Barreira, come¸cam por converter o problema com restri¸c˜oes do tipo (2.2) num problema sem restri¸c˜oes, apresentado em (2.4), criando para tal uma nova fun¸c˜ao objetivo, contendo informa¸c˜ao da fun¸c˜ao objetivo original, f , e das restri¸c˜oes do problema ci, i = 1, ..., m:

min

x∈Rn Φ(xk, rk) (2.4)

onde:

(38)

12 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

• rk ´e o parˆametro de penalidade ou barreira, com um valor real positivo;

• p ´e uma fun¸c˜ao que penaliza (Penalidade) ou recusa (Barreira) pontos que

violem as restri¸c˜oes;

A nova fun¸c˜ao objetivo Φ a otimizar difere para cada m´etodo de Penalidade e Barreira, abaixo apresentadas.

• M´etodo de Penalidade Est´atica e Dinˆamica:

Ambos os m´etodos tˆem a mesma fun¸c˜ao Φ, apresentada em (2.5). Φ(x) = f (x) + ti=1 αi|ci(x)|q+ mi=t+1 βi[max(0, ci(x))]q, q≥ 1 (2.5)

No entanto, nos m´etodos implementados na API, os parˆametros utilizados na fun¸c˜ao Φ s˜ao actualizados de forma diferente. No m´etodo de Penalidade Est´atica ´e feita da seguinte forma:

parametro ={γ.α1, ..., γ.αt, γ.β1, ..., γ.βm−t}, γ > 1.

No m´etodo de Penalidade Dinˆamica, os parˆametros s˜ao actualizados da seguinte forma:

q > 1;

(C = γ) > 0;

αi(k + 1) = αi(k) + C.|ci(x)|, i = 1, ..., t; βi(k + 1) = βi(k) + C.[max(0, ci(x))], i = t + 1, ..., m. • Fun¸c˜ao Barreira Progressiva:

Φ(x) = f (x) + bx(x) (2.6) onde, bx(x) =        mi=1 [max(ci(x), 0)]2 se x∈ X + se x /∈ X com Ω∈ X. (2.7)

(39)

2.2. M´ETODOS DE OTIMIZAC¸ ˜AO 13

• Fun¸c˜ao Barreira Extrema:

Φ(x) =      f (x) se x∈ Ω +∞ se x /∈ Ω . (2.8)

• M´etodo de Penalidade Cl´assica:

Φ(x) = f (x) + p(x) = f (x) + rk mi=1 [max(0, ci(x))]q, q≥ 1. (2.9) • M´etodo de Penalidade ℓ1 : Φ(x) = ℓ1(x, µ) = f (x) + µ ti=1 |ci(x)| + µ mi=t+1 [max(ci(x), 0)], µ−→ +∞. (2.10)

Como ´e vis´ıvel nas fun¸c˜oes acima apresentadas, o m´etodo de Penalidade soma `a fun¸c˜ao original um valor de penalidade em fun¸c˜ao da viola¸c˜ao das restri¸c˜oes, quanto maior for a viola¸c˜ao, maior ´e o valor de penalidade, aumentando assim o valor da nova fun¸c˜ao objetivo, afastando-se do seu valor ´otimo. Uma vez que o m´etodo de otimiza¸c˜ao pretende chegar ao valor ´otimo da fun¸c˜ao, a itera¸c˜ao seguinte ser´a calculada com objetivo de diminuir o valor da penalidade. Utilizando as fun¸c˜oes Barreira, no caso da Barreira Extrema, esta n˜ao permite aceitar pontos fora da regi˜ao admiss´ıvel Ω, regi˜ao criada pelas restri¸c˜oes do problema, atribuindo o valor +∞ `a fun¸c˜ao objetivo. Para o caso da fun¸c˜ao Barreira Progressiva, esta n˜ao permite aceitar pontos fora da regi˜ao admiss´ıvel X, regi˜ao criada pelas restri¸c˜oes relax´aveis do problema, atribuindo o valor +∞ `a fun¸c˜ao objetivo. As restri¸c˜oes relax´aveis s˜ao restri¸c˜oes que podem ser satisfeitas apenas aproximadamente, possibilitando o c´alculo das fun¸c˜oes fora da regi˜ao admiss´ıvel, definida por elas, considerando uma certa tolerˆancia.

(40)

14 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

M´etodo dos Filtros

Este m´etodo converte os problemas com restri¸c˜oes em problemas com 2 fun¸c˜oes distintas, sendo uma, f , contendo a fun¸c˜ao objetivo original, f , e a outra, h, contendo a informa¸c˜ao das restri¸c˜oes do problema. Tendo estas fun¸c˜oes, come¸ca-se por verificar se o valor do ponto xk est´a contido na regi˜ao admiss´ıvel Ω, regi˜ao essa

definida pelas restri¸c˜oes do problema. Se o ponto estiver contido em Ω, a fun¸c˜ao tida em conta pelo m´etodo de otimiza¸c˜ao ´e a fun¸c˜ao f , caso contr´ario, ´e tida em conta a fun¸c˜ao h. O m´etodo procede `a verifica¸c˜ao do ponto no Filtro, caso seja aceite, o

Filtro ´e actualizado e o m´etodo procede `a itera¸c˜ao seguinte (no caso de n˜ao serem verificados os crit´erios de paragem). No caso do ponto n˜ao ser aceite no Filtro ´e utilizado um m´etodo para resolu¸c˜ao de problemas sem restri¸c˜ao para o c´alculo da itera¸c˜ao seguinte para a fun¸c˜ao objetivo, f ou h, dependendo se o ponto anterior era admiss´ıvel ou n˜ao. Obtendo a itera¸c˜ao seguinte, o m´etodo do Filtros repete todo o processo. ´E apresentado na figura2.3 o diagrama de funcionamento do m´etodo dos Filtros.

Figura 2.3 – Funcionamento do M´etodo dos Filtros (Fonte: [1])

(41)

2.3. IMPLEMENTAC¸ ˜AO DOS M´ETODOS EM JAVA 15

do conjuntoF tem rela¸c˜ao x ≺ y, ou seja, o Filtro ´e constituido por pontos tal que nenhum domina outro. ´E apresentado na figura2.4um Filtro constituido por quatro pontos, a, b, c e d, que definem a zona proibida, representada a sombreado. Se um novo ponto testado no Filtro for representado por y, situado na zona proibida, este n˜ao ´e aceite. Ao contr´ario dos pontos z e w, que n˜ao se encontram na zona proibida, seriam aceites e incluido no Filtro. No caso do ponto w seriam eliminados os pontos

c e d, visto que, ao actualizar o Filtro com o novo ponto w, estes s˜ao dominados pelo novo ponto, logo seriam eliminados.

Figura 2.4 – Filtro com quatro pontos (Fonte: [1])

2.3

Implementa¸

ao dos M´

etodos em Java

Como j´a referido anteriormente, este trabalho visa complementar um outro trabalho j´a realizado [1], uma API (Application Programming Interface) que permite resolver problemas de otimiza¸c˜ao, utilizando a tecnologia Java. Esta API permite, a partir de um problema formulado, obter a sua solu¸c˜ao ´otima, recorrendo aos v´arios m´etodos antes apresentados.

(42)

16 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

Para cada m´etodo existe uma Classe associada, apresentada na figura 2.5, que permite ao utilizador a sua utiliza¸c˜ao, para tal necessita de definir o valor das vari´aveis dessas Classes que representam os dados do problema. Essa defini¸c˜ao ´e feita atrav´es dos construtores da Classe, que permitem o processo de duas formas:

• Os parˆametros de entrada s˜ao a Fun¸c˜ao objetivo, f e o vector dos valores

iniciais da vari´avel x0, sob a forma de String´s, neste caso a API recorre a um

parser que interpreta essas Strings;

• O parˆametro de entrada ´e uma instˆancia da Classe ProblemaGeral. Esta Classe

representa o problema em quest˜ao, contendo os respetivos dados.

No caso dos problemas com restri¸c˜oes, existem apenas duas Classes, uma para os m´etodos de Penalidade e Barreira e outra para o m´etodo dos Filtros. Para al´em dos parˆametros de entrada acima apresentados, o construtor da Classe associada aos m´etodos de Penalidade e Barreira tem tamb´em os seguintes parˆametros:

• Vector de Restri¸c˜oes;

• O m´etodo interno a utilizar; • O m´etodo externo a utilizar.

Para o m´etodo dos Filtros, o construtor da Classe associada tem, para al´em dos dados do problema, os seguintes dados parˆametros:

• Vector de Restri¸c˜oes; • A medida h a utilizar; • O m´etodo externo a utilizar.

(43)

2.3. IMPLEMENTAC¸ ˜AO DOS M´ETODOS EM JAVA 17

Figura 2.5 – Diagrama de Classes da API

Todos os dados acima apresentados podem n˜ao s´o ser definidos nos construtores das Classes, como tamb´em atrav´es de m´etodos SET (m´etodos que permitem definir o valor dos atributos). Os outros m´etodos disponibilizados pelas Classes s˜ao os m´etodos que devolvem os resultados do problema e alguns dados sobre o processo iterativo. S˜ao eles:

• run(), executa o algoritmo de resolu¸c˜ao do problema; • getDim(), devolve a dimens˜ao do problema;

(44)

18 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

nEvals;

• getSolution(), devolve a aproxima¸c˜ao `a solu¸c˜ao encontrada, x* ;

• evaluateF(x), devolve o valor da fun¸c˜ao objetivo na aproxima¸c˜ao f(x), tem

como entrada o valor das vari´aveis, x ;

• evaluateH(n, xk), devolve o valor da restri¸c˜ao n para o valor da vari´avel na itera¸c˜ao k ;

• numerRestricoes(), devolve o n´umero de restri¸c˜oes;

• numerRestricoes igualdade(), devolve o n´umero de restri¸c˜oes de igualdade; • numerRestricoes desigualdade(), devolve o n´umero de restri¸c˜oes de desigualdade; • numerRestricoes limiteSimples(), devolve o n´umero de restri¸c˜oes do tipo limites

simples.

A utiliza¸c˜ao desta API pode ser feita de v´arias formas, abaixo apresentadas:

• No computador local – Instalando a API, a partir do seu ficheiro .jar, no

pr´oprio computador ´e poss´ıvel ter acesso a todas as suas classes, permitindo assim a sua utiliza¸c˜ao [1]. Tendo acesso `as classes da API torna-se poss´ıvel a resolu¸c˜ao de um problema formulado e inserido pelo utilizador, como ´e apresentado na figura 2.6, no caso de um problema sem restri¸c˜oes e utilizando por exemplo o m´etodo de Pesquisa Coordenada, onde a vari´avel expr ´e a fun¸c˜ao objetivo e a vari´avel initPoint cont´em os valores dos pontos iniciais das vari´aveis. Utilizando o construtor da classe CoordinatedSearch ´e criada uma instˆancia dessa Classe que cont´em os dados do problema enviados por parˆametros. Para resolu¸c˜ao do problema ´e chamado o m´etodo run(), ao ser executado este m´etodo a solu¸c˜ao ´e guardada num vector com a dimens˜ao do problema. V´arios m´etodos est˜ao dispon´ıveis para obter os dados do problema, para o caso da solu¸c˜ao ´e utilizado o m´etodo getLastResult(), que retorna o vector com os valores da solu¸c˜ao [1].

(45)

2.3. IMPLEMENTAC¸ ˜AO DOS M´ETODOS EM JAVA 19

Figura 2.6 – Exemplo de utiliza¸c˜ao da API Via Java

• Via Web Services – Permite aos utilizadores terem acesso remoto aos m´etodos

da API, n˜ao sendo necess´ario ter a API instalada no pr´oprio computador. Uma outra vantagem desta implementa¸c˜ao reside no facto de ser poss´ıvel aceder aos m´etodos n˜ao s´o utilizando a tecnologia Java, mas tamb´em muitas outras linguagens de programa¸c˜ao, ao contr´ario da utiliza¸c˜ao local da API, que apenas permite a utiliza¸c˜ao desta com Java. Na figura 2.7 ´e apresentado um exemplo de acesso remoto `a API utilizando Java. Para esta utiliza¸c˜ao apenas ´e necess´ario a importa¸c˜ao, por parte do utilizador, do ficheiro WSDL (Web Service Definition Language), disponibilizado na Web. Este ficheiro cria localmente todos os ficheiros necess´arios para a utiliza¸c˜ao da API [14].

Figura 2.7 – Exemplo de utiliza¸c˜ao da API Via Web Services

• Via Web Vers˜ao 1 – Permite aos utilizadores inserirem os problemas formulados

e selecionarem os m´etodos de otimiza¸c˜ao que pretendem. Como ´e vis´ıvel na Figura 2.8, o utilizador deve introduzir os dados do problema, i.e., o tipo de problema, a sua dimens˜ao e quantas restri¸c˜oes tem associadas, a fun¸c˜ao objetivo, as fun¸c˜oes restri¸c˜ao e o valor do pontos iniciais. Ap´os a introdu¸c˜ao

(46)

20 CAP´ITULO 2. API DE OTIMIZAC¸ ˜AO N ˜AO LINEAR

destes dados e escolhido o m´etodo a utilizar o resultado ´e ent˜ao apresentado ao utilizador [14].

Figura 2.8 – Exemplo de utiliza¸c˜ao da API Via Web Vers˜ao 1

• Via Web Vers˜ao 2 – Permite aos utilizadores inserirem os problemas formulados

e selecionarem os m´etodos de otimiza¸c˜ao que pretendem. Tal como na vers˜ao 1, e vis´ıvel na Figura 2.9, ´e necess´ario para al´em do problema formulado, introduzir o tipo de problema, a sua dimens˜ao e o n´umero de restri¸c˜oes. Esta vers˜ao permite al´em da solu¸c˜ao, visualizar os dados do processo iterativo, apresentado na figura 2.10, permitindo uma an´alise de todo o processo, visto serem apresentados graficamente os valores das vari´aveis e da fun¸c˜ao objetivo em cada itera¸c˜ao. Os dados relativos ao processo de resolu¸c˜ao s˜ao guardados em base de dados, podendo assim serem consultados posteriomente [13].

(47)

2.3. IMPLEMENTAC¸ ˜AO DOS M´ETODOS EM JAVA 21

Figura 2.9 – Exemplo de utiliza¸c˜ao da API Via Web Vers˜ao 2

Figura 2.10 – Exemplo de utiliza¸c˜ao da API para an´alise do processo iterativo Via Web Vers˜ao 2

(48)
(49)

3

Codifica¸c˜

ao de Problemas

Matem´

aticos

3.1

Introdu¸

ao

Uma vez que a otimiza¸c˜ao envolve mais do que apenas a aplica¸c˜ao de um algoritmo para minimizar ou maximizar uma fun¸c˜ao objetivo, ´e necess´ario, antes de qualquer rotina de otimiza¸c˜ao ser invocada, um esfor¸co consider´avel para formular o modelo matem´atico subjacente ao problema, e desta forma diminuir o esfor¸co computacional dos algoritmos de otimiza¸c˜ao. A codifica¸c˜ao dos problemas permite tornar estas etapas de formula¸c˜ao mais f´aceis e menos suscet´ıveis a erros [15].

Segundo Emmanuel Fragni`ere [16], a codifica¸c˜ao utilizada deve permitir aos utilizadores codificarem problemas, mas tamb´em compreendˆe-los uma vez codificados, por outro lado, os computadores devem ser capazes de os ler e traduzir. Desta forma ´e poss´ıvel a qualquer pessoa codificar um problema e, se pretender, disponibiliz´a-lo em qualquer parte do mundo via Web.

Estando um problema codificado, ´e poss´ıvel ao utilizador obter a sua solu¸c˜ao, utilizando um solver associado, sem necessidade de o formular e introduzir sempre que quiser obter a solu¸c˜ao. Para al´em da vantagem de reutiliza¸c˜ao de problemas j´a formulados, permite o estudo de problemas de grande escala, visto que existem

(50)

24 CAP´ITULO 3. CODIFICAC¸ ˜AO DE PROBLEMAS MATEM ´ATICOS

muitas situa¸c˜oes onde um problema de otimiza¸c˜ao apresenta apenas uma fun¸c˜ao objetivo, restri¸c˜oes simples e um n´umero de vari´aveis relativamente baixo. No entanto, a maioria dos problemas da vida real envolvem centenas de restri¸c˜oes e vari´aveis, n˜ao sendo pratic´avel para o utilizador formular e inserir num solver cada restri¸c˜ao e cada vari´avel [16].

3.2

Principais Codifica¸

oes

Tendo como base o NEOS (Network-Enabled Optimization System) Server, ´e poss´ıvel avaliar quais as codifica¸c˜oes mais utilizadas na resolu¸c˜ao de problemas por parte de quem utiliza este servi¸co.

O NEOS Server ´e um servi¸co livre baseado na Internet, que permite, atrav´es de uma abordagem simples, resolver uma grande variedade de problemas de otimiza¸c˜ao, disponibilizando v´arios solvers para isso. De uma forma muito simples o utilizador seleciona o solver que pretende utilizar e, no caso de o solver interpretar mais que uma codifica¸c˜ao, indica qual a codifica¸c˜ao do problema que se pretende resolver. Ap´os o utilizador selecionar o ficheiro onde o problema est´a contido, o resultado ´

e apresentado, sendo apresentados, entre outros dados, a solu¸c˜ao, o n´umero de vari´aveis e o n´umero de restri¸c˜oes.

Tendo em conta as estat´ısticas de utiliza¸c˜ao, no ano de 2012, do NEOS Server, apresentadas no gr´afico da Figura3.1, ´e poss´ıvel visualizar as principais codifica¸c˜oes utilizadas na modela¸c˜ao de problemas de otimiza¸c˜ao quanto ao n´umero de utiliza¸c˜oes para cada codifica¸c˜ao, e no gr´afico da Figura 3.2 em termos percentuais. S˜ao apresentados os dados relativos aos dez interpretadores mais utilizados, no entanto o NEOS permite a resolu¸c˜ao de problemas com vinte e sete codifica¸c˜oes diferentes. De salientar que o NEOS teve no ´ultimo ano 353 091 utilizadores.

S˜ao de seguida apresentadas breves explica¸c˜oes das codifica¸c˜oes mais utilizadas, nos gr´aficos apresentadas, com a exce¸c˜ao da codifica¸c˜ao AMPL que ´e apresentada no cap´ıtulo seguinte.

(51)

3.2. PRINCIPAIS CODIFICAC¸ ˜OES 25

Figura 3.1 – N´umero de utiliza¸c˜oes (Fonte: [2])

Figura 3.2 – Utiliza¸c˜ao em percentagem (Fonte: [2])

GAMS

A codifica¸c˜ao GAMS consiste num conjunto de declara¸c˜oes de dados, dados estes que dizem respeito `as vari´aveis do problema, aos seus valores e `a forma como estas constituem a fun¸c˜ao objetivo e as fun¸c˜oes restri¸c˜ao. E apresentado na Figura´

3.3 um exemplo de um problema codificado em GAMS, problema 62 da cole¸c˜ao HockSchittkowski. Todos os dados declarados num ficheiro GAMS pertencem a uma das cinco classes existentes nesta codifica¸c˜ao. Estas classes, apresentadas a seguir, definem os tipos de dados do problema [17].

• SETS - Esta classe representa a declara¸c˜ao dos ´ındices utilizados tanto nos

(52)

26 CAP´ITULO 3. CODIFICAC¸ ˜AO DE PROBLEMAS MATEM ´ATICOS

Figura 3.3 – Problema de otimiza¸c˜ao HS62 codificado em GAMS

• PARAMETERS - Apresenta os parˆametros do problema, contendo o nome e

valor destes. Os parˆametros podem ser declarados de duas formas, de forma normal, apresentando o nome e valor correspondente, e sob a forma de tabela, como ´e apresentado na tabela 3.1.

Tabela 3.1 – Declara¸c˜ao de Parˆametros sobe a forma de tabela

Distˆancia entre cidades em Kil´ometros - D(i, j) Vila Real Bragan¸ca Amarante 42,7 158 Porto 99,3 215 Lisboa 385 491

• VARIABLES - S˜ao identificadas por esta classe as vari´aveis, sendo apresentado

o nome e restri¸c˜oes associadas a estas, nomeadamente se s˜ao positivas, negativas, inteiras, etc.

(53)

3.2. PRINCIPAIS CODIFICAC¸ ˜OES 27

• EQUATIONS - Como o nome indica s˜ao apresentadas por esta classe as

equa¸c˜oes das fun¸c˜oes restri¸c˜ao e da fun¸c˜ao objetivo, sendo primeiro declarado o nome destas e de seguida as express˜oes das mesmas. Para identificar o tipo de restri¸c˜ao ´e utilizado a letra E no caso de igualdade, L no caso de uma restri¸c˜ao do tipo inferior ou igual e G no caso de uma restri¸c˜ao superior ou igual.

• MODELS - Esta ´ultima classe indica quais das equa¸c˜oes acima declaradas

fazem parte do problema, desta forma ´e poss´ıvel formular modelos diferentes utilzando o mesmo ficheiro de entrada GAMS.

SPARSE SDPA

Utilizado para problemas de otimiza¸c˜ao escritos na seguinte forma padr˜ao (3.1):

min c1× x1 + c2 × x2 + . . . + cm × xm

sujeito a F 1× x1 + F 2 × x2 + . . . + F m × xm − F 0 = X X ≥ 0

(3.1)

Sendo o dual do problema (3.2):

min tr(F 0× Y )

sujeito a tr(F i× Y ) = ci, i = 1, 2, . . . , m Y ≥ 0

(3.2)

Onde todas as matrizes de F0, F1, ..., Fm para al´em de serem consideradas sim´etricas de tamanho n por n, s˜ao matrizes esparsas. As restri¸c˜oes X ≥ 0 e Y ≥ 0 significam que X e Y devem ser positivo.

Existem outras formas normalizadas para esta codifica¸c˜ao utilizadas por v´arios autores, no entanto podem ser traduzidas para o formato padr˜ao SPARSE SDPA com pouco esfor¸co [3]. O ficheiro codificado divide-se em seis partes, s˜ao elas:

(54)

28 CAP´ITULO 3. CODIFICAC¸ ˜AO DE PROBLEMAS MATEM ´ATICOS

1. Come¸cando pelos coment´arios, o ficheiro pode conter v´arias linhas de coment´arios, linhas estas que devem come¸car com um destes caracteres ”ou *.

2. Depois dos coment´arios ´e apresentado o n´umero de matrizes restri¸c˜ao, seguida pela letra m, qualquer texto introduzido ap´os esta letra ´e ignorado.

3. A segunda linha ap´os os coment´arios apresenta o n´umero de blocos que dividem a diagonal das matrizes, ou seja, a diagonal da matriz ´e dividida, formando assim submatrizes, exemplificado na Figura 3.4. A declara¸c˜ao do n´umero de blocos ´e seguida da express˜ao nblocks. Da mesma forma que na linha anterior, o texto inserido depois da express˜ao nblocks ´e ignorado.

Figura 3.4 – Divis˜ao da Matriz (Fonte: [3])

4. Ap´os ser indicado o n´umero de blocos criados ´e apresentado um vetor que representa a dimens˜ao de cada bloco. Se este vetor apresentar valores negativos significa que o bloco ´e uma submatriz diagonal, ou seja, apenas os elementos da diagonal s˜ao diferentes de zero.

5. A quarta linha ap´os os coment´arios cont´em o vetor dos coeficientes das vari´aveis que constituem a fun¸c˜ao objetivo.

6. As linhas restantes do ficheiro contˆem os valores das matrizes restri¸c˜ao, apresentando um valor por cada linha. Cada linha ´e constituida pelo ´ındice da matriz, seguido do n´umero do bloco dentro dessa matriz, dos ´ındices i, j que representam o elemento do bloco e por fim o valor da matriz. Como j´a referido as matrizes s˜ao consideradas sim´etricas, logo apenas os valores do triˆangulo superior de cada bloco s˜ao declarados. ´E apresentado na Figura 3.5 um exemplo de um problema e a sua codifica¸c˜ao em SPARSE SDPA respetivamente.

(55)

3.2. PRINCIPAIS CODIFICAC¸ ˜OES 29

(a) Problema formulado (b) Codifica¸c˜ao em SPARSE SDPA

Figura 3.5 – Exemplo de um problema de otimiza¸c˜ao e a sua codifica¸c˜ao em SPARSE SDPA (Fonte: [3])

MPS

A codifica¸c˜ao MPS segue um formato orientado `as colunas, sendo os dados do problema apresentados nas colunas 2, 5, 15, 25, 40 e 50, como ´e vis´ıvel na Figura

3.6 [4]. Nesta mesma Figura ´e poss´ıvel ver que os dados s˜ao divididos e agrupados em fun¸c˜ao do mesmo tipo.

Ao longo do ficheiro v˜ao sendo apresentados os tipos de dados que se seguem, utilizando cart˜oes de cabe¸calho. S˜ao eles:

• NAME – Apresentados a partir da coluna 5, os dados identificados por este

cabe¸calho podem conter qualquer informa¸c˜ao sobre o problema, normalmente o nome.

• ROWS – Identifica as linhas seguintes como sendo dados relativos ao nomes

e tipo das fun¸c˜oes, objetivo ou restri¸c˜oes. Estes dados das restri¸c˜oes s˜ao apresentados nas colunas 2 ou 3 para o tipo de restri¸c˜ao e a partir da coluna 5 para o nome da restri¸c˜ao.

(56)

30 CAP´ITULO 3. CODIFICAC¸ ˜AO DE PROBLEMAS MATEM ´ATICOS

Figura 3.6 – Estrutura das colunas da codifica¸c˜ao MPS (Fonte: [4])

objetivo e fun¸c˜oes restri¸c˜oes, ou seja, as vari´aveis do problema que definem estas fun¸c˜oes. Cada linha apresenta o nome da vari´avel, que fun¸c˜oes constitui e o seu coeficiente em cada uma delas.

• RHS – Os dados identificados por este cabe¸calho definem o valor das fun¸c˜oes

restri¸c˜ao.

• RANGES (opcional) – Tamb´em referente ao valor das fun¸c˜oes restri¸c˜oes aparece

quando essas fun¸c˜oes possuem um valor superior e inferior.

• BOUNDS (opcional) – Representa os dados referentes `as restri¸c˜oes simples,

ou seja, aos limites inferiores e superiores das vari´aveis.

• ENDATA – O cabe¸calho ENDATA representa o fim de todos os dados do

problema.

´

(57)

3.2. PRINCIPAIS CODIFICAC¸ ˜OES 31

Figura 3.7 – Problema de otimiza¸c˜ao codificado em MPS (Fonte: [4])

MOSEL

Tal como as outras linguagens de modela¸c˜ao, o formato MOSEL permite codificar e manipular problemas de otimiza¸c˜ao. A sintaxe utilizada nesta codifica¸c˜ao foi projetada de forma a ser f´acil de utilizar. ´E apresentado na Figura 3.8 um exemplo de um problema codificado em MOSEL, problema Burglar2. A estrutura de um ficheiro MOSEL ´e constituido por cinco partes [18], s˜ao elas:

• Model – Representa o in´ıcio do problema, contendo na mesma linha o nome

do problema.

• Directives – Nesta sec¸c˜ao ´e poss´ıvel incluir bibliotecas do interpretador e

selecionar op¸c˜oes relativamente `a forma como as linhas s˜ao interpretadas, mais propriamente a forma como o interpretador identifica o fim de uma express˜ao, podendo ser pela quebra de linha ou pelo caracter “;“. No caso da identifica¸c˜ao ser feita com a quebra de linha, ´e poss´ıvel que a express˜ao continue na linha seguinte, no entanto ´e necess´ario colocar um operador antes da quebra de linha. No caso do final da express˜ao ser definido com o caracter “;“ o interpretador

(58)

32 CAP´ITULO 3. CODIFICAC¸ ˜AO DE PROBLEMAS MATEM ´ATICOS

assume todas as linhas como sendo da mesma express˜ao at´e ser encontrado o caracter.

• Parameters – S˜ao declarados nesta sec¸c˜ao os parˆametros do problema, apresentando

o seu nome e valor.

• Body – Esta sec¸c˜ao do ficheiro apresenta todas as equa¸c˜oes do problema,

nomeadamente da fun¸c˜ao objetivo e fun¸c˜oes restri¸c˜ao.

• End-model – Representa o fim do problema, o ficheiro pode conter linhas de

c´odigo depois desta declara¸c˜ao, no entanto ser˜ao todas interpretadas como coment´arios.

(59)

3.2. PRINCIPAIS CODIFICAC¸ ˜OES 33

Esta codifica¸c˜ao permite ainda incluir ficheiros, isto ´e, na parte body acima referido, ´

e poss´ıvel utilizar dados existentes noutros ficheiros, sendo apenas necess´ario indicar o nome do ficheiro que se pretende incluir. Esta inclus˜ao de ficheiro apenas ´e poss´ıvel na parte body do ficheiro, logo apenas pode conter dados relativos `as equa¸c˜oes do problema, nomeadamente da fun¸c˜ao objetivo e fun¸c˜oes restri¸c˜ao;

TSP

A codifica¸c˜ao de problemas utilizando TSP divide o ficheiro, onde estes est˜ao contidos, em duas partes. A primeira parte, denominada parte de especifica¸c˜ao, diz respeito `

a formata¸c˜ao utilizada no ficheiro, a segunda parte cont´em os dados do problema [19]. A parte de especifica¸c˜ao cont´em os seguintes parˆametros:

• Name – Identifica o nome do problema.

• Type – Identifica o tipo de dados do problema, que podem ser:

– TSP – Representa dados de um problema do caixeiro viajante, sendo

estes sim´etricos.

– ATSP – Representa tal com o TSP, dados de um problema do caixeiro

viajante, no entanto com dados assim´etricos.

– SOP – Representa dados de um problema de ordena¸c˜ao sequencial.

– HCP – Representa dados de um problema de caminho hamiltoniano. – CVRP – Representa dados de um problema de roteamento de ve´ıculos

com restri¸c˜oes de capacidade.

– TOUR – Representa dados de um problema de tour. • Comment – Identifica os coment´arios existentes no ficheiros.

• Dimension – Identifica no caso do tipo de dados serem TSP ou ATSP, o n´umero

de n´os do problema. No caso do tipo de dados serem CVRP, identifica o n´umero total de n´os e dep´ositos. Se os dados do problema foram do tipo TOUR, identifica a dimens˜ao do problema correspondente.

(60)

34 CAP´ITULO 3. CODIFICAC¸ ˜AO DE PROBLEMAS MATEM ´ATICOS

• Capacity – Identifica a capacidade dos ve´ıculos no caso dos dados serem do

tipo CVRP.

• Edge Weight Type – Especifica como as distˆancias dos caminhos s˜ao dadas. • Edge Weight Format – Especifica o formato das distˆancias dos caminhos. • Edge Data Format – Especifica o formato dos dados dos caminhos.

• Node Coord Type – Especifica o tipo coordenadas associados a cada n´o do

problema utilizadas para apresenta¸c˜ao gr´afica ou no c´alculo das distˆancias.

• Display Data Type – Especifica como ´e feita a apresenta¸c˜ao gr´afica dos n´os. • EOF – Identifica o fim da parte de especifica¸c˜ao.

A declara¸c˜ao destes parˆametros ´e feita utilizando os seus nomes, acima apresentados, seguido do valor.

A segunda parte, referente aos dados do problema ´e dividida em sec¸c˜oes de dados, sendo que cada uma delas come¸ca com a palavra-chave correspondente. As sec¸c˜oes existentes para a parte dos dados s˜ao as seguintes:

• Node Coord Section – O valor das coordenadas de cada n´o s˜ao apresentadas

nesta sec¸c˜ao.

• Depot Section – Esta sec¸c˜ao apresenta a lista de poss´ıveis n´os de dep´osito

alternativos.

• Demand Section – A procura associada a cada n´o, no caso de um problema com

dados do tipo CVRP, ´e dada nesta sec¸c˜ao, contendo para cada n´o o n´umero que identifica o n´o, seguido do valor da procura. Para os n´os de dep´osito o valor da procura ´e 0, no entanto tamb´em s˜ao apresentados nesta sec¸c˜ao.

• Edge Data Section – Esta sec¸c˜ao cont´em os dados dos caminhos do problema.

Contendo em cada linha, referente a cada caminho, os n´umeros que identificam os n´os que este liga.

(61)

3.2. PRINCIPAIS CODIFICAC¸ ˜OES 35

• Fixed Edges Section – Nesta sec¸c˜ao s˜ao listados os caminhos que devem aparecer

na solu¸c˜ao, sendo apresentados os n´umeros que identificam os n´os que estes ligam.

• Edge Weight Section – Esta sec¸c˜ao cont´em o valor das distˆancias dos caminhos

do problema.

CPLEX

Desenvolvido no final dos anos oitenta pela CPLEX Optimization Inc., a codififca¸c˜ao CPLEX segue um formato orientado `as linhas, cada linha do ficheiro pode conter at´e 255 caracteres [6]. As linhas em branco s˜ao ignoradas e as linhas que contiverem o caracter \ tamb´em s˜ao ignoradas, visto este caracter identificar a linha como um coment´ario. O ficheiro CPLEX ´e codificado seguindo o seguinte formato:

• Defini¸c˜ao da fun¸c˜ao objetivo. • Defini¸c˜ao das fun¸c˜oes restri¸c˜ao. • Defini¸c˜ao das restri¸c˜oes simples. • Defini¸c˜ao das vari´aveis.

• Indica¸c˜ao de fim do ficheiro.

Todas estas sec¸c˜oes do ficheiro s˜ao identificadas por palavras-chave que identificam o tipo de dados que se segue. Existem v´arias Palavras-chave para o mesmo tipo de dados, apresentadas no Figura 3.9, onde em cada linha ´e poss´ıvel ver as Palavras-chave utiliz´aveis para cada tipo de dados. ´E apresentado na Figura3.10um exemplo de um problema codificado em CPLEX.

(62)

36 CAP´ITULO 3. CODIFICAC¸ ˜AO DE PROBLEMAS MATEM ´ATICOS

Figura 3.9 – Palavras-chave utilizadas pela codifica¸c˜ao CPLEX para os tipos de dados (Fonte: [6])

Figura 3.10 – Problema de otimiza¸c˜ao codificado em CPLEX (Fonte: [7])

C, MATLAB BINARY e Fortran

Para problemas codificados em C, MATLAB BINARY e Fortran, a estrutura dos dados depende do interpretador utilizado. No que diz respeito `a codifica¸c˜ao todos os dados s˜ao declarados utilizando a pr´opria linguagem de programa¸c˜ao. Devido `a extens˜ao dos exemplos para estas codifica¸c˜oes, estes foram colocados nos anexos em

(63)

4

Codifica¸c˜

ao AMPL

4.1

Introdu¸

ao

Alguns problemas encontram-se formulados e escritos em AMPL, esta linguagem, de modela¸c˜ao alg´ebrica e com uma sintaxe semelhante `a nota¸c˜ao matem´atica de problemas de otimiza¸c˜ao, permite descrever e solucionar problemas de alta complexidade em larga escala de computa¸c˜ao matem´atica [15]. Projetada e implementada por Robert Fourer, David M. Gay e Brian W. Kernighan em 1985, tem apresentado grandes evolu¸c˜oes desde ent˜ao.

Os problemas est˜ao contidos em ficheiros com extens˜ao .mod e encontram-se separados em 3 partes: inicialmente s˜ao declaradas as vari´aveis e os parˆametros utilizados na formula¸c˜ao do problema; numa segunda parte ´e apresentada a fun¸c˜ao objetivo e fun¸c˜oes restri¸c˜ao, caso existam, e por fim s˜ao apresentados os valores das vari´aveis e dos parˆametros do problema.

Como ´e vis´ıvel na Figura 4.1, problema S353 da colec¸c˜ao Schittkowski, o problema come¸ca com a declara¸c˜ao dos parˆametros, sendo estes dados identificados pela palavra param. A declara¸c˜ao dos parˆametros pode ser feita de duas formas, apresentando o nome e o seu valor na mesma linha, ou apresentando apenas o nome, sendo o valor

(64)

38 CAP´ITULO 4. CODIFICAC¸ ˜AO AMPL

Figura 4.1 – Problema S353 codificado em AMPL

declarado numa parte posterior do ficheiro.

De seguida s˜ao declaradas as vari´aveis do problema, identificadas pela palavra var e da mesma forma que os parˆametros existem mais que uma forma destas serem declaradas. A forma mais simples apenas cont´em o nome da vari´avel sendo o valor inicial declarado na ´ultima parte do ficheiro, no entanto ´e poss´ıvel na mesma linha da declara¸c˜ao determinar o seu valor e, se existirem, as restri¸c˜oes simples associadas. A parte final do ficheiro, visto estar associada aos parˆametros e `as vari´aveis, e identificada pela palavra data apresenta os valores iniciais das vari´aveis e o valor dos parˆametros caso n˜ao sejam apresentados no momento de declara¸c˜ao, apresentando o nome da vari´avel ou do parˆametro seguido do seu valor.

Depois das vari´aveis, voltando atr´as na estrutura do ficheiro, identificada pela palavra

Imagem

Figura 1 – M´ınimo Local
Figura 2.1 – Movimento de reflex˜ ao (Fonte: [1])
Figura 2.2 – Movimento de Nelder-Mead (Fonte: [1])
Figura 2.3 – Funcionamento do M´ etodo dos Filtros (Fonte: [1])
+7

Referências

Documentos relacionados

Atualmente os currículos em ensino de ciências sinalizam que os conteúdos difundidos em sala de aula devem proporcionar ao educando o desenvolvimento de competências e habilidades

O termo extrusão do núcleo pulposo aguda e não compressiva (Enpanc) é usado aqui, pois descreve as principais características da doença e ajuda a

O contato repetitivo ou prolongado com o produto prejudica a secreção sebácea natural da pele e pode provocar dermite de contato não alérgica e/ou absorção através da pele.

Local de realização da avaliação: Centro de Aperfeiçoamento dos Profissionais da Educação - EAPE , endereço : SGAS 907 - Brasília/DF. Estamos à disposição

Somente na classe Aberta Jr e Sr, nas modalidades de Apartação, Rédeas e Working Cow Horse, que será na mesma passada dessas categorias e os resultados serão separados. O

forficata recém-colhidas foram tratadas com escarificação mecânica, imersão em ácido sulfúrico concentrado durante 5 e 10 minutos, sementes armazenadas na geladeira (3 ± 1

Discussion The present results show that, like other conditions that change brain excitability, early environmental heat exposure also enhanced CSD propagation in adult rats.. The

Para disciplinar o processo de desenvolvimento, a Engenharia de Usabilidade, também conceituada e descrita neste capítulo, descreve os métodos estruturados, a