Você está na página 1de 41

Sistemas de apoio à decisão

CAP10-Plataformas (Ilog)
Índice
• Motores e algoritmos de optimização
– Algoritmos
– Mecanismos de controlo
– Afinação automática de parâmetros
– Parâmetros de execução

• Desempenho
– Avaliar a execução de um modelo

• Bibliografia

2013, Cláudio Alves


Objectivos de aprendizagem
• Conhecer as medidas relevantes de desempenho dos motores e
algoritmos de optimização
• Conhecer alguns dos parâmetros que influenciam o desempenho desses
motores e algoritmos
• Aplicar ferramentas de afinação e avaliação automática de parâmetros
• Usar os IDE e API de ferramentas comerciais para aceder e alterar esses
parâmetros e influenciar assim o desempenho dos algoritmos
• Avaliar experimentalmente a influência dos parâmetros no desempenho
dos algoritmos

2013, Cláudio Alves


Motores e algoritmos de optimização
Algoritmos
• ILOG OPL | Motores de optimização
– CPLEX
– CP Optimizer
• Motor de optimização CPLEX
– Diferentes algoritmos e estratégias (parametrizações) para
• Programação Linear
• Programação Inteira Mista
• Programação Quadrática

• Algoritmos de optimização CPLEX


– Simplex
• Primal
• Dual
• Simplex em rede
– Barrier (métodos de ponto interior)
– Algoritmos de Programação Inteira Mista
• Branch-and-bound + planos de corte
• Para problemas com funções objectivo lineares ou quadráticas
– Algoritmo de sifting
• Variante do método Simplex que resolve o problema iterativamente usando um subconjunto das variáveis do problema
• Adequado para problemas com muitas variáveis e poucas restrições
– Abordagem concorrente
• Multi-threaded: execução em paralelo dos algoritmos Simplex primal, dual, barrier
• Termina quando um destes algoritmos atinge a solução do problema

2013, Cláudio Alves


Motores e algoritmos de optimização
Algoritmos
(fonte: IBM Corporation, 2009)

• Algoritmos de optimização CPLEX


> Simplex (primal e dual) vs Barrier

2013, Cláudio Alves


Motores e algoritmos de optimização
Algoritmos
(fonte: IBM Corporation, 2009)

• Algoritmos de optimização CPLEX


> Simplex (primal e dual) vs Barrier

2013, Cláudio Alves


Motores e algoritmos de optimização
Algoritmos
• Algoritmos de optimização CPLEX
> Simplex Dual
• Tendencialmente melhor quando o problema tem mais restrições do que variáveis
– Simplex em rede
• Especialização do método Simplex para problemas de Programação Linear em redes
– Barrier (métodos de ponto interior)
• Método de ponto interior em uma fase que restaura a validade das solução ao mesmo tempo que atinge a solução
óptima
• Geralmente mais eficiente que o método Simplex para problemas de grande dimensão
– Algoritmos de Programação Inteira Mista
• Para problemas de Programação Inteira Mista com ou sem restrições ou funções objectivo quadráticas
• Branch-and-bound = método de partição e avaliação
• Inclui métodos de planos de corte:
– Cortes de Gomory
– Cliques e cobertura
– Cobertura de fluxos
– Limites superiores generalizados
– ...

2013, Cláudio Alves


Motores e algoritmos de optimização
Algoritmos
• Algoritmos de optimização CPLEX
– Algoritmo de sifting
• Adequado para problemas com muitas variáveis e poucas restrições
• Abordagem
1. Definir um subproblema do problema original a partir de um subconjunto de variáveis
Assume-se que as restantes variáveis têm um valor arbitrário (= ao seu limite inferior, p.ex.)
2. Resolver o subproblema, e re-avaliar os custos reduzidos das outras variáveis com base na solução obtida
3. As variáveis com custo reduzido atractivo podem vir a ser adicionadas ao subproblema; voltar a resolver com o
novo subconjunto de variáveis
4. O algoritmo termina quando não existem variáveis com custo reduzido atractivo.

– Abordagem concorrente
• Multi-threaded: execução em paralelo dos algoritmos Simplex primal, dual, barrier
• Os algoritmos são executados em processos concorrentes

2013, Cláudio Alves


Motores e algoritmos de optimização
Mecanismos de controlo
• Controlo das definições de execução
– Ficheiro .ops
– Através de scripts | Exemplo

execute CPX_PARAM {
cplex.preind = 0;
cplex.simdisplay = 2;
}

– Através das API do OPL | Exemplo


para .NET

Cplex.SetParam(Cplex.BooleanParam, Boolean)
Cplex.SetParam(Cplex.DoubleParam, Double)
Cplex.SetParam(Cplex.IntParam, Int32)
Cplex.SetParam(Cplex.LongParam, Int64)
Cplex.SetParam(Cplex.StringParam, String)

Cplex.GetParam(Cplex..::.BooleanParam)
Cplex.GetParam(Cplex..::.DoubleParam)
Cplex.GetParam(Cplex..::.IntParam)
Cplex.GetParam(Cplex..::.LongParam)
Cplex.GetParam(Cplex..::.StringParam)

2013, Cláudio Alves


Motores e algoritmos de optimização
Mecanismos de controlo
• Controlo das definições de execução
– Através das API do OPL | Exemplo
Classe IloCplex em C++ e Java
setParam | getParam | getMin | getMax | getDefault| setDefaults

Em C
CPXget<db>param | CPXset<db>param
> acesso e alteração de parâmetros de tipo x: double, int, str, long

CPXsetdefaults
> reset de todos os parâmetros (valores por defeito)

CPXgetparamname:
> retorna o nome do parâmetro

CPXgetparamnum
> retorna o número do parâmetro

CPXgetchgparams
> retorna todos os parâmetros cujo valor seja diferente do valor por defeito

2013, Cláudio Alves


Motores e algoritmos de optimização
Mecanismos de controlo
• Controlo dos parâmetros através do IDE

2013, Cláudio Alves


Motores e algoritmos de optimização
Mecanismos de controlo
• Lista de parâmetros (IDE)

2013, Cláudio Alves


Motores e algoritmos de optimização
Mecanismos de controlo
• Escolha do algoritmo
– CPX_PARAM_LPMETHOD; CPX_PARAM_QPMETHOD

2013, Cláudio Alves


Motores e algoritmos de optimização
Afinação automática de parâmetros
• Ferramenta de afinação automática do OPL
– Opção “Tune project”

2013, Cláudio Alves


Motores e algoritmos de optimização
Afinação automática de parâmetros
• Ferramenta de afinação automática do OPL
– Opção “Tune project”
• Aplica-se a uma configuração de execução (“Run
configuration”)
• Não toma em conta alterações aos parâmetros feitas em
scripts, mas permite fixar alguns através de um ficheiro
.ops que é passado como input
• Executa o modelo várias vezes com diferentes conjuntos
de parâmetros
• Retorna o conjunto de parâmetros que permitiram
resolver o problema da forma mais rápida

2013, Cláudio Alves


Motores e algoritmos de optimização
Afinação automática de parâmetros
• Ferramenta de afinação automática do OPL
– Opção “Tune project” | Opções de afinação

2013, Cláudio Alves


Motores e algoritmos de optimização
Afinação automática de parâmetros
• Ferramenta de afinação automática do OPL
– Opção “Tune project” | Opções de afinação
• Tuning information display
– No display (0)
– Display standard, minimal reporting (1)
– Display standard report plus parameter settings (2)
– Display exhaustive report and log (3)
• Tuning measure
> Aplica-se aos casos em que são afinados os parâmetros para vários modelos em simultâneo; determina
a medida que é usada para avaliar a qualidade dos resultados
– Average (tempo médio)
– Minmax (o menor dos maiores tempos)
• Tuning repeater
> Número de repetições do processo de afinação
• Tuning time limit
> Tempo limite de execução do processo de afinação por modelo

2013, Cláudio Alves


Motores e algoritmos de optimização
Afinação automática de parâmetros
• Ferramenta de afinação automática do OPL
– Opção “Tune project” | Exemplo de output (exemplo: warehouse)

Generating Scalable data


Reading problem 'C:\Users\User\AppData\Local\Temp\tune_0_warehouse_Scalable data.sav' for tuning.
Tuning on problem
 
'C:\Users\User\AppData\Local\Temp\tune_0_warehouse_Scalable data.sav‘
Test 'defaults':
Integer optimal, tolerance.
Time = 1.08 sec. (764.13 ticks) Objective = 1480 Best bound = 1479.86
 
Tuning progress: 23%
Test 'easy':
Integer optimal solution.
Time = 1.01 sec. (702.69 ticks) Objective = 1480 Best bound = 1480
 
Tuning progress: 48%
Test 'less_cuts':
Integer optimal, tolerance.
Time = 0.66 sec. (478.74 ticks) Objective = 1480 Best bound = 1479.86
 
Tuning progress: 78%
Test 'no_node_heuristic':
Deterministic time limit exceeded.
Time = 0.72 sec. (528.83 ticks) Objective = 1480 Best bound = 1442.1
 
Default test: Deterministic time = 764.13 ticks
Best test: 'less_cuts' Deterministic time = 478.74 ticks

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– Advanced start switch
> Especifica se deve usar ou não informação sobre uma solução inicial (se estiver disponível) para iniciar a resolução
> Em problemas de Programação Inteira, pode consistir em usar uma solução incumbente ou continuar com a exploração de uma árvore de partição
– Computation time reporting
> Tipo de tempo de processamento a considerar (user time, tempo de CPU)
– Algorithm for continuous problems
– Algorithm for continuous quadratic optimization
– Global default thread count
> Número de threads a criar pelo motor de optimização qunado invocado em modo de computação paralela (concorrente)
– Global time limit
> Tempo limite de execução (segundos)
– Deterministic time limit
> Tempo limite de execução (ticks)
– Memory available for working storage
> Limite ao valor da memória que o motor de optimização é autorizado a usar
– Parallel mode switch
> Modo como as soluções são obtidas entre diferentes execuções do modelo quando a resolução é feita em modo paralelo
> Modo “determinístico”, a forma como são exploradas as soluções é mantido entre diferentes execuções do modelo, conduzindo às mesmas
soluções
– Solution target
> Aplica-se a problemas quadráticos através do método barrier

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– Memory reduction switch
> Indica ao motor de optimização que deve aplicar estratégias para reduzir a memória usada
> Recorre a compressão de dados, ou armazenamento em disco
– MIP emphasis switch
> Controla equilíbrio entre velocidade de computação, validade das soluções, optimalidade e qualidade dos limites
> CPX_MIPEMPHASIS_BALANCED: procura provar rapidamente a optimalidade de uma solução, e ao mesmo tempo
soluções válidas de boa qualidade
> CPX_MIPEMPHASIS_FEASIBILITY: privilegia a geração de uma grande quantidade de soluções válidas
> CPX_MIPEMPHASIS_OPTIMALITY: dá mais importância à obtenção de uma solução comprovadamente óptima ao
detrimento da procura de boas (ou mais) soluções válidas
> CPX_MIPEMPHASIS_BESTBOUND: dá importância máxima à prova de optimalidade, orientando a pesquisa em função
do valor dos limites obtidos
> CPX_MIPEMPHASIS_HIDDENFEAS: dá mais importância à obtenção de soluções válidas; essa opção deve ser escolhida
preferencialmente quando é difícil encontrar uma solução válida para o problema
– Numerical precision emphasis
> Privilegia a precisão numérica (relevante quando o problema é instável do ponto de vista numérico).

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– Mode of FeasOpt
> Aplica-se aos modelos sem soluções válidas (problemas impossíveis): determina a medida das alterções mínimas a
aplicar ao modelo para que passe a ter uma solução válida
> Funciona em 2 passos: 1) determina a relaxação mínima atendendo ao critério escolhido; 2) determina a solução óptima
dentro das relaxações mínimas definidas em 1)
> CPX_FEASOPT_MIN_SUM: minimiza a soma das relaxações aplicadas
> CPX_FEASOPT_OPT_SUM: minimiza a soma das relaxações aplicadas, e determina a solução óptima para as relaxações
correspondentes
> CPX_FEASOPT_MIN_INF: minimiza o número de restrições e limites relaxados
> CPX_FEASOPT_OPT_INF: minimiza o número de restrições e limites relaxados, e determina a solução óptima para as
relaxações correspondentes
> CPX_FEASOPT_MIN_QUAD: minimiza a soma dos quadrados das relaxações aplicadas
> CPX_FEASOPT_OPT_QUAD: minimiza a soma dos quadrados das relaxações aplicadas, e determina a solução óptima para
as relaxações correspondentes
– Relaxation for FeasOpt
> Determina o valor máximo das relaxações a aplicar

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– Preprocessing aggregator application limit
> Número de vezes que o procedimento de agregação é aplicado antes da resolução do problema (para reduzir o número de variáveis e
restrições): -1 (1 para modelos de Programação Linear, +infinito para problemas de Programação Inteira)
– Bound strengthening switch
> Determina se o procedimento de redução dos limites das variáveis deve ser aplicado ou não
– Coefficient reduction setting
> Determina a forma como são aplicadas as estratégias de redução dos coeficientes do modelo
– Dependency switch
> Determina se deve ser usado ou não o procedimento de identificação de restrições mutuamente dependentes
– Presolve dual setting
> Determina se deve ser resolvido o modelo primal ou dual na fase de pré-processamento
– Prepocessing aggregator fill
> Fixa um limite ao número de variáveis que podem ser substituídas através do procedimento de agregação
– Linear reductions switch
> Determina o tipo de reduções a aplicar na fase de pré-processamento (p.ex.: linear (0): as variáveis do modelo original podem ser
representadas através de expressões lineares no modelo na fas e de pré-processamento)
– Limit on the number of presolve passes made
> Limite ao número de iterações do pre-solver na fase de pré-processamento

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– Presolve indicator
> Determina se deve ser utilizado ou não o pre-solver na fase de pré-processamento
– Primal and dual reduction type
> Determina o tipo de reduções a aplicar na fase de pré-processamento (primal, dual, ambas ou nenhuma)
– Relaxed LP presolve switch
> Determina a aplicação do pre-solver na raíz da ávore de partição no caso dos problemas de Programação Inteira
– MIP repeat presolve switch
> Determina se deve ser re-aplicado o pre-solver (possivelmente com cortes) a um modelo de Programação Inteira após o
seu processamento na ráiz da árvore de partição
– Symmetry breaking
> Determina se devem ser aplicadas reduções baseadas na eliminação de simetrias do modelo

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– Presolver
> Pré-processamento de um modelo na tentativa de reduzir a sua dimensão (número de restrições e variáveis)
> Exemplo:
CPLEX> disp pr st
Problem name: scorpion.mps
Constraints : 388 [Less: 48, Greater: 60, Equal: 280]
Variables : 358
Constraint nonzeros: 1426
Objective nonzeros: 282
RHS nonzeros: 76
CPLEX> optimize
Tried aggregator 1 time.
LP Presolve eliminated 138 rows and 82 columns.
Aggregator did 193 substitutions.
Reduced LP has 57 rows, 83 columns, and 327 nonzeros.
Presolve time = 0.00 sec.

Iteration log . . .
Iteration: 1 Dual objective = 317.965093

Dual - Optimal: Objective = 1.8781248227e+03


Solution time = 0.01 sec. Iterations = 54 (0)

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– Simplex crash ordering
> Determina a forma como são tratadas as variáveis na fase de construção de uma solução válida de base inicial

– Dual simplex pricing algorithm


> Determina a forma como são escolhidas as variáveis que entram na base no método Simplex dual

– Simplex perturbation switch


> Determina se os problemas devem ser perturbados ou não (relevante em problemas altamente degenerados)

– Primal simplex pricing algorithm


> Determina a forma como são escolhidas as variáveis que entram na base no método Simplex (primal)

– Perturbation constant
> Determina o valor a usar nas perturbações dos limites superiores e inferiores das variáveis, e nos coeficientes das variáveis na função
objectivo

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX

2013, Cláudio Alves


Motores e algoritmos de optimização
Parâmetros de execução
• Parâmetros OPL – Programação Matemática | CPLEX
– MIP strategy best bound interval
> Determina a frequência com a qual é aplicada a estratégia baseada na escolha do nodo com o melhor limite

– MIP branching direction


> Determina a direcção (ramo) escolhida para percorrer a ávore de partição

– MIP dive strategy


> Determina a estratégia a seguir na avaliação preliminar dos nodos da árvore de partição

– MIP heuristic frequency


> Determina a frequência de utilização (número de nodos) da heurística nos nodos da árvore de partição

– MIP node selection strategy


> Determina a regra de selecção do próximo nodo a explorar

– MIP subproblem algorithm


> Determina o algoritmo a usar para resolver os problemas no nodos da árvore de partição

– MIP variable selection strategy


> Determina a regra a aplicar na selecção da variável a partir da qual se irá realizar a partição

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Informação
– Time: tempo total de processamento
– Time %: percentagem do tempo total dispendido por uma determinada tarefa
– Peak Memory: quantidade máxima de memória usada durante o processamento
– Peak Memory %: percentagem de memória usada (valor do pico máximo) durante o processamento de uma
determinada tarefa
– Self Time: tempo da tarefa menos tempo total gasto pelas subtarefas correspondentes
– Self Time %: percentagem de tempo próprio (self time) em ordem ao tempo total de processamento
– Local Memory: memória usada na execução de um passo, e medida comparando os níveis de memória usada antes
e depois da execução de um passo
– Local Memory %: percentagem de memória local usada em ordem à quantidade de memória total
– Count: número de vezes que o nodo é repetido nesse nível da árvore de partição
– Nodes: número de nodos na árvore de partição contados a partir do nodo ao qual se refere este indicador

Tempos de processamento
O profiler considera apenas tempos reais de processamento
– Tempo de processamento: tempo de execução do código no respectivo thread
– Tempo total (user time): tempo total gasto na execução de uma tarefa considerando todas as operações “externas”
que possam ter sido executada ao mesmo tempo (operações de I/O, …)

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Exemplo I
(profiler.mod)

int n = 300;
range r = 1..n;
int Values1[r][r];

execute INIT_Values1 {
for( var i in r )
for( var j in r )
if ( i == 2*j )
Values1[i][j] = i+j;
writeln(Values1);
}

int Values2[i in r][j in r] = (i==2*j) ? i+j : 0;

execute INIT_Values2 {
writeln(Values2);
}

tuple T {
int i;
int j;
}
{T} indexes = { < i , 2 * i > | i in r };
int Values3[<i,j> in indexes] = i+j;

execute INIT_Values3 {
writeln(Values3);
}

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Exemplo I
(profiler.mod)

TEMPOS DE PROCESSAMENTO

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Exemplo I
(profiler.mod)

MEMÓRIA

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Exemplo II
(scalableWarehouse.mod)

int Fixed = 10; int NbWarehouses = 50; int NbStores = 200;


assert( NbStores > NbWarehouses );
range Warehouses = 1..NbWarehouses;
range Stores = 1..NbStores;
int Capacity[w in Warehouses] = NbStores div NbWarehouses + w % (NbStores div NbWarehouses);
int SupplyCost[s in Stores][w in Warehouses] = 1 + ( ( s + 10 * w ) % 100 );
dvar int Open[Warehouses] in 0..1;
dvar float Supply[Stores][Warehouses] in 0..1;
dexpr int TotalFixedCost = sum( w in Warehouses ) Fixed * Open[w];
dexpr float TotalSupplyCost = sum(w in Warehouses, s in Stores) SupplyCost[s][w] * Supply[s][w];

minimize TotalFixedCost + TotalSupplyCost;


subject to {
forall( s in Stores )
ctStoreHasOneWarehouse:
sum( w in Warehouses )
Supply[s][w] == 1;
forall( w in Warehouses )
ctOpen:
sum( s in Stores )
Supply[s][w] <= Open[w] * Capacity[w];
}

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Exemplo II
(scalableWarehouse.mod)

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Exemplo II
(scalableWarehouse.mod)

EXTRACT <modelo>-<número aleatório>: extracção do modelo do OPL para o CPLEX

2013, Cláudio Alves


Desempenho
Avaliar a execução de um modelo
• Profiler do IDE | Exemplo II
(scalableWarehouse.mod)

2013, Cláudio Alves


Bibliografia
• IBM Corporation, “Optimization modeling with IBM ILOG OPL”, 2009.
• IBM Corporation, “IBM ILOG OPL Language User’s Manual v6.3”, 2009.
• IBM Corporation, “IBM ILOG CPLEX Optimization Studio V12.5 documentation”, 2009.

2013, Cláudio Alves

Você também pode gostar