Instituto de Matemáti a Estatísti aeComputaçãoCientí a
Departamento de Matemáti a Apli ada
Otimização via Internet
Ri ardo de Oliveira Lopes Jr
MestradoemMatemáti aApli ada
Orientador: Prof. Dr. Fran is o A. M. Gomes Neto
Campinas
Dissertação de Mestrado defendida em 04 de agosto de 2010 e aprovada
Pela Banca Examinadora composta pelos Profs
.
Drs
.
AGALHÃESGOMES
N
ETO
Prof. (a). Dr (a)
.
A
U
RELIO RffiErRO LEITE DE OLIVEIRA
Prof. (a)
.
Dr (a). ERNES
ÁN GOLDBERG BIRGIN
Aomeu orientador, Chi o,pela onança, ajuda e pa iên ia innita.
Aosprofessores doIMECC que ontribuiramfortementeparaaminhaformação,entre
eles, Aurélio, Cheti,Laér io, Moretti, Sandrae Vera.
Ao meu grande amigo Gabriel, por todas as dis ussões, aronas, projetos
omparti-lhadose, prin ipalmente, amizade,desde a graduação.
Aos nobres amigos Bruno, Moiséis e Elias, grandes guras humanas, pela amizade e
estadiana Morféianos últimos anos.
AoVilamiu,atéadata,últimoamigoremanes entedoPredinho,pelaajudapréepós
defesa.
À CAPES, via programa PROEX, e ao DMA/IMECC, pelo indispensável
nan ia-mento noiní io doprojeto.
Aosmeuspais,Ri ardoeGisela,pelograndiosoesforçodespendidonaminhaformação.
Aomeu irmão Rodolfo,pelos ensinamentosemE onomia.
À minhanamorada,Amanda,pela ompreensãoeapoio,fundamentaisparaa
Este trabalho apresenta um sistema remotode resolução de problemas de otimização
atravésdainternet. O usuáriovisitaapáginadosistema,es olheoprograma de
otimiza-ção quedeseja utilizar,submete oseu problema e re ebe asoluçãona tela oupor orreio
eletrni o. Oobjetivodosistemaépopularizarasbibliote as omputa ionais
desenvolvi-das no país, assim omo atender àdemanda de pesquisadores e empresas por programas
de otimização. No momento, estão disponíveis os pa otes GENCAN e ALGENCAN. O
sistema permite que se use derivadas automáti as, geradas pelo pa ote Adol-C, aso o
programa exija o uso de derivadas e o usuário não possa forne ê-las. Uma la de
om-pilação e uma la de pro essamento ontrolam o uxo de submissões de problemas. O
usuáriopode visualizar essas las e an elar um trabalho submetido.
This work presents aremote system for solving optimizationproblems over the
inter-net. The user visits the system website, hooses the optimization solver and submits a
problem. The solutionmay be visualizedin the browser window orby email. The
obje -tive of the system is topopularize the solvers developed by Brazilianresear hers, aswell
as to meet the demand of resear hers and ompanies for optimizationprograms. So far,
thepa kagesGENCANandALGENCANareavailable. Ifthesolverneedsthederivatives
of the fun tions and the user is not able to supply them, the system permits the use of
automati diferentiation, generated by the Adol-C pa kage. A ompilationqueue and an
exe utionqueue ontrol the server submission ow. The user may visualize these queues
and an el asubmitted job.
Introdução 1
1 Des rição geral do sistema 5
2 Entrada de dados 9
2.1 GENCAN . . . 10
2.2 ALGENCAN . . . 18
2.3 Ver las . . . 33
2.4 Ver resultado de trabalho. . . 33
2.5 Can elar trabalho . . . 34
2.6 Es reva para oÓtimo . . . 34
3 Fun ionamento do sistema 37 3.1 Armazenamentode dados . . . 37 3.1.1 Cria trabalho . . . 38 3.1.2 Baixa arquivos . . . 38 3.1.3 Gera parâmetros . . . 38 3.1.4 Cria dados.txt . . . 39
3.1.5 Envia mensagem eletrni a. . . 39
3.1.6 Insere nala . . . 39
3.2 Compilação . . . 39
3.2.1 Lêdados . . . 40
3.2.2 Ini iaparâmetros . . . 40
3.2.3 Congura programa de otimização . . . 40
3.2.4 Gera derivada automáti a . . . 41
3.2.5 Compila . . . 41
3.2.6 Gera exe utável . . . 41
3.3 Exe ução . . . 42
3.4 Filas . . . 42
3.5 Diferen iação automáti a . . . 43
3.5.3 Testes om oAdol-C . . . 54
3.6 Visualizaçãodos resultados . . . 56
3.7 Restabele imento doÓtimo . . . 58
3.8 Can elamento de trabalho . . . 58
4 Exemplo de submissão de um problema 59 5 Como inserir um novo programa de otimização 69 5.1 Página do programa: solver.html . . . 69
5.2 Captura dos dados: solver. gi . . . 70
5.3 Compilação egeração doarquivo exe utável: omp_solver.pl . . . 76
5.4 Página de saída: gerahtml_solver.pl . . . 79
Con lusão 81
Apêndi e A - Estrutura de diretórios e arquivos 83
Apêndi e B - Funções do Adol-C usadas no sistema 89
A otimização é um interessante ramo da matemáti a apli ada, dada a sua apli ação
àsoluçãodeproblemasligadosàprodução,àengenharia,àe onomiaeàs iên iasnaturais.
Na UNICAMP, um gruporelativamentegrande de professores tem sededi ado ao
de-senvolvimentoteóri oeàimplantação omputa ionalde programasvoltadosàsoluçãode
problemas de otimização. O mesmo a onte e em outras universidades do país, omo a
USP e a UFRJ. Entretanto, a maioria desses programas não está fa ilmente disponível
para ospesquisadores eas empresas que poderiamutilizá-los.
Alguns dos programas simplesmente não possuem uma página na internet, de forma
que sua visibilidadeé quase nula. Outros, embora disponíveis naweb, não possuem uma
interfa e simples, desestimulando o seu uso. Somando-se a issoo fato de que muitos dos
poten iais usuários temem utilizar programas a adêmi os nasolução de problemas reais
sem antes testá-los om modelos pequenos, hega-se aos motivos prin ipais para o baixo
uso dos pa otes de otimização desenvolvidos pelos pesquisadores brasileiros.
Emde orrên iadisso, boapartedotempoedotrabalhogastosnodesenvolvimentode
algoritmosque, emgeral, são bastante e ientes, é desperdiçada por falta de integração
entre aqueles que desenvolvem os programas e os usuários. Para eliminar essa la una,
neste projeto foi riado um sistema brasileiro voltado para a otimização de problemas
através dainternet.
Este sistema trazinúmerasvantagens tantopara osusuáriosdos programas de
otimi-zação, omo para seus desenvolvedores.
Aosusuários,permite-se es olher, dentre vários programas,aquele quemelhor se
ade-qua às ara terísti as do problema a ser resolvido. Também é possível determinar
fa- ilmente se um programa é ou não simples de usar e onável antes de sua adoção. O
usuáriotemaindaa omodidadedefazertodosestestestessemane essidadede arregar,
instalar e ler os manuais dos programas que almeja utilizar. Por m, muitos programas
dessas derivadas, geradaspelo pa oteAdol- (vide[9℄).
Jáparaospesquisadoresdasuniversidades, osistematrazumaumentodavisibilidade
dosseusprogramas,alémde ontribuirparaqueestessetornemmaisrobustos,emfunção
da experiên iaque será adquirida om sua apli açãoa problemas variados.
Esse novo sistema riado, nomeado Ótimo, deve servir omo ponto de partida para
um sistema brasileiro de otimização. Atualmente, este sistema ontém dois programas
de otimização: O GENCAN, espe ializado em problemas de programação não-linear de
grande porte om restrições de aixa e o ALGENCAN, para problemas de programação
não linear de grande porte om restrições gerais. Osistema foi desenvolvido de maneira
a tornarrelativamentefá ila in lusãode novos programas. Oobjetivo, a médioprazo, é
disponibilizarnovos programasno sistema.
Um bom sistema dessa natureza, hamado NEOS server (vide [5℄, [6℄ e [7℄) está
dis-ponível em http://www-neos.m s.anl.go v/ne os. Esse sistema, bastante ompleto e
e iente, serviu omo inspiração para o Ótimo.
Emseguida,são des ritos os próximos apítulosdeste trabalho.
Capítulo 2
Neste apítulo, é feita uma des rição resumida dos omponentes bási os, para que
o leitor tenha um visão geral do sistema. Também omenta-se sobre os requisitos de
hardware e software para o servidor e o usuário, a m de garantir o bomfun ionamento
do sistema.
Capítulo 3
Um apítulonoqualsão des ritas aspáginasdosistema,in luindoasfunçõesque
de-vemserenviadaseosparâmetrosaserem onguradospara adaprogramadeotimização,
assim omo os valores que serão onsiderados padrão.
Capítulo 4
Aqui, as omponentes do sistema são des ritas om mais detalhes. In lui ainda, um
Capítulo em que é feita a simulaçãodo envio de um problema aoÓtimo, in luindoo
ódigo dos arquivos enviados e aspáginas que são exibidas ao usuário durante o
pro es-samento de seu trabalho.
Capítulo 6
Este apítulodes reve osarquivosque deverão ser riados ealterados para a in lusão
de um novo programa de otimização noÓtimo.
Capítulo 7
Capítulo ontendo a on lusão eos próximospassos.
Apêndi es
O Apêndi e A ontém osarquivos e diretóriosdosistema. Já oApêndi eB, exibeas
Des rição geral do sistema
O sistemaÓtimo serve essen ialmente omo uma interfa e via internet entre os
pro-gramas de otimização e os usuários, sendo responsável pela omuni ação entre ambos.
Para tal, exige-se queos usuáriosdo sistemapossuamos seguintes pré-requisitos:
•
Umnavegadorde internet omoplug-inJavaS riptinstalado. Éatravésdo navega-dorqueousuárioentranosistema,es olheumprogramaeexer esuas preferên ias.O sistema é ompatível om os navegadores MozillaFirefox, Nets ape Navigator e
Windows InternetExplorer. Oplug-inJavaS ripténe essário, jáque,nomomento
da submissão de trabalhos, as es olhas feitas pelos usuários mudam as opções dos
programasdinami amente,oque, nosistema,éfeito atravésde funçõeses ritas em
JavaS ript. Noteque osnavegadores atuais já vêm om esse plug-in instalado.
•
Umendereçoeletrni o (op ional). Comele, ousuáriotem aopção dere eberuma noti açãoinformando otérmino de seu trabalho.Como o usuário enviaráapenas arquivos de tipotexto ao sistema ( om a informação
das funções que deseja otimizar) e, do mesmo modo, o sistema exibirá apenas arquivos
texto ao usuário ( ontendo a solução), a velo idade da onexão será pou o relevante na
submissão de trabalhos. Assim, mesmo usuários om uma onexão lenta não terão
pro-blemaspara submeter seus trabalhos.
OsistemaÓtimoestáhospedadoemumservidorquetemoUNIX/Linux omosistema
opera ionale opera om o auxíliodos seguintes softwares:
•
Servidorde web Apa he Web Server. Para sabermais sobre oApa he, veja [11℄.•
Compilador de perl. Todo o sistema está es rito na linguagem Perl, devido as fa ilidades dessa linguagem para lidar om adeia de ara teres e páginas HTML.•
f2 ,umprogramaque onvertefunçõeses ritasemFortranparafunçõesemC/C++. Esse programa é ne essário para que o sistema onsiga al ularas derivadasauto-máti asdefunçõeses ritasemFortran,jáqueopa otede diferen iaçãoautomáti a
derivaapenas funções es ritas emC++.
•
sendmail,usado para enviar mensagens eletrni as aos usuários.•
Compiladores de Fortran (g77 e gFortran), C (g ) e C++ (g++), que são usados pelos programasde otimização quese en ontram no sistema.Para enviar um trabalho, o usuário deve a essar a página dosistema, es olher o
pro-grama de otimização, denir os parâmetros e então submeter seu problema. Após a
submissão, esse trabalho passará por uma série de etapas ontroladaspelosistema até a
geração dapágina om osresultados. A Figura 1.1exibeo uxo de dados nosistema.
Figura 1.1: Fluxo de dados no sistema
O usuário tem a esso à fase de entrada de dados (envia seu trabalho), às las
(vi-sualização das las e an elamento do trabalho) e nalmente, à fase de visualizaçãodos
resultados.
Osistemaintervêmnopro essoemtodasasetapas queseen ontram entre o
armaze-namentode dados eaapresentaçãodasoluçãodoproblema. Otrabalhopassa pelaetapa
de diferen iação automáti asomentese ousuário tiver a ionadoessa opção no momento
dasubmissão. Porm, otrabalhopode ir diretamenteda etapade ompilação para àde
detalhada éapresentada nos apítulos3 e4.
•
Entrada de dadosA página ini ial é responsável pelo primeiro ontato do usuário om oÓtimo.
Ela ontémumalista omosprogramasdeotimizaçãodisponíveiseinformações
a respeito do sistema. Através dela, o usuáriopode entrar em ontato om os
administradores, visualizar o resultado de seu trabalho, an elar seu trabalho
ou aindaa ompanhar o andamento das las.
As páginasdos programas de otimização ontêm informaçõesespe í as sobre
o programae um formuláriopara queos usuáriospossam enviarseus arquivos
e es olher seus parâmetros.
•
Armazenamentode dadosPara ada trabalhosubmetido, é gerado um nome e uma senha. Em seguida,
uma pasta é riada no sistema om o nome do trabalho. Nessa pasta, são
armazenados todos os arquivos einformaçõesforne idaspelousuário.
•
FilasUma la de trabalhos é ne essária a m de evitar que o fun ionamento do
sistema seja interrompido devido ao ex esso de submissões simultâneas. No
entanto, o emprego de uma úni a la é inadequado, pois um usuário poderia
esperar por horas para ser avisado pelo sistema que seu problema tinha um
erro de ompilação. Para evitar essa situação, dado que geralmente o tempo
de ompilação é inferior ao de exe ução, foram riadas duas las no sistema.
Uma ex lusiva para ompilação,e outra ex lusiva para exe ução.
•
Diferen iaçãoautomáti aOsistemausaopa oteAdol-Cparao ál ulodederivadas. Essepa ote al ula
derivadas de funções es ritas em C/C++. O sistema também pode al ular
derivadas de funçõesem Fortran. Para tal,antes de exe utar o Adol-C, usa o
programa f2 , que onverte uma função em Fortranpara C.
•
CompilaçãoO sistema identi a as linguagens emque foram es ritas as funções enviadas,
ompilaestas funções e,emseguida,gera o arquivoexe utável aoligá-las om
•
Exe uçãoOsistema rodao arquivo gerado nafase de ompilação.
•
Visualizaçãode resultadosPelo Navegador: Quando um trabalho é nalizado, uma página HTML é
ge-rada om a solução en ontrada. Caso a solução não tenha sido en ontrada, a
página onterá a mensagem de erro geradapelo ompiladorou peloprograma
de otimização. De posse do nome e senha do trabalho (informações que são
enviadas ao usuário na tela, no ato da submissão), o usuário pode a essar a
páginaderesultados. Se nãohouverlas eoproblemadousuárioforresolvido
rapidamente, a página ontendo a solução será aberta instantaneamente no
navegadordo usuárioapós asubmissão.
Por orreio eletrni o: O usuário que preen her o ampo email, na página
doprograma de otimização, re eberá duas mensagens dosistema. A primeira,
re ebida no ato da submissão, informa o nome e a senha do usuário e ontém
links paravisualizaçãodas las e an elamentode trabalhos. A segunda
men-sagem, aser re ebida após o términodo trabalho, informa ao usuárioque seu
Entrada de dados
Neste apítulo, são exibidas e omentadas as páginas web que são responsáveis pela
omuni açãodosistema omousuário. Sãodes ritas, in lusive,aspáginasdosprogramas
de otimização, que ontêm informaçõesde omosubmeter um problema.
Para auxiliar o usuário na submissão de seus trabalhos, foram riadas funções em
JavaS ript que tornam as páginas dinâmi as, modi áveis pelo usuário, o que também
garante a validação dos arquivos enviados. Tais funções en ontram-se no arquivo
fun- oes.js e são omentadas aolongo deste apítulo.
Na página ini ial, o usuário en ontra uma breve apresentação do Ótimo e o seguinte
esquema de links para a essar as outraspáginas dosistema:
•
Programas de otimizaçãoGENCAN: Problemas de programação não linearde grande porte om
restri-ções de aixa.
ALGENCAN1.0: Problemasdeprogramaçãonãolineargeraisdegrandeporte.
ALGENCAN2.2: Problemasdeprogramaçãonãolineargeraisdegrandeporte.
•
Trabalhos VerlasVerresultado de trabalho
Can elar trabalho
•
Atendimentoao usuário Es revapara o ÓtimoO GENCAN é um programa, es rito em Fortran, para a resolução de problemas de
programaçãonãolinear omrestriçõesde aixa, supondoadiferen iabilidadedasfunções.
Assim, eleresolve problemas dotipo:
min
f
(x)
suj. a
l
i
≤ x
i
≤ u
i
,
i
= 1, .., n,
tal que
x
i
, l
i
, u
i
∈ R
,f
: R
n
→ R
OprogramafoipropostoeimplantadoporBirgineMartínez[3℄,em2002. Trata-sede
um algoritmoqueusa ométododas restriçõesativas, ujoprin ípioémanterabus apela
solução em uma mesma fa e, enquanto essa fa e for promissora. A bus a no interior da
fa e é realizada onsiderando o problema irrestrito ujas variáveis são as variáveis livres
dessa fa e. Assim, as iterações do algoritmo usado para resolver o problema irrestrito,
que pode ser do tipo Newton Trun ado ou Quase Newton, devem onduzir a um ponto
no qualo gradiente interno se anulaoudevem parar de maneira abrupta na fronteira da
fa e. Quando o teste padrão indi aque a fa e deve ser abandonada,GENCAN emprega
uma iteração dométodode Gradiente Projetado Espe tral (SPG).
OALGENCAN, que será expli ado napróxima seção, usa o GENCAN para resolver
seus subproblemas. Assim, atualmente, o GENCAN é disponibilizado pelo seus
desen-volvedores dentro do pa ote do ALGENCAN, não podendo ser arregado separamente.
Entretanto, dado que o GENCAN é mais simples de usar que o ALGENCAN, para ns
didáti os(tantoparausuários omoparanovosadministradores),introduziu-seospa otes
separadamente nosistema Ótimo.
No Ótimo, para resolver seu problema om o GENCAN, o usuário deve enviar ao
sistema:
1. Uma rotina que forneça o número de variáveis do problema, um ponto ini ial e os
limitantesinferioresesuperiores. Ousimplesmenteforne eradimensão, asoprera
utilizar valores padrãopara os demaisdados.
2. Uma rotinaque avalie afunção objetivo.
porum vetor. Ou ainda, uma rotinaque avalie simplesmentea Hessiana dafunção
objetivo.
5. Finalmente, os valores dos parâmetros do programa. Caso prera não forne ê-los,
valores padrãosão usados.
As rotinas forne idas devem estar es ritas em Fortran, C ou C++, sendo possível
enviararquivos de diferentes linguagens emuma mesmasubmissão. Abaixo,seguea
des- rição de ada rotina.
1. Rotina rela ionada a dimensão, ponto ini ial e limitantes:
Cabeçalhoem Fortran:
subroutine inip(n,x,l,u)
integer n
double pre ision x(n),l(n),u(n)
Cabeçalhoem C/ C++:
void inip(int* n,double* x,double* l,double* u)
Parâmetros de saída:
n : inteiro -número de variáveis.
x(n): real om pre isãodupla - vetor ponto ini ial(op ional).
l(n) : real om pre isãodupla -vetor de limitantesinferiores (op ional).
u(n) : real om pre isãodupla - vetor de limitantes superiores (op ional).
De posse das informaçõesexibidas a ima, o usuário já pode enviar aprimeira função
aosistema. Para tanto,háum amponapáginanoqualdeve-se forne eralo alizaçãodo
arquivo a ser enviado. O usuário tambémtem a opção de ignorar o envio deste arquivo,
forne endo em um outro ampo, a dimensão n do problema. Neste aso, aos demais
parâmetros são atribuídos osseguintes valores:
l
i
= menos
_inf
i
= 1..n
u
i
= mais
_inf
i
= 1..n
real armazenado pelo ompilador.
Ousuáriotemaindaaopçãode enviarafunçãoinip semforne eralgunsparâmetros
(ex eton). Neste aso,osvalorespadrãolistadosa imasãousados. Mesmoassim,todos
os parâmetros devemser de larados.
Quando o usuário preen he o ampo inip, automati amente o sistema desabilita o
ampo n. A função JS3 em fun oes.js é responsável por essa validação. Do mesmo
modo, o sistema desabilita o ampo inip quando o ampo n é sele ionado (função
JS4). Essas funções, es ritas em JavaS ript,deixam mais laropara o usuárioquais
ar-quivosdevemserenviados, alémdediminuirapossibilidadede erroporenviode arquivos
onitantes.
Finalmente, seousuáriotentarsubmeter sempreen her ambosos amposinip en,
um alertaéexibido indi andoafaltadoarquivoeimpedindoasubmissão(função JS2).
2. Rotina que al ula a função objetivo:
Cabeçalho emFortran:
subroutine evalf(n,x,f,flag)
integer n,flag
double pre ision x(n),f
Cabeçalho emC /C++:
void evalf(int* n,double* x, double* f,int* flag)
Parâmetros de entrada:
n : inteiro -número de variáveis.
x(n) : real om pre isãodupla -ponto orrente.
Parâmetros de saída:
f : real om pre isão dupla -valordafunção objetivo emx.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função e zero em aso ontrário.
Respeitando as de larações a ima, basta o usuário forne er a lo alizaçãodo arquivo
no ampo pedido para ompletar o envio da função. Obviamente, o envio desta rotina é
3. Rotina que al ula o gradiente da função objetivo:
O usuário pode es olher entre enviar o arquivo om a função, usar aproximação por
diferenças nitas (forne idaspelopróprio GENCAN), ou ainda, usar um pa ote de
dife-ren iação automáti a (veja a Seção 3.5). O onteúdo da página muda a ada vez que o
usuário tro ade opção, a m de exibir informações referentes à opção sele ionada. Essa
mudança é feita pela função JS6. Caso o usuário opte por enviar a função, a mesma
deve seguiro formato espe i ado abaixo:
Cabeçalhoem Fortran:
subroutine evalg(n,x,g,flag)
integer n,flag
double pre ision x(n),g(n)
Cabeçalhoem C/ C++:
void evalg(int* n,double* x, double* g,int* flag)
Parâmetros de entrada:
n: inteiro - número de variáveis.
x(n): real om pre isãodupla - ponto orrente.
Parâmetros de saída:
g(n) : real om pre isãodupla -gradientedafunção objetivoem x.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função ezero em aso ontrário.
4. Rotinasqueenvolvemasderivadasde segundaordemdafunçãoobjetivo:
O usuário pode es olher entre enviar o arquivo om a função que al ula o produto
daHessiana dafunção objetivo porum vetor, ouum arquivoque al ulasomente a
Hes-siana. Pode, ainda,usar o pa ote de diferen iação automáti a para o ál ulo doproduto
Hessiana-vetor oupara o ál ulosomente daHessiana. Finalmente, pode usar
aproxima-çãopordiferençasnitas. Novamente, o onteúdodapáginamuda adavez queousuário
tro ade opção (segundo afunção JS7).
Caso ousuárioopte por enviarafunção que al ulaoproduto daHessiana dafunção
Cabeçalho emFortran: subroutine evalhlp(n,x,p,hp,goth,flag) integer n,flag double pre ision x(n),p(n),hp(n) logi al goth Cabeçalho emC /C++:
void evalhlp(int n,double *x,double *p,double *hp,int *goth,int *flag)
Parâmetros de entrada:
n : inteiro -número de variáveis.
x(n) : real om pre isãodupla -ponto orrente.
p(n) : real om pre isãodupla - vetor a ser multipli adopelaHessiana.
goth: lógi o(.true. ou.false.) emFortraneinteiro(1ou0)emC-parâmetrousadopara
indi ar se houve alteração no ponto orrente. O algoritmo de otimização atribui o valor
false toda vez que o ponto orrente é modi ado. Se o valor de entrada for false, o
usuáriopode salvaraHessiana emum blo odevariáveisglobais( ommon stru ture,no
Fortran)efazergoth re ebertrue. Sendo assim,épossível usara hamadanovamente
sem quehaja ne essidadede re al ular aHessiana.
Parâmetros de saída:
hp(n) : real om pre isãodupla - produtoda Hessiana pelovetor.
goth : lógi o (.true. ou .false.) emFortran einteiro(1 ou0) emC -verdenição a ima.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a exe ução da
função e zero em aso ontrário.
Caso ousuário opte por enviara função que al ulaa Hessiana dafunção objetivo, a
mesma deve seguir oformato espe i ado abaixo:
Hessiana da função objetivo:
Cabeçalho emFortran:
subroutine evalh(n,x,hlin,h ol,hval,nn zh, flag )
integer n,hlin(*),h ol(*),nnzh,fla g
double pre ision hval(*),x(n)
int* flag)
Parâmetros de entrada:
n: inteiro - número de variáveis
x(n): real om pre isãodupla - ponto orrente
Parâmetros de saída:
nnzh : inteiro - número de elementos não nulos da Hessiana (somente a parte
trian-gular inferior).
hlin(nnzh) : inteiro - índi es das linhas dos elementos não nulos da Hessiana.
h ol(nnzh) : inteiro - índi es das olunas dos elementosnão nulos daHessiana.
hval(nnzh) : real om pre isão dupla -valoresdos elementosnão nulos daHessiana.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função ezero em aso ontrário.
Essa representação dos elementos não nulos damatriz por oordenadas é omum nos
programasdeotimização,sendoútilprin ipalmenteparatornarmaise ienteasoperações
omputa ionais ommatrizesesparsas. Comoexemplo,suponhaqueamatrizabaixodeva
ser representada no formatomen ionado.
H =
7 5
5 0
ComoasmatrizesHessianasenviadasserãosimétri as(dadoqueassegundasderivadas
dafunção objetivo são ontínuas, por premissa doalgoritmo de otimização), é su iente
armazenarapartetriangularinferior. Assim, nesteexemplo,apenasoselementos7(linha
1, oluna1)e5(linha2, oluna1)pre isamserarmazenados. EmFortran,o ódigoseria:
nnzh = 2 hlin(1) = 1 h ol(1) = 1 hval(1) = 7 hlin(2) = 2 h ol(2) = 1 hval(2) = 5
Osparâmetrossão onguradosdiretamentenapágina,atravésde amposdetextodo
formuláriode submissão. Abaixo,estãoosparâmetrosdoGENCAN omseus respe tivos
valores padrão. Entre parênteses, onsta o nome do ampo na versão sem detalhes da
página doGENCAN (veja pág 17):
•
Usar pre ondi ionador para os gradientes onjugados (o pre ondi ionador é uma orreção quase-Newton da aproximação Gauss-Newton da Hessiana, onforme [4℄)(pre ond): Sim.
•
Tolerân ia de otimalidade para a norma innito do gradiente projetado (epsopt): 0.00001.•
Número máximo de iterações (maxtotit): 10000.•
Número máximo de avaliações dafunção objetivo (maxtotf ): 100000.•
Número de omponentes dos vetores exibidos na solução detalhada (veja próximo parágrafo)(n omp): 5.Além das opções a ima, através de um botão na página, é possível gerar uma saída
detalhada om informaçõessobre asiterações. O usuário pode es olher entre uma saída
apenas om informaçõesbási assobre asiteraçõesouainda uma saídaque forneça,além
das informaçõesbási as, informaçõesdas bus as linearesedo ál ulodadireçãoem ada
iteração interna. A função JS10 é a responsável por exibir as informações para ada
tipo de saída es olhida.
Casoo usuáriodeseje salvarosparâmetros listadosa ima, parapoder usá-losem
tra-balho posterior, basta a ionar a opção salvar parâmetros. Atente que, para posterior
visualização dos parâmetros salvos, o usuário deve habilitara opção a eitar ookies do
seu navegador. A função JS13 é a responsável por re uperar os dados salvos em uma
submissão, ou seja, é responsável por ler os ookies. No entanto, os ookies não são
ge-rados por uma função JavaS ript, e sim por meio dos arquivos CGI responsáveis pelo
armazenamento de dados, oque será visto mais adiante.
Porm,oúltimo ampoquepodeser preen hidoéore eberosresultadosviaemail.
Ao preen hê-lo, o usuário re eberá duas mensagens ao longo do pro essamento de seu
trabalho.
No topo da página do GENCAN, também há um link denominado ver página sem
detalhes quelevaauma outrapáginade submissãodoGENCAN,quenão ontém
Essa páginaé ontroladapeloarquivofun oes_det.js, ujas funçõessão semelhantes às
jádes ritasemfun oes.js. NaFigura2.1,segueapáginasemdetalhesparaoGENCAN.
OALGENCAN é um programa, es rito emFortran,para resolução de problemas
ge-rais de programaçãonão linear.
Assim, o ALGENCANresolve problemas dotipo:
min
f(x)
sujc
i
(x) = 0
i
∈ I,
g
j
(x) ≤ 0
j
∈ D,
l
i
≤ x
i
≤ u
i
,
i
= 1, .., n
tal quex
i
, l
i
, u
i
∈ R
,f, c
i
, g
j
: R
n
→ R.
I
: Conjunto das restrições de igualdade.D
: Conjuntodas restriçõesde desigualdade.Ométodoutilizado pelo programa é do tipo Lagrangiano Aumentado, ujoprin ípio
onsiste emgerar uma sequên ia de minimizações(aproximadas) dafunção Lagrangiano
Aumentado, sujeitas somente àsrestriçõessimples doproblema. As restrições que não
são simples são introduzidas na função Lagrangiano através de termos de penalização,
de modo que a minimização do Lagrangiano om as restrições simples possa ser
rea-lizada por um algoritmo espe ializado. No ALGENCAN, as restrições simples são as
restriçõesde aixaeoalgoritmoespe ializadoutilizadopararesolvertaissubproblemasé
oGENCAN(men ionadonaseçãoanterior). Se, entreduasminimizaçõesdoLagrangiano
(iterações externas), não houver progresso emtermos de admissibilidadeou
omplemen-taridade, oparâmetrode penalizaçãoéaumentado. Caso ontrário, ovalordoparâmetro
permane e omesmo. Para mais detalhes, veja [1℄ e[2℄.
NoÓtimo,para resolverseu problema om o ALGENCAN 1
,ousuário deve enviarao
sistema:
1. Uma rotina que forneça a dimensão do problema, o ponto ini ial, os limitantes
inferioresesuperiores,onúmeroderestrições,valoresini iaisparaosmultipli adores
de Lagrange, o tipo de ada restrição (igualdade ou desigualdade) e informações
sobre alinearidadedas restrições. Op ionalmente, épossívelforne ersimplesmente
a dimensão e onúmero de restrições, aso se prerautilizar osvalores padrão.
1
ainda,uma úni a rotina que avaliea função objetivo eas restrições.
3. Op ionalmente, uma rotinaque avalieo gradienteda função objetivo euma rotina
que avalie os gradientes das restrições. Ou ainda, uma úni a rotina que avalie o
gradienteda função objetivo eos gradientes das restrições.
4. Op ionalmente,uma rotina queavaliea Hessiana doLagrangianomultipli adapor
um vetor, ou uma rotina que avalie a Hessiana do Lagrangiano, ou ainda, rotinas
separadas que avaliem aHessiana da função objetivo ea Hessiana das restrições.
5. Finalmente, os valores dos parâmetros do programa. Caso o usuário prera não
forne eresse parâmetros,valores padrãoserão usados.
As rotinas forne idas devem estar es ritas em Fortran, C ou C++. Diferentemente
do GENCAN, todas rotinas devem estar es ritas na mesma linguagem. Abaixo, segue a
des rição de ada rotina.
1. Rotina rela ionada a dimensão, valores ini iais, limitantes e restrições:
Cabeçalhoem Fortran:
subroutine inip(n,x,l,u,m,lambda,equat n,li near )
integer n,m
double pre ision x(n),l(n),u(n),lambda(m)
logi al equatn(m),linear(m)
Cabeçalhoem C/ C++:
void inip(int* n,double** x,double** l,double** u,int* m,double** lambda,
int** equatn,int** linear)
Parâmetros de saída:
n: inteiro - número de variáveis.
x(n): real om pre isãodupla - ponto ini ial(op ional).
l(n) : real om pre isãodupla - vetor de limitantesinferiores (op ional).
u(n) : real om pre isãodupla - vetor de limitantes superiores (op ional).
m: inteiro - número de restrições (sem in luir as analizações).
lambda(m): real om pre isãodupla -estimativaini ialdos multipli adoresde Lagrange
(op ional).
equatn(m) : lógi o(.true. ou.false.) emFortrane inteiro (1ou 0)emC - indi ase ada
restriçãoé de igualdade (.true. ou1)ou de desigualdade (.false. ou0) (op ional).
De posse das informações exibidas a ima, ousuário já pode enviar a primeirafunção
ao sistema. Para tal, há um ampo na página no qual se deve forne er a lo alizaçãodo
arquivo a ser enviado. Ousuário também tem a opção de ignorar oenvio deste arquivo,
preen hendo doisoutros ampos. Oprimeirorefere-seadimensão eosegundo aonúmero
de restrições do problema. Neste aso, os parâmetros são ini iados om os seguintes
va-lores:
l
i
= menos
_inf
i
= 1, .., n
u
i
= mais
_inf
i
= 1, .., n
x
i
= 0
i
= 1..n
lambda
j
= 0
j
= 1, .., m
equatn
j
= f alse
j
= 1, .., m
linear
j
= f alse
j
= 1, .., m
de forma quemenos_inf emais_inf são, respe tivamente, o menore omaior número
real armazenado pelo ompilador.
Ousuário tem ainda aopção de enviar a função inip sem ini iar alguns parâmetros
(ex eton em). Para osparâmetrosnãoenviados,osvalorespadrãolistadosa imasão
usados. Mesmo assim, todos os parâmetros devemser de larados.
DeformaanálogaaoGENCAN,noALGENCAN,quandoousuáriopreen he o ampo
inip,osistemadesabilitaautomati amenteos amposn em. AfunçãoJS3 em
fun- oes.js é reponsável por essa validação. Do mesmo modo, o sistema desabilitao ampo
inip quando os ampos n e m são sele ionados (função JS5). Essas funções em
JavaS riptdeixam mais laro para o usuárioquais arquivos devemser enviados, além de
diminuira possibilidade de erro por envio de arquivos onitantes.
Finalmente,seousuáriotentasubmeterseuproblemasempreen heros amposinip,
n em,umalertaéexibidoindi ando afaltadoarquivoeimpedindoasubmissão
(fun-ção JS1).
2. Rotinas que al ulam a função objetivo e as restrições:
O usuário pode es olher entre enviar rotinas separadas para o ál ulo da função
problema sem ter enviado nenhuma delas.
Caso o usuárioopte porenviar separadamenteas duas rotinas, deve seguiro formato
espe i ado abaixo: Função objetivo Cabeçalhoem Fortran: subroutine evalf(n,x,f,flag) integer n,flag double pre ision x(n),f Cabeçalhoem C/ C++:
void evalf(int* n,double* x, double* f,int* flag)
Parâmetros de entrada:
n: inteiro - número de variáveis.
x(n): real om pre isãodupla - ponto orrente.
Parâmetros de saída:
f : real om pre isãodupla - valordafunção objetivoem x.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função ezero em aso ontrário.
Restrições Cabeçalhoem Fortran: subroutine eval (n,x,ind, ,flag) integer n,ind,flag double pre ision x(n), Cabeçalhoem C/ C++:
void eval (int n,double* x,int ind,double* ,int* flag)
Parâmetros de entrada:
ind : inteiro - índi e darestriçãoa ser al ulada.
Parâmetros de saída:
: real om pre isãodupla - valordaind-ésimarestrição emx.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função e zero em aso ontrário.
Notequeeval al ulaapenasumarestrição, ujooíndi eind épassadonaentrada.
Porexemplo, suponha quese deseje odi ar eval para as seguintes restrições:
c
1
(x) = x
2
1
+ x
2
c
2
(x) = 2x
2
O tre ho do ódigo, em Fortran,seria:
if ( ind .eq. 1 ) then
= x(1)**2 + x(2)
else if ( ind .eq. 2 ) then
= 2*x(2)
end if
return
Caso o usuário opte por enviar uma úni a rotina, deve seguir o formato espe i ado
abaixo:
Função objetivo e restrições na mesma rotina
Cabeçalho emFortran:
subroutine evalf (n,x,f,m, ,flag)
integer flag,m,n
double pre ision f, (m),x(n)
Cabeçalho em C /C++:
void evalf (int n,double *x,double *f,int m,double * ,int *flag)
Parâmetros de entrada:
x(n): real om pre isão dupla- ponto orrente.
Parâmetros de saída:
f : real om pre isãodupla - valordafunção objetivoem x.
(m) : real om pre isãodupla -valordam-ésima restriçãoemx.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função ezero em aso ontrário.
Note queevalf al ula todas restriçãode uma vez, e asguardano vetor (m).
3. Rotinas que al ulam o gradiente da função objetivo e o gradiente das
restrições:
O usuário poderá es olher entre enviar as duas rotinas separadamente, enviar uma
úni arotina,usar aproximaçãopordiferençasnitas, ouusarum pa otede diferen iação
automáti a. A es olha dousuário entre essas quatro alternativasafetaas opçõesdo
pró-ximoitem,referenteàsderivadas de segunda ordem. A função JS17 fazo ontrole dessas
es olhas.
Caso o usuário opte por enviar as duas rotinas separadamente, estas devem seguir o
formato espe i ado abaixo:
Gradiente da função objetivo
Cabeçalhoem Fortran:
subroutine evalg(n,x,g,flag)
integer n,flag
double pre ision x(n),g(n)
Cabeçalhoem C/ C++:
void evalg(int* n,double* x, double* g,int* flag)
Parâmetros de entrada:
n: inteiro - número de variáveis.
x(n): real om pre isãodupla - ponto orrente.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função e zero em aso ontrário.
Gradiente das restrições
Cabeçalho emFortran:
subroutine evalja (n,x,ind,j var,j val ,j nnz, flag )
integer n,ind,j var(n),j nnz,flag
double pre ision x(n),j val(n)
Cabeçalho emC /C++:
void evalja (int n,double* x,int ind,int* j var,double* j val,
int* j nnz,int* flag)
Parâmetros de entrada:
n : inteiro -número de variáveis.
x(n) : real om pre isãodupla -ponto orrente.
ind : inteiro - índi e darestrição ujo gradienteserá al ulado.
Parâmetros de saída:
j nnz : inteiro - número de possíveiselementos não nulos dogradiente.
j var(j nnz): inteiro - oordenadas dos elementos não nulos do gradiente.
j val(j nnz) : real om pre isão dupla - valor do gradiente usando omo oordenadas os
índi es dovetor j var.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função e zero em aso ontrário.
Analogamente aeval , evalja al ula ogradientede uma úni a restrição, ujo
ín-di e ind é passado na entrada. Além disso, essa função usa a representação de vetor
esparso para o armazenamento dos gradientes, am de tornar mais e ienteas
manipu-lações algébri as.
Por exemplo, suponha que se deseje odi ar evalja para as mesmas restrições
apresentadas na pág. 22. Neste aso, o tre hodo ódigo, em Fortran,seria:
if ( ind .eq. 1 ) then
j nnz = 2
j var(2) = 2
j val(2) = 1
else if ( ind .eq. 2 ) then
j nnz = 1
j var(1) = 2
j val(1) = 2
end if
Caso o usuário opte por enviar uma úni a rotina, deve seguir o formato espe i ado
abaixo:
Gradiente da função objetivo e das restrições na mesma rotina
Cabeçalhoem Fortran:
subroutine evalgja (n,x,g,m,j fun,j va r,j val, j nn z,fl ag)
integer flag,j nnz,m,n,i,j fun(*),j va r(*)
double pre ision g(n),j val(*),x(n)
Cabeçalhoem C/ C++:
void evalgja (int n,double *x,double *g,int m,int *j fun,
int *j var,double *j val,int *j nnz,int *flag)
Parâmetros de entrada:
n: inteiro - número de variáveis.
m: inteiro - número de restrições.
x(n): real om pre isãodupla - ponto orrente.
Parâmetros de saída:
g(n) : real om pre isãodupla -valordogradiente dafunção objetivo emx.
j nnz : inteiro - númerode possíveis elementos não nulos damatriz Ja obiana.
j fun(j nnz) : inteiro -índi e referente à restrição.
j var(j nnz) : inteiro -índi e referente à variável.
j val(j nnz) : real om pre isãodupla- valorda derivada da restriçãoj fun emrelaçãoà
variávelj var.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
apresentadas napág. 22. Suponha,também,que afunção objetivoseja onstante. Neste
aso, o tre ho do ódigo,em Fortran,seria:
Parte referente ao gradiente da função objetivo:
g(1)=0
g(2)=0
Parte referente à Ja obiana das restrições:
j nnz = 3 j fun(1) = 1 j var(1) = 1 j val(1) = 2 * x(1) j fun(2) = 1 j var(2) = 2 j val(2) = 1 j fun(3) = 2 j var(3) = 2 j val(3) = 2
Noteque evalgja al ulatodos osgradientes das restriçõesde umasóvez, diferente
do quea onte e om evalja ,que al ulaum gradientepor vez.
4. Rotinas para as derivadas de segunda ordem:
Cada es olha feita para a derivada de primeira ordem possibilita diferentes opções
para as derivadas de segunda ordem, omomostrado aseguir.
•
Derivada de primeiraordempor diferen iaçãoautomáti a. Neste aso, para a deri-vada de segunda ordem, pode-seoptar por:Usar diferen iação automáti a. Através do Adol-C, obtém-se o produto da
Hessiana doLagrangiano porum vetor.
Aproximaras derivadas de segunda ordem pordiferenças nitas.
•
Derivada de primeira ordem por diferenças nitas. Neste aso, as derivadas de segunda ordem são aproximadas por diferençasnitas.•
Derivada de primeiraordemforne idaspelousuário. Neste aso, pode-se optarpor: Forne erseparadamenteamatrixHessianadafunçãoobjetivoeaHessianadasForne er aHessiana do Lagrangiano.
Usardiferen iaçãoautomáti aparaseobteroprodutodaHessianado
Lagran-giano por um vetor.
Aproximar asderivadas de segunda ordempor diferençasnitas.
AfunçãoJavaS riptque ontrolao onteúdoexibidonapágina,dadaumaes olhapara
a derivada de primeiraordem, é JS17. Já a função JS19, ontrola o onteúdo exibido
para adaopçãoes olhida daderivadade segundaordem. Porm, seousuáriosele ionar
diferenças nitas para a derivada de segunda ordem, apare erá um novo botão om as
opçõesparaotipodediferençasnitasaserusado. Tal ontroleéfeitapelafunçãoJS18.
Casoousuáriotenhaes olhido enviarasrotinas om aderivadade primeiraordemno
item3etenhade ididoenviarseparadamenteaHessianadafunçãoobjetivoeaHessiana
das restrições, deve seguiros formatos abaixo:
Hessiana da função objetivo:
Cabeçalhoem Fortran:
subroutine evalh(n,x,hlin,h ol,hval,hn nz,f lag)
integer n,hlin(*),h ol(*),hnnz,flag
double pre ision hval(*),x(n)
Cabeçalhoem C/ C++:
void evalh(int n,double* x,int* hlin,int* h ol,double* hval,int* hnnz,
int* flag)
Parâmetros de entrada:
n: inteiro - número de variáveis.
x(n): real om pre isãodupla - ponto orrente.
Parâmetros de saída:
hnnz : inteiro - número de possíveis elementos não nulos da Hessiana (somente a parte
triangularinferior).
hlin(hnnz) : inteiro - índi e dalinha daHessiana.
h ol(hnnz) : inteiro - índi e da oluna daHessiana.
hval(hnnz): real ompre isãodupla-valoresdoselementosnãonulosdaHessianausando
função e zero em aso ontrário.
Napág 15,háum exemplode omorepresentar uma matrizusando esse formato.
Hessiana das restrições
Cabeçalho emFortran:
subroutine evalh (n,x,ind,h lin,h ol, h v al,h nnz ,fla g)
integer n,ind,h lin(*),h ol(*),h nnz, fla g
double pre ision h val(*),x(n)
Cabeçalho emC /C++:
void evalh (int n,double* x,int ind,int* h lin,int* h ol,double* h val,
int* h nnz,int* flag)
Parâmetros de entrada:
n : inteiro -número de variáveis.
x(n) : real om pre isãodupla -ponto orrente.
ind : inteiro - índi e darestrição uja Hessiana será al ulada.
Parâmetros de saída:
h nnz : inteiro - número de possíveis elementos não nulos da Hessiana (somente aparte
triangularinferior).
h lin(h nnz) : inteiro- índi e dalinha da Hessiana.
h ol(h nnz) : inteiro- índi e da oluna dada Hessiana.
h val(h nnz) : real om pre isão dupla - valores dos elementos não nulos da Hessiana
usando omo oordenadas osíndi es de h lin e h ol.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função e zero em aso ontrário.
De maneira similar aoque o orre om eval e evalja , evalh al ula aHessiana
de uma restrição por vez, dado o índi e ind passado na entrada. Novamente, usa-se
a representação de vetor esparso para o armazenamento dos gradientes, a m de tornar
mais e iente as manipulaçõesalgébri as quando os vetores são esparsos (veja pág. 15).
Caso o usuário tenha es olhido enviar as rotinas om a derivada de primeira ordem
Produto da Hessiana do Lagrangiano por um vetor
Cabeçalhoem Fortran:
subroutine evalhlp(n,x,m,lambda,sf,s , p,hp ,got h,fl ag)
integer n,m,flag
double pre ision x(n),lambda(m),p(n),hp(n) ,sf, s (m )
logi al goth
Cabeçalhoem C/ C++:
void evalhlp(int n,double *x,int m,double *lambda,double sf,
double *s ,double *p,double *hp,int *goth,int *flag)
Parâmetros de entrada:
n: inteiro - número de variáveis.
x(n): real om pre isãodupla - ponto orrente.
m: inteiro - número de restrições (não in luirbordas).
lambda(m): real om pre isão dupla- vetor de multipli adoresde Lagrange.
p(n) : real om pre isãodupla - vetor a ser multipli adopelamatriz.
sf: real om pre isãodupla - fatorde es alamento dafunção objetivo.
s (m): real om pre isãodupla -fatores de es alamentodas restrições.
goth : lógi o (.true. ou .false.) em Fortran e inteiro (1 ou 0) em C - parâmetro usado
para indi ar se houve ne essidade de re al ular a Hessiana. O algoritmo de otimização
atribui ovalorfalse toda vez que o ponto orrente é modi ado. Se o valorde entrada
for false, o usuário pode salvara Hessiana emum blo o de variáveis globais ( ommon
stru ture, no Fortran) e fazergoth re eber true. Sendo assim, é possível usar a
ha-madanovamente sem que haja ne essidade de re al ular a Hessiana.
Parâmetros de saída:
hp(n) : real om pre isão dupla -produto daHessiana pelo vetor.
goth : lógi o (.true. ou.false.) em Fortrane inteiro (1ou 0)em C- ver denição a ima.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função ezero em aso ontrário.
Caso o usuário tenha es olhido enviar as rotinas om a derivada de primeira ordem
no item 3 e tenha es olhido enviar a Hessiana do Lagrangiano, a função deve seguir o
Cabeçalho em Fortran:
subroutine evalhl(n,x,m,lambda,s alef, s a le , hlli n,hl ol, hlva l,hl nnz, flag )
integer flag,hlnnz,m,n,hl ol(*),hl lin( *)
double pre ision s alef,hlval(*),lambda(m ),s ale (m), x(n)
Cabeçalho emC /C++:
void evalhl(int n,double *x,int m,double *lambda,double s alef,
double *s ale ,int *hllin,int *hl ol,double *hlval,int *hlnnz,
int *flag)
Parâmetros de entrada:
n : inteiro -número de variáveis.
x(n) : real om pre isãodupla -ponto orrente.
m : inteiro- número de restrições(não in luir bordas).
lambda(m): real om pre isãodupla - vetor de multipli adoresde Lagrange.
s alef: real om pre isãodupla -fator de es alamentoda função objetivo.
s ale (m): real om pre isão dupla -fatores de es alamento das restrições.
Parâmetros de saída:
hlnnz : inteiro - número de possíveis elementos não nulos da Hessiana do Lagrangiano
(somente a partetriangularinferior).
hllin(hlnnz) : inteiro -índi e dalinha da Hessiana doLagrangiano.
hl ol(hlnnz) : inteiro- índi e da oluna daHessiana do Lagrangiano.
hlval(hlnnz) : real om pre isão dupla - valores dos elementos não nulos da Hessiana do
Lagrangiano, usando omo oordenadas os índi esde hlline hl ol.
ag : inteiro - deve ser diferente de zero se o orrer algum erro durante a avaliação da
função e zero em aso ontrário.
6. Parâmetros do ALGENCAN:
Os parâmetros do ALGENCAN são ongurados diretamente na página, através de
ampos de texto no formulário de submissão. Abaixo, estão os parâmetros om seus
respe tivos valores padrão. Entre parênteses, onsta o nome do ampo na versão sem
detalhes napágina doALGENCAN:
•
Pular passo para a eleração do algoritmo(skipa ): Sim.•
Remover variáveis xas (ou seja, variáveis om limitantes inferiores e superiores iguais)(rmxv): Sim.•
Variáveisde folgapara as restriçõesde desigualdade(sla ks): Não.•
Equilibrares ala dafunção objetivoe restrições (s ale): Sim.•
Ignorar afunção objetivo (para a har apenas uma solução viável)(ignoref): Não.•
Veri araderivadadasfunçõesenviadas( omparação omdiferençasnitas)( he kder): Não.•
Tolerân iade fa tibilidade(paraanormainnitodas restrições) (epsfeas): 1.0d-04.•
Tolerân iade otimalidade(para anormainnitodogradienteprojetado do Lagran-gianoAumentado) (epsopt): 1.0d-04.•
Número de omponentes dos vetores exibidos na solução detalhada. Veja próximo parágrafo(n omp): 5.Após a es olha dos parâmetros, o usuário deve denir o nível de detalhe om que
a solução en ontrada pelo programa de otimização será apresentada. Para tal, deve-se
denir no ampo Informação externas o nível de detalhe, em uma es ala que vai de
zero (sem informações das iteraçõesexternas) até in o (todas informações geradaspelo
programa). Analogamente, deve-se denir o nível de detalhedas Informaçõesinternas,
emuma es ala que vaide zero aseis.
Caso ousuário desejesalvar osparâmetroslistados a ima,para poder usá-los em
tra-balho posterior, basta a ionar a opção salvar parâmetros. Atente que, para posterior
visualizaçãodos parâmetros salvos, o usuáriodeve habilitar a opção a eitar ookies do
seu navegador. A função JS14 é a responsável por re uperar os dados salvos para o
ALGENCAN,ou seja, éresponsável por leros ookies.
Porm, oúltimo ampoquepodeser preen hidoédenominadore eberosresultados
viaemail. Aopreen hê-lo,ousuáriore eberá duasmensagensaolongodopro essamento
de seu trabalho.
Analogamente ao GENCAN (veja pág 17), também foi riada uma página menos
detalhada para o ALGENCAN, destinada a usuários mais experientes. Essa página é
Esta páginaexibeasduas las dosistema,ade ompilação eade exe u ão. Em ada
la, onstamo trabalhoque está sendo realizadonaquele instante e ospróximosa serem
realizados. Otrabalho orrente a notopo dalae re ebe uma indi ação ompilando
ou exe utando, a depender do tipo da la. Os trabalhos em espera am abaixo do
orrente, ordenados pela ordem de hegada. Otexto vazia em uma la indi a que não
há trabalhos sendo pro essados na mesma. Na Figura 2.3, é mostrado um exemplo da
páginade visualizaçãodas las.
Figura2.3: Página de visualizaçãodas las
2.4 Ver resultado de trabalho
Nesta página, o usuário deve entrar om o nome e a senha de seu trabalho, a m de
visualizar o resultado al ançado pelo programa de otimização. O nome e a senha são
passados para o usuárioassim que o trabalhoé submetido, sendotambém enviados para
seuendereçoeletrni o, asoestetenhasidoforne ido. Otrabalho agravadonosistema
Apágina omosresultadoséexibidano apítulo5,naFigura4.4. Nesse apítulo,um
exemplo de submissão de problema é mostrado passo àpasso.
2.5 Can elar trabalho
Deformaanálogaàpáginaanterior,para an elarumtrabalhoousuáriodeveforne er
o nome e a senha do mesmo. Nesse aso, não é gerado um arquivo de saída para o
problema. Um trabalho será automati amente an elado aso esteja sendo pro essado
pelo sistema por mais de 24 horas. A página para o an elamento de um problema é
idênti a àquela para a visualizaçãodos resultados.
2.6 Es reva para o Ótimo
O usuário deve a essar esta página para entrar em ontato om o administrador do
sistema Ótimo. Háum espaçopara ousuárioes reversuas dúvidas, omentáriose
suges-tões. Há tambémos amposnome e email quepodem ser op ionalmentepreen hidos
Fun ionamento do sistema
No apítuloanterior, foides ritaaentradadedados,primeiraetapadouxo dedados
nosistema,apresentado naFigura1.1. As outrasetapasdesse uxo são detalhadasnesta
seção.
3.1 Armazenamento de dados
Quando o usuário li a no botão submeter, na página de um programa de
otimiza-ção,são a ionadas asprimeirasveri açõesde onsistên ia,viafunçõesemJavaS ript,já
des ritas no apítulo anterior. Após a submissão ter passado por tais onsistên ias, um
arquivo CGIé a ionado.
Para ada programa, há um arquivo CGI responsável pela entrada de dados. Assim,
atualmenteosistema onta omgen an. giealgen an. gi. Aestruturadessesarquivos
é a mesma e será pormenorizada a seguir. No entanto, justi a-se riar arquivos de
entrada diferentes para programas de otimização diferentes, pois ada programa exige
seus próprios arquivos de dados e parâmetros. Na Figura3.1, é apresentada a estrutura
geral dos arquivos que geren iam o armazenamento de dados e, no restante da seção, é
feitauma su intades rição de ada omponentedessa estrutura.
Oprimeiropasso realizadopelosistemaéa geraçãodeum nome parao trabalho
sub-metidopelousuário. Esse nometem 16dígitos,naformauserYYMMDDHHMMSS,em
queYY éoano orrente, MMomês orrenteeassimsu essivamente atéSS, indi andoos
segundos. Oprexouser é omumatodosostrabalhos. Umsuxodotipo-i(i=1,2,..)
é olo ado quando há um i-ésimo trabalho sendo submetido no mesmo segundo. Assim,
porexemplo,suponhaquedoistrabalhossejamsubmetidosàs16:03:42dodia27/08/2010.
Neste aso, dois trabalhos om os seguintes nomes serão riados: user100827160342 e
user100827160342-1.
Emseguida,um diretórioé riado om o nomedo trabalho. Este diretóriohospedará
todos osarquivos e onterá todas as informaçõesdo usuário.
3.1.2 Baixa arquivos
Depois de riado o diretório do trabalho, são analisadas as extensões dos arquivos
enviados, a m de se des obrir a linguagem em que ada um foi es rito. No aso do
GENCAN e ALGENCAN, são a eitas funções em Fortran, C e C++. Caso o usuário
envie uma extensão diferente das esperadas (.f, .for, . , . pp, . ++, ...), a submissão é
abortada. No ALGENCAN,tambémé veri ado se não foram enviados arquivos de
lin-guagens diferentes, poisnesse programa, todas as funções enviadas tem de estar es ritas
na mesmalinguagem.
Emseguida,osarquivossãosalvosnapastadousuário, oma ondiçãode nãosuperar
o tamanho de 1Mb ada um. Caso ontrário, asubmissão é an elada.
3.1.3 Gera parâmetros
Uma vez gravados os arquivos forne idos pelo usuário, aptura-se os parâmetros
se-le ionados (tipo de derivada, tolerân ias, tipo de saída, et ..) e gera-se o arquivo de
parâmetros doprograma de otimização. Para o GENCAN,esse arquivo égerado sempre
emFortran. ParaoALGENCAN,aextensãodoarquivodependedalinguagemes olhida.
Se a opção salvar parâmetros tiver sido es olhida, então um ookie é riado no
navegador do usuário. O ookie tem omo nome OTIMO_SOLVER, emque SOLVER
é o nome do programa de otimização es olhido. Assim, toda vez que o usuário visitar a
Na pasta do usuário, é riado um arquivo denominado dados.txt, om informações
tais omoonome dotrabalho, a senha,oprograma de otimizaçãoes olhido, alinguagem
das funçõesenviadas, ostiposde derivadas, et .. Essas informaçõesserão ne essárias em
outrasetapasdosistema, omo na ompilação, pro essamentoe geraçãode resultados. É
importante salientar que as in o primeiras linhas desse arquivo são padronizadas para
todos os programas de otimização e ontêm, na ordem, o nome do trabalho, senha,
pro-grama de otimização, endereço eletrni o (ou vazio, aso o usuário não tenha forne ido)
elinguagem es olhida. Apartir dasexta linha, oarquivo pode variar entre osprogramas
de otimização.
3.1.5 Envia mensagem eletrni a
Umtrabalhosópassaporestaetapaseousuáriotiverpreen hido o ampoemail,na
páginadoprogramade otimização. Antes damensagemser enviada, éfeitauma
veri a-ção, atravésdo uso de expressões regulares (veja [8℄), se o endereço de orreio eletrni o
está noformato adequado ese não ontém nenhum ara tere ou omando mali ioso.
Em seguida, uma mensagem é enviada ao usuário, indi ando que seu problema foi
submetido,informando-lheonome easenhadotrabalhoealgunslinks para visualização
dos resultados nais, an elamento de trabalhoe visualizaçãodas las.
3.1.6 Insere na la
Finalmente, o trabalho é inserido na la de ompilação. Se for o primeiro da la, o
arquivo ompila.plé hamadoeoproblemaé ompilado. Caso ontrário,umamensagem
indi ando queo trabalhofoi olo ado nalade ompilaçãoé exibida.
3.2 Compilação
Os ript ompila.pl, hamadopelosarquivosquegeren iamaentradadedados
(gen- an. gi ealgen an. gi), éresponsável pelogeren iamento dalade ompilaçãodo
sis-tema eserá dis utido emdetalhes na Seção 3.4. Nesta seção, são apresentados oss ripts
omp_gen an.pl e omp_algen an.pl,responsáveisprimordialmentepela ompilação
das funções, e que são hamados pelos ript ompila.pl.
Cada arquivo omp_solver.pl tem omo parâmetro de entrada o nome do
traba-lho e omo saída um arquivo exe utável, pronto para ser rodado om o m de
forne- er a solução do problema enviado. A Figura 3.2 esquematiza a estrutura dos arquivos
3.2.1 Lê dados
A partirdo arquivode dadosguardado na pastado usuário,obtém-se as informações
que serão ne essárias nessa etapa, omo a linguagem dos arquivos enviados, a dimensão
do problema, otipo de derivadas, et ..
3.2.2 Ini ia parâmetros
Osprogramas GENCAN e ALGENCAN exigem o envio da rotina inip, para a
atri-buição de valores ini iais aalguns parâmetros (veja pág. 11). No Ótimo, o usuário pode
ignorar o envio desse arquivo e forne er apenas adimensão e o número de restrições, ou
ainda enviaroinip apenas om algunsparâmetrose, assim,usar osvalorespadrãopara
os parâmetros não forne idos.
Seousuáriooptoupornãoenviarinip,uminip omosvalorespadrão(denominado
inip padrão)é riado. Caso ousuáriootenhaenviado, é olo ado noinippadrão uma
hamada, no nal do ódigo, ao arquivo inip enviado pelo usuário. Assim, é possível
adotar osvalores padrãopara os parâmetrosnão denidos pelousuário.
3.2.3 Congura programa de otimização
Estabele idososparâmetrosini iais,háuma hamadaaos ript ong_solver.pl (ou
seja,atéaqui, ong_gen an.plou ong_algen an.pl). Esses ript éresponsávelpela
onguração dos arquivosdos programa de otimização. No GENCAN e ALGENCAN, o
s ript tem afunção de:
•
Deniradimensãodoproblema(noALGENCAN,tambémonúmeroderestrições). Assim, todos os vetores que dependem dessa dimensão terão somente o espaçone- essário de memóriaalo ada.
•
Denir o aminhode saída, para queosarquivos ontendo asoluçãoe detalhes das iteraçõessejamgravados napasta dousuário.•
Retirara hamadaàfunção auxiliarpara ousode derivada automáti a. Emalguns asos, o uso de derivadas automáti as exige a hamada de uma função auxiliarnofor ne essária,a linha ontendo a hamada é retirada.
3.2.4 Gera derivada automáti a
Nestaetapa,é hamadoos ript gerader_solver.pl (ouseja,gerader_gen an.pl ou
gerader_algen an.pl),que retorna três arquivos binários om a extensão .1, ontendo
asestruturaspara o ál ulodas derivadasdafunçãoobjetivo(GENCANeALGENCAN)
e mais três arquivos binários om a extensão .2 ontendo as estruturas para o ál ulo
das derivadas das restrições (ALGENCAN). Tal s ript será detalhado na Seção 3.5.2.
3.2.5 Compila
Umavez ompletadas omsu essoasetapasa ima,torna-sepossívela ompilaçãodas
rotinaspara a resolução do problema.
Internamente, os programas GENCAN e ALGENCAN pre isam de todas as funções
denidas em seus ódigos para poderem gerar o exe utável que resolverá um problema.
Por exemplo, suponha que o usuário es olheu a opção de derivada por diferenças nitas
no uso do GENCAN. Ainda assim, as funções relativas à primeira e segunda derivadas
(evalg,evalh,evalhlp)deverãoestarpresentes( omo orpovazio)duranteolink om
asrotinasdoprogramadeotimização. Portanto,hátrêssituaçõesdistintasde ompilação:
•
Compilaçãodas funçõesenviadas pelousuário.•
Compilaçãodasfunções omo orpovazio,quenãoexer eminuên iamaspre isam estar presentes.•
Compilação das funções auxiliares ontendo hamadas para as derivadas geradas peloAdol-C (veja Seção 3.5.2).Cabe a esta parte do s ript omp_solver.pl veri ar os tipos de derivadas es olhidas
e ompilar adequadamente as funções de a ordo om as situações listadas a ima. Em
seguida,são ompiladosos arquivos dos programas de otimização.
3.2.6 Gera exe utável
Esse tre hodos ript faz aligação(link)entreasfunções ompiladasnoitemanterior
(as enviadas pelo usuário, auxiliares e do programa de otimização) om a bibliote ado
Na seção anterior, foi visto que ompila.pl (responsável pela la de ompilação)
hama omp_solver.pl a m de ompilar e fazer o link dos arquivos, e então gerar o
programa exe utável. Na sequên ia, ainda em ompila.pl, o trabalho ompilado om
su esso é inserido na la de exe ução e, então, aso o trabalho seja o primeiro da la, é
hamado o s ript exe ut.pl, responsável pelo geren iamento desta última la. Um
es-quema om o fun ionamentoe ainteraçãoentre aslas será mostrado na próxima seção.
A parte de exe ução propriamente dita, ontida em exe ut.pl, resume-se a rodar
o arquivo exe utável gerado na fase de ompilação (lo alizado na pasta do usuário e
om o nome exe utar). Para tal, é hamado um shell s ript, denominado roda, que
roda o arquivo exe utável da pasta do usuário. Então, exe ut.pl hama o s ript
ge-rahtml_solver.pl que ria a página de saída, ontendo a solução en ontrada pelo
pro-grama ouumamensagem de erro. Por m, seousuárioforne eu seu endereço eletrni o,
umamensageméenviadaindi andootérminodotrabalho, omumatalhoparaasolução
(ou a mensagem de erro)en ontrada.
3.4 Filas
Como objetivo de evitar que o servidordo Ótimoseja sobre arregado, foram riadas
las para organizar os trabalhos submetidos. Existem duas las, uma para ompilação e
uma para exe ução. Essa divisão é justi ada, pois o tempo de ompilação, em geral, é
inferior ao de exe ução de um problema. Com efeito, imagine a situação de um usuário
que tenha de esperar por horas na lapara re eber a mensagem indi ando que seu
pro-blema não ompilou. Portanto,em geral, haverá sempre um trabalho sendo ompilado e
um trabalho sendo exe utado simultaneamente eindependentemente nosistema.
Quando um trabalho é submetido, um s ript do tipo solver. gi salva os dados do
usuário e olo a o trabalho na la de ompilação. Se o trabalho não for o primeiro
da la, o usuário re ebe uma mensagem indi ando o nome e a senha do trabalho, para
posterior a esso. Se o trabalho for o primeiro, ompila.pl é hamado ini iando o laço
de ompilação. Veja aFigura 3.3.
Quando a ompilação desse trabalho termina, veri a-se a existên ia de outros
tra-balhos a serem ompilados. Assim, o laço irá perdurar até que o último trabalhoda la
seja ompilado. Voltando ao trabalho submetido, se houver erro na ompilação, uma
mensagem na tela (e op ionalmente, uma mensagem eletrni a) éenviada ea submissão
é an elada. Caso ontrário, o trabalho é inserido na la de exe ução. Caso o mesmo
chegou novo
problema
de compilação
incluir na fila
1º da fila ?
de compilação
msg
fim
não
sim
ativar o laço
Figura 3.3: Geren iamentoda entrada nalade ompilaçãoem solver. gi.
Quandoaexe uçãotermina,veri a-seaexistên iadeoutrostrabalhosaserem
exe u-tados. Novamente, olaço aráativoenquando houvertrabalhosnalade exe ução. Por
m,depoisdotrabalhotersidoexe utado,umapágina omasoluçãoou omamensagem
de erro é exibida. Veja o uxo à direitada Figura3.4.
3.5 Diferen iação automáti a
Diferen iação automáti a é um onjunto de té ni as, baseadas na apli açãoda regra
da adeia, para obter as derivadas de uma função es rita omo um programa de
ompu-tador. Explora-se o fato de que todo programa de omputador, não importandoo quão
ompli adoseja, exe utaumasequên iade operaçõesaritméti aselementares. Aoapli ar
a regra da adeia repetidamente a essas operações, derivadas de qualquer ordem podem
ser al uladas automati amente.
Existem outros métodos para a obtenção das derivadas de uma função, omo
apro-ximação numéri a por diferençasnitas oumanipulação de expressões algébri as
simbó-li as ( onhe ida omo diferen iação simbóli a). No entanto, a diferen iação automáti a
apresenta vantagens omo: e iên ia em termos de usto omputa ional, apli ação em
fórmulas de uma linha assim omo em fórmulas de mil linhas, possibilidade de ser
pro-duzida om esforço humano mínimoe, prin ipalmente, faz o ál ulo exato das derivadas
(ex eto peloerro de ponto utuante, naturalmente). Veja em[9℄ mais informaçõessobre
diferen iação automáti a, in luindo os programas que usam esse método, livros texto,
artigos,et .
A ferramenta usada pelo Ótimo para o ál ulo das derivadas é o Adol-C (Automati
Dierentiation by OverLoading inC++), que usa o método de diferen iação automáti a
omentado a ima. O pa ote Adol-C faz o ál ulo das derivadas de primeira ordem e de
ordem superior de funções vetoriais denidas em um programa de omputador es rito
em C ou C++. As rotinas resultantes ontendo as derivadas podem ser hamadas por
compilou ?
msg
fim
não
não
sim
sim
de execução
incluir na fila
fila é vazia ?
fim
não
sim
de execução
1º da fila ?
início
fila é vazia ?
msg
fim
executou ?
solução
sim
não
sim
não
início
ativar o laço
Figura 3.4: Geren iamento da la de ompilação em ompila.pl (à esquerda) e da la
de exe ução em exe ut.pl (à direita).
um link om C.
3.5.1 Como usar o Adol-C
OAdol-C foi desenvolvido de maneiraque pou as modi açõesno ódigo do usuário
são ne essáriasparaageraçãodasderivadas. A seguir,estão ospassos paraageraçãodas
derivadas.
•
Rede laraçãodotipodas variáveis: Todas asvariáveisquepossam ser onsideradas omo quantidades diferen iáveis em algum momento durante a exe ução dopro-gramaserão hamadas de variáveisativas edevemser de laradas omoadouble,
que é um tipoes alar do Adol-C uja parte real é do tipo padrãodouble. Assim,
a variávelindependente e todas as variáveisque dela dependam direta ou