• Nenhum resultado encontrado

Otimização via Internet

N/A
N/A
Protected

Academic year: 2021

Share "Otimização via Internet"

Copied!
99
0
0

Texto

(1)

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

(2)
(3)
(4)

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

(5)
(6)

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

(7)

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.

(8)

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.

(9)

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

(10)

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

(11)

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

(12)

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

(13)

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

(14)

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.

(15)

f2 ,umprogramaque onvertefunçõeses ritasemFortranparafunçõesemC/C++. Esse programa é ne essário para que o sistema onsiga al ularas derivadas

auto-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

(16)

detalhada éapresentada nos apítulos3 e4.

Entrada de dados

 A 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 dados

 Para 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.

Filas

 Uma 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 a

 Osistemausaopa 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ção

 O 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

(17)

Exe ução

 Osistema rodao arquivo gerado nafase de ompilação.

Visualizaçãode resultados

 Pelo 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

(18)

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ção

 GENCAN: 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  Verlas

 Verresultado de trabalho

 Can elar trabalho

Atendimentoao usuário  Es revapara o Ótimo

(19)

O 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.

(20)

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

(21)

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 é

(22)

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

(23)

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)

(24)

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

(25)

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

(26)

Essa páginaé ontroladapeloarquivofun oes_det.js, ujas funçõessão semelhantes às

jádes ritasemfun oes.js. NaFigura2.1,segueapáginasemdetalhesparaoGENCAN.

(27)

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)

suj

c

i

(x) = 0

i

∈ I,

g

j

(x) ≤ 0

j

∈ D,

l

i

≤ x

i

≤ u

i

,

i

= 1, .., n

tal que

x

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

(28)

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).

(29)

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

(30)

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:

(31)

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:

(32)

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.

(33)

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

(34)

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

(35)

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çãoobjetivoeaHessianadas

(36)

 Forne 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

(37)

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

(38)

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

(39)

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.

(40)

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 é

(41)
(42)

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

(43)

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

(44)
(45)

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.

(46)

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

(47)

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

(48)

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ço

ne- 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 auxiliarno

(49)

for 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

(50)

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

(51)

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

(52)

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 do

pro-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

Referências

Documentos relacionados

Como se pode ultrapassar o último, se você está atrás do último, você não pode ultrapassar o último!. Calcule na

Agora se você nem fez o teste, é porque você é macho, porque macho não faz testizinhos por

Abra a porta da geladeira, retire a girafa, coloque o elefante, e feche a porta?. Esta pergunta testou sua capacidade de pensar nas

Mostra que para você o que importa é o resultado final. Está segura de si e se for preciso mostra o que pensa

Primeiro vai levar o carneiro para a outra margem e deixará na margem de origem, os dois fardos de capim.. Em seguida ele voltará e vai pagar um fardo

Assim, qualquer objeto preto maior que o rasgo que esteja por baixo da folha satisfaz a solução. Estas são as

Poderá mesmo agir com rigidez e até com dureza, e chegar a ser um pouco “maníaco” com sua obsessão de ligar rigorosamente todos os pontos... Você é

- Seu número preferido define para quantas pessoas você deve enviar este teste. O dia predileto corresponde ao dia que seu desejo se