• Nenhum resultado encontrado

Baseado nas soluções assíncronas fatoradas para MDPs (Holguin,2013), o algoritmo factRTDP- IP combina as idéias do SPUDD-IP (Delgado et al.,2011) (Seção5.2.2) e do RTDP-IP (Seção6.1).

factRTDP-IP Update Assim como o RTDP, o Bellman update é realizado somente para o estado que está sendo visitado no trial, conforme a seguinte Equação:

Vt+1(⃗x) = min

a∈A

{

6.3 O ALGORITMO FACTRTDP-IP 47

Algoritmo 15: LRTDP-IP(V0, SSP M DP − IP, maxtime, ϵ) → V

início

1

// Inicializa V com uma função valor admissível V0

2

V := V0

3

// O CredalSetVerticesHash mapeia cada conjunto credal para os seus vértices

4

CredalSetVerticesHash := ∅

5

// Calcula os vértices e os pontos aleatórios de todos os conjuntos credais se necessário

6 se (predened_parameter_choice) então 7 CredalSetVerticesHash := ComputeAllCredalSetVertices () 8 p :=ComputeRandomPointForAllCredalSets ( 9 CredalSetVerticesHash)

enquanto (não excedeu maxtime ∧ ¬s0.Solved()) faça

10

visited.Clear() // Limpa a pilha de estados visitados

11

s := s0

12

enquanto (¬s.Solved()) faça

13 visited.Push(s) 14 se (s ∈ G) então 15 break 16 17 ⟨V (s), ⃗p′⟩ := s.RTDP-IP-Update(V ) 18 se (minimax_parameter_choice) então 19 p := ⃗p′ 20 a := s.GreedyAction(V ) 21 s := s.RTDP-IP-Sampling(a, ⃗p) 22 23

// Verica a convergência dos estados

24

enquanto (¬visited.Empty()) faça

25 s :=visited.Pop() 26 se (¬s.CheckSolved-IP(V, ϵ)) então 27 break 28 29 30 retorna V 31 m 32 em que

Qt+1(⃗x, a) = EvalP ADD(CDD( ⃗X, a), ⃗x)⊕

max p∈Kax′1,···x′n ni=1

(pEvalP ADD(PDD(Xi′|paa(Xi′), a), ⃗x))⊗ VDDt ( ⃗X′) . (6.5)

Note que, após calcular a Equação (6.5) Qt+1(⃗x, a) e Vt+1(⃗x) viram valores reais, de forma

diferente da ADD resultante calculada pelo backup do SPUDD-IP (Equações 5.7 e 5.8), em que

Qt+1DD( ⃗X, a)e VDDt+1( ⃗X)são ADDs representando os valores correspondentes para o conjunto completo

de estados. Isto ocorre devido ao algoritmo explorar o espaço de estados em trials e realizar Bellman updates somente para o estado atualmente visitado, fazendo com que seja obtido somente o valor constante Vt+1 para o estado ⃗x.

Como no SPUDD-IP, o cálculo da Equação (6.5) pode ser realizada de forma eciente eliminando uma variável de cada vez, desde que ela não dependa de outra variável. Por exemplo, se X′

1 não é dependente de outra X′

i,∀i ̸= 1 utilizando a ação a, é possível empurrar a soma sobre X1 para dentro, expandindo a Equação (6.5) em:

Figura 6.3: PADD resultante da operação pEvalP ADD(PDD(Xi′|paa(Xi′), a), ⃗x).

Figura 6.4: Eliminação de variáveis no factRTDP-IP.

Qt+1(⃗x, a) = EvalP ADD(CDD( ⃗X, a), ⃗x)⊕

max p∈Kax′1,··· ,x′n ni=2

pEvalP ADD(PDD(Xi′|paa(Xi′), a), ⃗x)⊗

x1

pEvalP ADD(PDD(X1′|paa(X1′), a), ⃗x)⊗ VDDt ( ⃗X′), (6.6)

que pode ser repetida para todas as variáveis, obtendo:

Qt+1(⃗x, a) = pEvalP ADD(CDD( ⃗X, a), ⃗x)⊕

max

p∈Ka

xn

pEvalP ADD(PDD(Xn′|paa(Xn′), a), ⃗x)⊗

· · ·

x2

pEvalP ADD(PDD(X2′|paa(X2′), a), ⃗x)⊗

x1

pEvalP ADD(PDD(X1′|paa(X1′), a), ⃗x)⊗ VDDt ( ⃗X′). (6.7)

Como X′

i representa uma variável Xi no próximo estado e paa(Xi′) os pais de Xi′,

pEvalP ADD(PDD(Xi′|paa(Xi′)), ⃗x), que aplica a operação de restrição para cada variável de estado,

resulta em um PADD mostrado na Figura6.3, com uma única variável X′ i.

A Figura 6.4 mostra como a eliminação de variável ocorre (considerando a ordem topológica das variáveis X′

i). Um exemplo desta operação pode ser visto na Figura 6.5 para o estado vi-

sitado ⃗x = {X1 = 1, X2 = 1} e a ação a. A Figura 6.5a mostra o produto entre a primeira função valor V0

DD( ⃗X′) (obtida após colocar linha as variáveis de VDD0 ( ⃗X)) e as probabilidades

de transição para X′

1 dado o estado atual ⃗x (i.e., o PADD resultante após aplicar a operação

pEvalP ADD(PDD(X1′|paa(X1′), a), ⃗x)); Na Figura 6.5b, com o resultado do último produto, a variável X′

6.3 O ALGORITMO FACTRTDP-IP 49

Figura 6.5: Exemplo das operações de PADD para calcular a Equação (6.7) para o estado visitado ⃗x =

{X1= 1, X2= 1} e a ação a.

pode ser eliminada multiplicando o resultado anterior pelas probabilidades de transição de X′

2 dado o estado atual ⃗x e a ação a (Figura 6.5c). Finalmente, na Figura 6.5d a marginalização sobre

x′2. é aplicada. Note que a PADD resultante corresponde a um polinômio multilinear. Isso é impor-

tante pois para realizar otimizações multilineares existem implementações ecientes que podem ser utilizadas na prática.

Em seguida, para realizar a maximização sobre os parâmetros na Equação (6.5), a operação Max- ParameterOut é aplicada. Note que maximizar os parâmetros em PADDs é equivalente a maximizar parâmetros nas folhas. Ela é realizada através da chamada de um solver não linear para uma folha no PADD, que resulta em um ADD com uma folha, i.e., que corresponde a um valor real. Para o exemplo mostrado na Figura6.5, o solver é chamado para (1−p12)(1−p24)(Figura6.5d) e para o conjunto de restrições φ, retornando os valores {p11= 0, p12= 0.8, p21= 0.5, p22= 0.5, p23= 0.25, p24= 0.15} e o valor do polinômio. Esse valor é usado com EvalP ADD(CDD( ⃗X, a), ⃗x)para calcular Qt+1(⃗x, a).

Finalmente, na Equação (6.4) a minimização sobre os valores de Qt+1 para todas as ações é

realizada, resultando na constante Vt+1, que o factRTDP-IP insere na função valor atual Vt DD para

obter Vt+1

DD . Esta inserção é feita construindo um ADD de função indicador ⃗xDD que tem o valor 1

para o estado ⃗x e 0 para os outros, i.e., dado a atribuição de variáveis ⃗v:

EvalADD(⃗xDD, ⃗υ) =

{

1 if ⃗υ = ⃗x

0 caso contrário. (6.8)

Uma maneira de construir a função indicadora ⃗xDD é utilizar a operação de produto sequencial

n

i=1XiDD, em que XiDD é o PADD de uma variável:

Xi

(xi) (1− xi)

que associa xi para a ramicação verdadeira e (1 − xi) para a ramicação falsa.

Assim, o valor Vt+1(⃗x) pode ser mascarado na antiga função valor Vt

DD( ⃗X) para se obter a

função atualizada Vt+1

DD( ⃗X)através do cálculo V t

Figura 6.6: Inserção de Vt+1(⃗x) em Vt

DD( ⃗X): o novo valor 2.25 para o estado ⃗x = {X1 = 1, X2 = 1}

calculado pela Equação (6.4), dado que o antigo valor era 2. a) Calcula o produto da diferença entre Vt+1(⃗x)

e Vt(⃗x) e a função indicadora ⃗x

DD que tem o valor 1 para o estado ⃗x e 0 para os demais. b) Obtém o

resultado e soma com a antiga função valor Vt

DD( ⃗X). c) Por m, V t+1

DD ( ⃗X), o ADD resultante de calcular

Vt

DD⊕ ((Vt+1(⃗x)− Vt(⃗x))⊗ ⃗xDD).

na Figura6.6. Nesta notação é utilizado DD para funções representadas por ADDs e por PADDs;

x para representar um estado e ⃗X para representar um vetor com variáveis de estado binárias.

Amostragem de estados no factRTDP-IP Nesta operação, os métodos apresentados na Seção

6.1são novamente considerados para se escolher o valor dos parâmetros de probabilidade, i.e., mi- nimax_parameter_choice, predened_parameter_choice e rand_parameter_choice. Note que para o segundo e o terceiro método, como feito na Seção 6.1.1, é necessário calcular os vértices dos conjuntos credais de transição fatorados. Após obter os valores para ⃗p, o factRTDP-IP realiza a amostragem de cada variável X′

i do próximo estado baseados no CPT da ação a escolhida, i.e.:

x.NextStateVar(Xi′, a, ⃗p) = x′i∼ P (·|⃗x, a), (6.9)

em que a distribuição de probabilidades P (·|⃗x, a) é obtida a partir das folhas do ADD retornado por V alP ADDLeaves(pEvalP ADD(PDD(Xi′|paa(Xi′), a), ⃗x), ⃗p).

Note que este ADD tem uma única variável X′

i (i.e., o resultado da avaliação de PDD com as

atribuições de variáveis ⃗x e os parâmetros de probabilidade ⃗p). A Figura 6.7 mostra um exemplo do processo de escolha do próximo estado ⃗x′, dado que o estado atual é ⃗x = {X1 = 1, X2 = 1}

e os valores de parâmetros escolhidos são p11 = 0, p12 = 0.8, p21 = 0.5, p22 = 0.5, p23 = 0.25 e

p24= 0.15. A Figura 6.7mostra como amostrar as variáveis X1 e X2.

O algoritmo factRTDP-IP (Algoritmo 16) inicializa VDD como um ADD com uma função

valor admissível e realiza uma série de trials que vão até atingir um estado meta. Para cada estado visitado, o algoritmo factRTDP-IP-Update é chamado (Algoritmo 16, Linha 16) retornando a função valor atualizada e os valores dos parâmetros que podem ser reusados pelo método mini- max_parameter_choice. Após escolher a ação gulosa (Algoritmo 16, Linha 19), a amostragem do

6.3 O ALGORITMO FACTRTDP-IP 51

Figura 6.7: Amostragem do factRTDP-IP para as variáveis de estado X′

1 e X2 dado o estado

atual visitado ⃗x = {X1 = 1, X2 = 1} e os valores para os parâmetros ⃗p. a) Aplicação de

V alP ADD(pEvalP ADD(PDD(X1′|X1, a1), ⃗x), ⃗p) e amostragem do valor para X1 com 0.2 para X1 = 1

e 0.8 para X′

1= 0. b) V alP ADD(pEvalP ADD(PDD(X2′|X1, X2, a1), ⃗x), ⃗p) e amostragem de X2 com 0.85

para X′

1= 1 e 0.15 para X2 = 0.

Algoritmo 16: factRTDP-IP(V0

DD, F actSSP M DP − IP, maxtime) → VDD

início

1

// Inicializa VDD com uma função valor admissível V0

DD

2

VDD:= VDD0

3

// O CredalSetVerticesHash mapeia cada conjunto credal para os seus vértices

4

CredalSetVerticesHash := ∅

5

// Calcula os vértices e os pontos aleatórios de todos os conjuntos credais se necessário

6 se ( predened_parameter_choice) então 7 CredalSetVerticesHash := ComputeAllCredalSetVertices () 8 p :=ComputeRandomPointForAllCredalSets ( 9 CredalSetVerticesHash) 10

enquanto (não excedeu maxtime) faça

11

visited.Clear() // Limpa a pilha de estados visitados

12 x := ⃗x0 13 enquanto (⃗x /∈ G) faça 14 visited.Push(⃗x) 15 ⟨VDD(⃗x), ⃗p′⟩ := ⃗x.factRTDP-IP-Update(VDD) 16 se ( minimax_parameter_choice) então 17 p := ⃗p′ 18 a := ⃗x.GreedyAction(VDD) 19 x := ⃗x.factRTDP-IP-Sampling(a, ⃗p) 20 21

enquanto ¬visited.Empty() faça

22 x :=visited.Pop() 23 ⟨VDD(⃗x), ⃗p′⟩ := ⃗x.factRTDP-IP-Update(VDD) 24 25 retorna VDD 26 m 27

próximo estado é realizada (Algoritmo 16, Linha 20). Da Linha 22 a 25, o algoritmo atualiza todos os estados visitados em um trial em ordem reversa (do estado nal ao estado inicial).

Algoritmo 17: factRTDP-IP-Update(Vt

DD, ⃗x) −→ (VDDt+1, ⃗p) início

1

para todo a ∈ A faça

2

// Multiplica cada CPT em Vt

DD(⃗x′) e aplica o sum out

3 QaDD:=ConvertToPrimes(V t DD) 4 para todo X′ i em QaDD faça 5 QaDD:= Q a

DD⊗ pEvalP ADD(PDD(Xi′|paa(Xi′), a), ⃗x)

6 Qa DD:= ∑ x′i∈Xi′Q a DD 7

//chama o solver não-linear para cada folha do PADD (aqui o PADD tem apenas uma folha)

8

⟨Qa

DD, ⃗pa⟩ := MaxParameterOut (QaDD,φ)

9

QaDD:= EvalP ADD(CDD( ⃗X, a), ⃗x)⊕ Q a DD

10

// Obtem um valor atualizado v para ⃗x e o insere em Vt DD

11

a := arg mina∈A[Qa

DD] 12 Vt+1:= mina∈A[QaDD] 13 VDDt+1:=factRTDP-IP-MaskedVintoADD(VDDt , ⃗x, V t+1 ) 14 retorna (Vt+1 DD ,⃗pa) 15 m 16 Algoritmo 18: factRTDP-IP-MaskedVintoADD(Vt DD, ⃗x, Vt+1 ) −→ V t+1 DD início 1 Vt:= EvalADD(VDDt , ⃗x) 2 ⃗xDD := ⊗n i=1XiDD 3 VDDt+1:= V t DD⊕ ((Vt+1− Vt)· ⃗xDD) 4 return Vt+1 DD 5 m 6 Algoritmo 19: factRTDP-IP-Sampling(a, ⃗p) −→ ⃗x′ início 1

// Amostra cada variável de estado X′

i do próximo estado da DCN

2

//⃗p inicia com minimax_parameter_choice ou predened_parameter_choice

3 para todo X′ i faça 4 se (rand_parameter_choice) então 5 se (CredalSetVerticesHash.Get(⟨X′

i, ⃗x(paa(Xi)), a′ ⟩)= NULL) então

6

CredalSetVertices := ComputeCredalSetVertices (X′

i, ⃗x(paa(Xi′)), a)

7

CredalSetVerticesHash.Insert(⟨X′

i, ⃗x(paa(Xi)), a′ ⟩, CredalSetVertices)

8 9

p :=ComputeRandomPointCredalSet (

10

Xi′, ⃗x(paa(Xi′)), a,CredalSetVerticesHash)

11

x′i:= ⃗x.NextStateVar (Xi′, a, ⃗p) // De acordo com a Equação (6.9)

12 m 13 retorna ⃗x′:= (x 1, . . . , x′n) 14

o estado ⃗x da seguinte forma: após colocar linha as variáveis de Vt

DD (Algoritmo 17, Linha 4,

que converte cada Xi em Xi′), QaDD é derivado através do cálculo da Equação (6.5) em termos

de operações de PADD (Algoritmo 17, Linhas 5-7). Após aplicar a operação MaxParameterOut (Algoritmo 17, Linha 9) o resultado obtido é um valor real. O cálculo de Vt+1(⃗x) produz uma

constante Vt+1 para um ⃗x conhecido (Algoritmo 17, Linha 13), então o factRTDP-IP insere esta

nova constante Vt+1 na função valor atual Vt

DD para obter V t+1

DD chamando o método factRTDP-

IP-MaskedVintoADD (Algoritmo18).

O algoritmo factRTDP-IP-Sampling (Algoritmo 19) amostra o próximo estado ⃗x′ dado o

estado atual ⃗x, a ação a e o parâmetro ⃗p. Para escolher os valores para os parâmetros ⃗p um dos seguintes métodos é utilizado: minimax_parameter_choice, predened_parameter_choice ou

6.5 O ALGORITMO FACTLRTDP-IP 53

rand_parameter_choice.

Caso a escolha seja o método minimax_parameter_choice, ⃗p terá os mesmos valores que fo- ram calculados para a ultima atualização. Caso seja o método predened_parameter_choice, ⃗p é calculado somente uma vez no inicio do Algoritmo 16 (Linhas 7-9) calculado primeiro os vér- tices de todos os conjuntos credais (armazenados em uma tabela hash chamada CredalSetVerti- cesHash), e então utilizando estes vértices para gerar os pontos aleatórios. Por m, caso o método rand_parameter_choice tenha sido escolhido, ⃗p é calculado para as tuplas ⟨X′

i, ⃗x(paa(Xi′)), a⟩ com

i = {1, · · · , n}, onde a é a ação gulosa atual e ⃗x(paa(Xi′)) indica os valores dos pais de Xi′ na

atribuição de variáveis ⃗x, i.e., a conguração dos pais de X′

i no estado atual ⃗x (Algoritmo 19,

Linhas 5-10). Note que o tamanho de CredalSetVerticesHash será o número de conjuntos credais para o método predened_parameter_choice e será menor ou igual a este número para o método rand_parameter_choice considerando que nem todos os estados serão visitados. Assim, no pior caso o tamanho será igual a |K|max (Equação5.3). Considerando que estão sendo utilizadas variáveis bi-

nárias e assumindo conjuntos credais fechados e convexos, o número de vértices para cada conjunto credal é igual a 2. Assim o espaço requerido pela tabela CredalSetVerticesHash é proporcional a uma constante vezes |K|max.

Após denir os valores para ⃗p a amostragem é realizada para cada variável X′

i do próximo

estado (Algoritmo 19, Linha 12). Isto é feito utilizando o ADD (da variável X′

i) retornada por

V alP ADDLeaves(pEvalP ADD(PDD(Xi′|paa(Xi′), a), ⃗x), ⃗p), em que estão as probabilidades para

se realizar a amostragem.

Documentos relacionados