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¸c˜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.