190 likes | 316 Views
Optimização. Na programação por restrições, há que considerar não apenas a satisfação de restrições mas também a optimização de uma função objectivo. Esta optimização já foi explicitamente considerada no caso da programação linear em que o domínio das variáveis eram os números racionais/reais.
E N D
Optimização • Na programação por restrições, há que considerar não apenas a satisfação de restrições mas também a optimização de uma função objectivo. • Esta optimização já foi explicitamente considerada no caso da programação linear em que o domínio das variáveis eram os números racionais/reais. • Há que abordar agora os casos em que • as variáveis podem tomar apenas um número finito de valores (inteiros) • as restrições não sejam lineares. • Esta optimização pode ser feita de uma forma construtiva, ou de uma forma reparativa.
Optimização • Na versão construtiva, o processo de optimização pode ser vista como a progressiva instanciação de valores às variáveis que modelam o problema. • Na versão reparativa, a optimização vai iterativamente procurando, a partir de uma “solução” completa mas não satisfatória, melhores soluções na vizinhança da solução corrente. • A simples extensão da programação linear com variáveis booleanas 0/1 é adequada para modelar uma série de problemas, permitindo: • A escolha (disjunção) de restrições; • Violações da proporcionalidade; • Não linearidades.
Optimização Exemplo 1: Escolha de 1 de 2 restrições Pretende-se satisfazer uma de entre as duas restrições X1 + 2X2 3 2X1 + X2 3 Introduzindo-se uma constante M suficientemente grande, a disjunção anterior pode ser modelada através de uma variável Booleana Z X1 + 2X2 3 + MZ 2X1 + X2 3 + M(1-Z) De facto, se Z = 0, a 1ª restrição é imposta e a 2ª restrição é trivialmente satisfeita. Se Z = 1, é a 2ª restrição que é imposta e a 1ª que é trivial.
Optimização Exemplo 2: Escolha de pelo menos k de m restrições Pretende-se satisfazer k de m restrições A11 X1 + ... + A1nXn B1 ... Am1 X1 + ... + AmnXn Bm Introduzindo-se uma constante M suficientemente grande, a selecção anterior pode ser modelada através de variáveis Booleana B1, ..., Bm fazendo para todas as restrições Ai1 X1 + ... + AinXn Bi + M(1-Zi) Impondo a restrição adicional Z1 + Z2 + ... + Zm k O que garante que pelo menos k restrições sejam impostas (não trivialmente satisfeitas).
Optimização Exemplo 3: Não proporcionalidade da função objectivo Em muitos casos os custos não são lineares às unidades produzidas (C = c1Xi), mas deve considerar-se um custo fixo de início de produção. C = 0 se Xi = 0 = ki + ciXi se Xi > 0 Introduzindo-se uma variável booleana Zi, denotando a existência ou não de produção, o custo é expresso por C = kiZi + ciXi A condição Xi> 0 Zi=1 é imposta pela restrição Xi M Zi A condição Xi=0 Zi=0 é garantida, indirectamente, pela minimização do custo.
Optimização Exemplo 4: Restrições não lineares As restrições não lineares podem ser aproximadas por troços. Por exemplo, Y = X2, com X entre 0 e 4 pode ser aproximada por Z1 Y1 = 0 + 1X1para0 X 1 Z2 Y2 = 1 + 3X2para1 X 2 Z3 Y2 = 4 + 5X3para2 X 3 Z4 Y3 = 9 + 7X4para3 X 4 Para apenas um troço estar “activo”, a activação de uma só das variáveis Zi que identifica um troço é feita através de Y = Y1 + ... + Y4e Z1 + ... + Z4 = 1 E a ligação entre as variáveis X e Zi é feita por M(1-Z3) X-3eM(1-Z3) 2-X
Optimização • A optimização feita de uma forma construtiva utiliza de uma forma geral dois tipos de técnicas • Pesquisa • Relaxação • Estes conceitos são ilustrados no seguinte problema BIP (Binary Integer Programming) Max Z = 9x1 + 5 x2 +6 x3 + 4x4 Suj a 6x1 +3x2+ 5x3+ 2x4 10 -x3+ 2x4 10 -x1 + x3 0 -x2 + x4 0
Optimização Max Z = 9x1 + 5 x2 +6 x3 + 4x4 Suj a 6x1 +3x2+ 5x3+ 2x4 10 -x3+ 2x4 1 -x1 + x3 0 -x2 + x4 0 Como as variáveis são binárias X1 = 0 / 1 e o problema decompõe-se nos problemas Max 5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 10 -x3+ 2x4 1 x3 0 -x2 + x4 0 Max 9+5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 4 -x3+ 2x4 1 x3 1 -x2 + x4 0
Optimização A relaxação do problema (neste caso) traduz-se em considerar as variáveis não inteiras mas sim tomando valores no intervalo [0..1]. Neste caso, os subproblemas podem ser considerados como problemas de programação linear, o que origina os máximos 9 com (0,1,0,1) Max 5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 10 -x3+ 2x4 1 x3 0 -x2 + x4 0 16.2 c/(1,.8,0,.8) Max 9+5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 4 -x3+ 2x4 1 x3 1 -x2 + x4 0 Desta forma a pesquisa é mais promissora por X1 =1
Optimização A relaxação do problema (neste caso) traduz-se em considerar as variáveis não inteiras mas sim tomando valores no intervalo [0..1]. Neste caso, os subproblemas podem ser considerados como problemas de programação linear, o que origina os máximos 9 com (0,1,0,1) Max 5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 10 -x3+ x4 1 x3 0 -x2 + x4 0 16.2 c/(1,.8,0,.8) Max 9+5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 4 -x3+ x4 1 x3 1 -x2 + x4 0 Desta forma a pesquisa é mais promissora por X1 =1
Optimização Deste passo interessa considerar que: O problema X1 = 0 tem uma solução exacta. Assim, só interessará explorar problemas com o potencial de melhorarem o óptimo provisório de 9. O problema X1 = 1 tem uma solução potencial de 16.2 pelo que parece melhor que o anterior. A heurística de pesquisa é pois de explorar primeiro o subproblema. 16.2 c/(1,.8,0,.8) Max 9+5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 4 -x3+ x4 1 x3 1 -x2 + x4 0
Optimização Decompondo o problema na variável X2 teremos: 16.2 c/(1,.8,0,.8) Max 9+5 x2 +6 x3 + 4x4 Suj 3x2+ 5x3+ 2x4 4 -x3+ x4 1 x3 1 -x2 + x4 0 13.8 com (1,0,.8,0) Max 9+ 6 x3 + 4x4 Suj 5x3+ 2x4 4 -x3+ x4 1 x3 0 x4 0 16 c/(1,1,0,.5) Max 14 +6 x3 + 4x4 Suj 5x3+ 2x4 1 -x3+ x4 1 x3 1 x4 1
Optimização Pelas razões anteriores prosseguiremos com X1=1 e X2=1: 16 c/(1,1,0,.5) Max 14 +6 x3 + 4x4 Suj 5x3+ 2x4 1 -x3+ x4 1 x3 1 x4 1 16 com (1,1,0,.5) Max 14+ 4x4 Suj 2x4 1 x4 1 0 0 x4 1 Max 20 + 4x4 Suj 2x4 -4 x4 2 1 1 x4 1
Optimização Prosseguindo com X1=1 , X2=1 e X3=0 : 16 com (1,1,0,.5) Max 14+ 4x4 Suj 2x4 1 x4 1 0 0 x4 1 18 com (1,1,0,0) Max 18 Suj 2 1 1 1 0 0 1 1 16 com (1,1,0,0) Max 14 Suj 0 1 0 1 0 0 0 1
Optimização Analisando a solução X1=1 , X2=1 , X3=0 e X4 = 0: 16 com (1,1,0,0) Max 14 Suj 0 1 0 1 0 0 0 1 • Verificamos que • A solução é inteira. • O seu valor é melhor que o máximo potencial dos subproblemas em aberto, que podem ser abandonados
Optimização • Estas técnicas de base são usadas pelo algoritmo branch and bound utilizado para a obtenção do óptimo de uma forma construtiva, mesmo que o problema não envolva aenas variáveis binárias. • Assim • Um problema pode ser subdividido em dois (ou mais) subproblemas (Branch). • O potencial de cada subproblema é avaliado, por uma técnica de relaxação (aproximação) (Bound) • Os problemas sem potencial de melhorarem a melhor solução corrente são abandonados.
Optimização • Outras técnicas podem ser utilizadas em alguns casos (BIP) • Eliminação de restrições redundantes • x4 1 • Fixação de variáveis • x3 0 x3= 0 • Geração de planos de corte (cutting-planes) • 6x1+3x2+5x3+2x4+ 10 • Pode gerar • x1 +x3 1 • x1 +x2 +x4 2
Optimização • Estas técnicas podem ser utilizadas em Mixed Integer Programming, com as adaptações óbvias • A decomposição é feita normalmente através de uma valor de corte. • Se X [0..8] então X 4 e X > 4 • A geração de planos de corte é mais problemática • As aproximações são feitas com aritmética de intervalos que levanta alguns problemas de aproximação, mas permite calcular bounds seguros, mesmo que não muito bons.
Optimização O SICStus permite a optimização quer em MIP quer em IP