• Nenhum resultado encontrado

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.

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

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.

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:

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.

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.

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.

´

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

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.

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.

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.

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.

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

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

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

4.2. INTERPRETADORES E SOLVERS DE CODIFIFCAC¸ ˜AO AMPL 39

express˜ao. As restri¸c˜oes s˜ao identificadas pela palavra subject to juntamente com o nome da restri¸c˜ao, sendo apresentada na linha seguinte a equa¸c˜ao da restri¸c˜ao.

Documentos relacionados