• Nenhum resultado encontrado

Interpretadores e Solvers de codififca¸c˜ ao AMPL

Existem 40 interpretadores de ficheiros AMPL publicados, todos eles utilizam diferentes algoritmos para a interpreta¸c˜ao e resolu¸c˜ao de problemas matem´aticos [20]. Esses algoritmos distinguem-se pelo tipo de problemas que resolvem e pelo m´etodo que usam e dividem-se em oito grupos, s˜ao eles:

• Linear (Simplex) - Problema com fun¸c˜oes e restri¸c˜oes lineares, utilizando o

m´etodo Simplex;

• Linear (Barreira)- Problema com fun¸c˜oes e restri¸c˜oes lineares, utilizando o

m´etodo de Barreira;

• Network - Problema contituido por uma rede de n´os interligados por caminhos,

utilizando o m´etodo Network Simplex;

• Quadr´atico - Problema com fun¸c˜oes quadr´aticas e restri¸c˜oes lineares, utilizando

o m´etodo Simplex ou Barreira;

• N˜ao Linear - Problema com fun¸c˜oes e restri¸c˜oes n˜ao lineares, utilizando v´arios

m´etodos como gradiente reduzido, quasi-newton, Lagrangiano aumentado e de ponto interior;

• Complementariedade - Problema com fun¸c˜oes e restri¸c˜oes lineares ou n˜ao, com

as condi¸c˜oes de complementariedade;

• Linear Inteiro - Problema com fun¸c˜oes e restri¸c˜oes lineares, com algumas ou

todas as vari´aveis de valores inteiros, utilizando o m´etodo de branch and bound ;

• N˜ao Linear Inteiro - Problema com fun¸c˜oes e restri¸c˜oes n˜ao lineares, com

algumas ou todas as vari´aveis de valores inteiros, utilizando o m´etodo de branch

40 CAP´ITULO 4. CODIFICAC¸ ˜AO AMPL

De seguida, s˜ao apresentados os interpretadores publicados no site oficial do AMPL [20].

ACRS

Desenvolvido em Fortran, utiliza um algoritmo de pesquisa directa, para problemas de otimiza¸c˜ao com restri¸c˜oes simples [21].

ALGENCAN

Desenvolvido em Fortran, permite a resolu¸c˜ao de problemas n˜ao lineares, utilizando um algoritmo de Lagrangiano Aumentado recorrendo ao algoritmo de GENCAN, para resolver os subproblemas. O GENCAN ´e um algoritmo em Fortran para minimizar fun¸c˜ao suaves com um elevado n´umero de vari´aveis [22].

BLMVM

Desenvolvido para resolu¸c˜ao de problemas n˜ao lineares, onde as vari´aveis tˆem limites simples, assume que o gradiente da fun¸c˜ao objetivo pode ser calculado. Este solver cria uma fun¸c˜ao quadr´atica em todo o espa¸co das vari´aveis utilizadas no c´alculo do gradiente. O algoritmo utilizado n˜ao necessita de calcular a segunda derivada, desta forma, pode ser aplicado quando a matriz Hessiana n˜ao ´e poss´ıvel de calcular [23].

Bonmin (Basic Open-source Nonlinear Mixed INteger programming)

Desenvolvido em C++, permite a resolu¸c˜ao de problemas com fun¸c˜oes e restri¸c˜oes n˜ao lineares, cont´ınuas e vari´aveis discretas [24].

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

BPMPD

Desenvolvido em C, ´e uma evolu¸c˜ao de um algoritmo de pontos interiores primal- dual, utilizado para problemas quadr´aticos convexos [25].

CBC

O COIN Branch and Cut (CBC) ´e um interpretador de problemas lineares e n˜ao lineares inteiros, escrito em C++. O CBC ´e principalmente utilizado como uma biblioteca para criar interpretadores personalizados de branch and cut [26].

CONDOR

Interpretador para fun¸c˜oes n˜ao-lineares cont´ınuas com restri¸c˜oes lineares e n˜ao- lineares [27].

CONOPT

Desenvolvido em conjunto pela AMPL Optimization LLC, respons´avel pela interface AMPL/CONOPT e ARKI Consulting & Development A/S, respons´avel pelo mecanismo de solu¸c˜ao, o CONOPT ´e um sistema de otimiza¸c˜ao de problemas n˜ao lineares com vari´aveis cont´ınuas [28].

CPLEX

Concebido para resolver problemas lineares inteiros, podendo estes serem puros (todas a vari´aveis s˜ao inteiras) ou mistos (algumas vari´aveis s˜ao inteiras e algumas s˜ao cont´ınuas). O m´etodo de Barreira implementado no CPLEX, embora originalmente criada para a resolu¸c˜ao de problemas lineares, tamb´em permite a resolu¸c˜ao de uma classe especial de problemas n˜ao lineares, nomeadamente, os problemas quadr´aticos. No entanto, CPLEX n˜ao resolve problemas gerais n˜ao lineares [29].

42 CAP´ITULO 4. CODIFICAC¸ ˜AO AMPL

DONLP2

Interpretador de problemas n˜ao lineares, criado pelo Professor Doutor Peter Spellucci, baseia-se num algoritmo de programa¸c˜ao quadr´atica sucessiva e numa matriz densa [30].

FilMINT

O FilMINT ´e um interpretador para problemas n˜ao lineares inteiros mistos e baseia- se no algoritmo de Quesada e Grossman. Este interpretador combina a framework branch-and-cut do MINTO, para problemas n˜ao lineares inteiros mistos, com o filterSQP usado para resolver os problemas n˜ao lineares que surgem como subproblemas no algoritmo [31].

FortMP

´

E um interpretador criado para resolver uma ampla gama de problemas lineares com vari´aveis separ´aveis, inteiras mistas, quadr´aticas e inteiras mistas quadr´aticas. Os principais algoritmos utilizados pelo FortMP s˜ao os Simplex Primal e Dual. Para problemas de grande dimens˜ao estes algoritmos s˜ao complementados por algoritmos de pontos interiores com base no m´etodo de Barreira. Para problemas inteiros mistos ´

e utilizado um algoritmo de branch and bound [32].

FSQP

Interpretador de problemas n˜ao lineares, criado por Craig Lawrence, L. Zhou Jian e Andr´e L. Tits, utiliza um algoritmo de programa¸c˜ao quadr´atica sucessiva, que avalia a fun¸c˜ao objetivo somente em pontos vi´aveis [33].

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

Gecode

Desenvolvido em C++, permite a interpreta¸c˜ao de problemas com restri¸c˜oes [34].

Gurobi

Permite a interpreta¸c˜ao de problemas lineares, quadr´aticos, quadr´aticos com restri¸c˜oes, inteiros mistos, inteiros mistos quadr´aticos e inteiros mistos quadr´aticos com restri¸c˜oes [35].

ILOG CP

O interpretador ILOG CP utiliza o interpretador IBM ILOG CPLEX CP para resolver problemas com restri¸c˜ao e o CPLEX para resolver problemas lineares, inteiros, inteiros mistos e quadr´aticos [36].

IPOPT

Escrito em C++ por Andreas W¨achter e Carl Laird, o IPOPT (Interior Point Optimizer) ´

e um interpretador para problemas n˜ao lineares em grande escala [37].

KNITRO

Trata-se de um interpretador de problemas lineares, n˜ao lineares e quadr´aticos, tanto convexos como n˜ao convexos. Disponibilizando trˆes algoritmos, ´e tamb´em utilizado para regress˜ao n˜ao-linear, problemas de complementaridade com restri¸c˜oes e problemas inteiros mistos, em particular inteiros mistos convexos. O KNITRO oferece interfaces para C, C++, Fortran, Java, Python, AMPL, AIMMS, GAMS, MPL, Mathematica, MATLAB, Microsoft Excel e LabVIEW [38].

44 CAP´ITULO 4. CODIFICAC¸ ˜AO AMPL

LANCELOT

Desenvolvido por Andrew Conn, Nick Gould e Philippe Toint. A sua finalidade ´e a resolu¸c˜ao de problemas de otimiza¸c˜ao n˜ao linear cont´ınuos. Permite a interpreta¸c˜ao de problemas com e sem restri¸c˜oes, problemas n˜ao lineares e n˜ao lineares de m´ınimos quadrados [39].

L-BFGS-B

L-BFGS-B ´e utilizado para problemas com restri¸c˜oes simples [40], ou seja, para os problemas onde as ´unicas restri¸c˜oes s˜ao da forma:

lBound ≤ x ≤ uBound (4.1)

LGO

O Lipschitz-continuous Global Optimizer (LGO) serve para a an´alise e resolu¸c˜ao de problemas n˜ao lineares, incorporando um conjunto de solucionadores eficientes de problemas n˜ao lineares globais e locais. Tamb´em pode lidar com pequenos modelos de programa¸c˜ao linear. LGO integra os algoritmos de branch and bound e do M´etodo de Barreira Progressiva [41].

LOQO

Resolve problemas lineares ou n˜ao lineares, convexos ou n˜ao convexos, com ou sem restri¸c˜oes. A ´unica limita¸c˜ao real ´e a necessidade das fun¸c˜oes, que definem o problema, serem suaves (nos pontos avaliados pelo algoritmo). Se o problema ´e convexo, LOQO encontra uma solu¸c˜ao global ´otima. Caso contr´ario, ele encontra uma solu¸c˜ao ´otima local pr´oxima de um ponto de partida dado [42].

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

LP SOLVE

O LP SOLVE ´e um interpretador de problemas lineares e n˜ao lineares inteiros mistos, baseado no m´etodo Simplex e no m´etodo branch and bound [43].

MINLP

Permite a interpreta¸c˜ao e resolu¸c˜ao de problemas inteiros mistos n˜ao lineares com restri¸c˜oes. MINLP implementa um algoritmo de branch and bound que implementa uma ´arvore cujos n´os correpondem a problemas n˜ao lineares com restri¸c˜oes. E´ depois utilizado o filterSQP para resolver os problemas n˜ao lineares que surgem da utiliza¸c˜ao do algoritmo de branch and bound [44].

MINOS

´

E um interpretador que permite a resolu¸c˜ao de pequenos e grandes problemas de otimiza¸c˜ao linear, com e sem restri¸c˜oes e n˜ao linear restrita. Baseia-se no m´etodo Simplex, no m´etodo Quasi-Newton, no m´etodo de redu¸c˜ao de gradiente e no m´etodo de Lagrange [45].

MINTO

O MINTO ´e um interpretador para problemas lineares inteiros mistos atrav´es de um algoritmo branch and bound. Ele tamb´em fornece a classifica¸c˜ao das restri¸c˜oes, pr´e-processamento, an´alise heur´ıstica primal e gera¸c˜ao de restri¸c˜oes [46].

MOSEK

Criado para resolver problemas de otimiza¸c˜ao lineares, quadr´aticos com ou sem restri¸c˜oes, n˜ao lineares convexos e inteiros mistos, pode ser utilizado a partir de

46 CAP´ITULO 4. CODIFICAC¸ ˜AO AMPL

v´arias linguagens de programa¸c˜ao, nomeadamente C, C++, C#, Delphi, Java e Python [47].

NPSOL

Foi desenvolvido por Philip Gill, Walter Murray, Michael Saunders e Margaret Wright, permite resolver problemas de otimiza¸c˜ao n˜ao lineares com restri¸c˜oes. Emprega um algoritmo de programa¸c˜ao quadr´atica sucessiva e ´e especialmente eficaz para os problemas n˜ao lineares, cujas fun¸c˜oes e os gradientes s˜ao dispendiosos de avaliar. As fun¸c˜oes devem ser suaves, mas n˜ao precisam ser convexas. NPSOL ´e implementado em Fortran 77 e destina-se a qualquer m´aquina com uma quantidade razo´avel de mem´oria e um compilador Fortran [48].

NSIPS

NSIPS ´e um interpretador de problemas SIP (A semi-infinite program), utiliza o pacote de software SIPAMPL e inclui quatro m´etodos pricinpais com algumas varia¸c˜oes, resultando em um total de sete m´etodos [49].

OOQP

Escrito na linguagem C++, o OOQP baseia-se num m´etodo primal-dual de pontos interiores, para a resolu¸c˜ao de problemas quadr´aticos convexos. Cont´em um c´odigo que pode ser utilizado para resolver uma variedade de problemas quadr´aticos estruturados, incluindo problemas quadr´aticos esparsos, problemas de regress˜ao Huber e problemas quadr´aticos com restri¸c˜oes vinculadas. OOQP tamb´em pode ser utilizada como uma estrutura para novas classes de problemas quadr´aticos. O seu design permite uma f´acil substitui¸c˜ao dos m´odulos de ´algebra linear, permitindo que diferentes pacotes de ´algebra linear padr˜ao possam ser experimentados [50].

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

PATH

´

E um interpretador de problemas de complementaridade n˜ao lineares, que ´e baseado no interpretador PATH criado pelo Professor Michael C. Ferris e alunos Steven P. Dirkse e Todd S. Munson. Utiliza o m´etodo de Newton para a resolu¸c˜ao dos problemas que interpreta [51].

PCx

O PCx ´e um interpretador de problemas lineares desenvolvido no Centro de Tecnologia de Otimiza¸c˜ao no Argonne National Laboratory e na Universidade Northwestern. Implementa uma variante do algoritmo de Mehrotra com a estrat´egia de corre¸c˜ao de ordem superior de Gondzio. Esta abordagem ´e a mais eficaz para programas lineares gerais. A maior parte do PCx ´e escrito na linguagem de programa¸c˜ao C [52].

PENNON

Desenvolvido para resolver problemas n˜ao lineares convexos e n˜ao convexos e problemas semi-estruturados. Baseia-se num m´etodo de Lagrange aumentado generalizado [53].

SNOPT

Criado por Philip Gill, Walter Murray e Michael Saunders, ´e um interpretador para resolver problemas de otimiza¸c˜ao lineares e n˜ao lineares de grande escala. ´E especialmente eficaz para os problemas n˜ao lineares, cujas fun¸c˜oes e os gradientes s˜ao dispendiosos de avaliar. As fun¸c˜oes devem ser suaves, mas n˜ao precisam de ser convexas [54].

48 CAP´ITULO 4. CODIFICAC¸ ˜AO AMPL

SOPT

´

E um interpretador eficiente para programas lineares, inteiros e n˜ao-lineares. Atualmente SOPT tem trˆes vers˜oes, SOPT-CP para problemas lineares e n˜ao lineares, SOPT-IP para problemas lineares e inteiros, e SOPT-SP (SOPT-IP e AMPL) [55].

TRON

O TRON ´e um interpretador para a resolu¸c˜ao de problemas de otimiza¸c˜ao com restri¸c˜oes simples de grande escala [56].

WSAT (OIP)

Utilizando um m´etodo de busca local para resolver os problemas interpretados, o WSAT (OIP) tem demonstrado ser eficaz em problemas de otimiza¸c˜ao inteiros com restri¸c˜oes de grande escala [57].

XA

XA ´e um interpretador da Sunset Software Technology, projetado para resolver problemas lineares inteiros mistos e quadr´aticos [58].

XLSOL

XLSOL permite interpretar e resolver problemas lineares, inteiros e n˜ao-linear [59].

Xpress

Xpress utiliza FICO XPRESS para resolver problemas inteiros, inteiros mistos, lineares e quadr´aticos [60].

5

Desenvolvimento e

Implementa¸c˜ao do

Interpretador

5.1

Introdu¸ao

O interpretador apresentado neste trabalho, desenvolvido em Java, tem como objetivo criar um problema em Java, a partir de um ficheiro onde este est´a contido. Desta formula¸c˜ao resultam os dados do problema como a fun¸c˜ao objetivo, fun¸c˜oes restri¸c˜ao, caso existam, e as vari´aveis. Numa primeira fase foi desenvolvido para interpretar problema codificados em AMPL, ap´os a sua implementa¸c˜ao e terem sido feitos testes surgiu a ideia de complementar o interpretador adicionando a descodifica¸c˜ao de ficheiros SIF, uma vez que esta codifica¸c˜ao disponibiliza os problemas teste da colec¸c˜ao CUTE e apenas ter sido encontrado um interpretador para esta codifica¸c˜ao. O interpretador ainda se encontra em desenvolvimento para esta codifica¸c˜ao, interpretando ainda s´o alguns dados do problema.

Documentos relacionados