• Nenhum resultado encontrado

Uso de não determinismo. Exemplo

N/A
N/A
Protected

Academic year: 2021

Share "Uso de não determinismo. Exemplo"

Copied!
11
0
0

Texto

(1)

Uso de não determinismo

(2)

Problema dos casamentos estáveis

• Existe um conjunto de N homens e um conjunto de N

mulheres que querem casar.

• Cada homem tem associada uma lista com todas as

mulheres por ordem decrescente das suas preferências

para casamento.

– Idem para cada mulher (que tem uma lista de todos os

homens por ordem decrescente das suas preferências).

• O problema é encontrar um conjunto de casamentos

que sejam todos estáveis.

• Os casamentos são instáveis se existe um homem e

uma mulher que se preferem mais entre eles que aos

seus esposos.

(3)

Instabilidade

• Existe um conjunto de N homens e um conjunto de N mulheres que

querem casar.

• Cada homem tem associada uma lista com todas as mulheres por ordem

decrescente das suas preferências para casamento.

– Idem para cada mulher (que tem uma lista de todos os homens por ordem

decrescente das suas preferências).

• O problema é encontrar um conjunto de casamentos que sejam todos

estáveis.

• Os casamentos são instáveis se existe um homem e uma mulher que se

preferem mais entre eles que aos seus esposos.

• Exemplo de par de casamentos instáveis:

Manuel : Paula (Manuel preferia a Maria)

(4)

N=3

Homens

Preferências

Ana, Rita, Inês

Rui

Inês, Ana, Rita

Ivo

Ana, Inês, Rita

Mulheres

Preferências

Ana

Rui, Zé, Ivo

Rita

Zé, Rui, Ivo

Inês

Zé, Ivo, Rui

Conjuntos estáveis ?

Zé : Ana

Rui : Inês

Ivo : Rita

Zé : Ana

Ivo : Inês

Rui : Rita

Rui : Ana

Ivo : Inês

Zé : Rita

Zé : Ana

Rui :

Inês

Ivo

: Rita

Zé :

Ana

Ivo : Inês

Rui

: Rita

X

X

(5)

Prolog

• O predicado deverá receber uma lista de homens com as

suas preferências e uma lista de mulheres com as suas

preferências e devolver uma lista de pares

homem/mulher com os casamentos.

• Um exemplo duma chamada deste predicado poderá ser:

?- casamentos(

[h(pedro,[maria,paula]), h(manuel,[paula,maria])],

[m(maria,[pedro,manuel]), m(paula,[pedro,manuel])],

C).

C = [c(pedro,maria), c(manuel,paula)] ;

no

(6)

Aproveitar o não determinismo

• Ir (não deterministicamente) gerando casais

– Testando estabilidade com os já gerados

• Gerar casais:

– Para cada homem, escolher uma mulher solteira

casamentos(Homens,Mulheres, Casais) :-

acasala(Homens,Mulheres, [], Casais).

acasala([],[],_,[]).

acasala([h(Homem,PrefsH)|HRest],Ms, Casados,[c(Homem,Mulher)|Cs]) :-

% escolher Mulher

% testar estabilidade

acasala(HRest,MRest, [c(Homem:PrefsH,Mulher:PrefsM)|Casados],Cs).

(7)

Escolher uma mulher…

• member/2 ?

– É preciso memorizar as que ainda ficam solteiras

• Solução: select/3

my_select(X, [X|R], R).

my_select(X, [H|T], [H|R]):- my_select(X, T, R).

• Ficaria:

my_select(m(Mulher,_), Ms, MRest)

• Com heurística (tentar 1º as mais preferidas):

member(Mulher, PrefsH),

(8)

Acasalar…

acasala([],[],_,[]).

acasala([h(Homem,PrefsH)|HRest],Ms, Casados,[c(Homem,Mulher)|Cs]) :-

member(Mulher,PrefsH),

%Heurística: tenta 1º as + preferidas

my_select(m(Mulher,PrefsM), Ms, MRest),

% testar estabilidade

acasala(HRest,MRest, [c(Homem:PrefsH,Mulher:PrefsM)|Casados],Cs).

• Teste de estabilidade

(9)

Instabilidade

𝑖𝑛𝑠𝑡á𝑣𝑒𝑖𝑠 𝐶𝑠, 𝑃𝑟𝑒𝑓𝑠 ↔

<ℎ1,𝑚1>,<ℎ2,𝑚2>∈𝐶𝑠

(𝑝𝑟𝑒𝑓𝑇𝑟𝑜𝑐𝑎𝑟(ℎ1, 𝑚2, 𝑃𝑟𝑒𝑓𝑠) ∨ 𝑝𝑟𝑒𝑓𝑇𝑟𝑜𝑐𝑎𝑟(ℎ2, 𝑚1, 𝑃𝑟𝑒𝑓𝑠))

𝑝𝑟𝑒𝑓𝑇𝑟𝑜𝑐𝑎𝑟 ℎ, 𝑚, 𝑃𝑟𝑒𝑓𝑠 ↔

(𝑝𝑟𝑒𝑓𝑒𝑟𝑒(ℎ, 𝑚, 𝑐𝑜𝑛𝑗𝑢𝑔𝑒 ℎ , 𝑃𝑟𝑒𝑓𝑠) ∧ 𝑝𝑟𝑒𝑓𝑒𝑟𝑒(𝑚, ℎ, 𝑐𝑜𝑛𝑗𝑢𝑔𝑒(𝑚), 𝑃𝑟𝑒𝑓𝑠))

instavel(c(H1:PrefsH1,M1:PrefsM1), [c(H2:PrefsH2,M2:PrefsM2)|_]):-

preferem_trocar(H1,M1, H2,M2, PrefsH1,PrefsM2)

;

preferem_trocar(H2,M2, H1,M1, PrefsH2,PrefsM1).

instavel(Casal, [_|Cs]):- instavel(Casal, Cs).

(10)

Preferir trocar

𝑝𝑟𝑒𝑓𝑇𝑟𝑜𝑐𝑎𝑟 ℎ, 𝑚, 𝑃𝑟𝑒𝑓𝑠 ↔

(𝑝𝑟𝑒𝑓𝑒𝑟𝑒(ℎ, 𝑚, 𝑐𝑜𝑛𝑗𝑢𝑔𝑒 ℎ , 𝑃𝑟𝑒𝑓𝑠) ∧ 𝑝𝑟𝑒𝑓𝑒𝑟𝑒(𝑚, ℎ, 𝑐𝑜𝑛𝑗𝑢𝑔𝑒(𝑚), 𝑃𝑟𝑒𝑓𝑠))

%H1 (casado com M1) e M2 (casada com H2)

%preferem trocar entre eles

preferem_trocar(H1,M1, H2,M2,

PrefsH1,PrefsM2):-antes(PrefsH1, M2,M1),

antes(PrefsM2, H1,H2).

%antes(Prefs, X,Y) :- X está antes de Y em Prefs.

antes([X|_], X,_):- !.

antes([Y|_], _,Y):- !, fail.

(11)

casamentos(Homens,Mulheres, Casais) :- acasala(Homens,Mulheres, [], Casais).

acasala([],[],_,[]).

acasala([h(Homem,PrefsH)|HRest],Ms, Casados,[c(Homem,Mulher)|Cs]) :-

member(Mulher,PrefsH), %Heurística: tenta 1º as + preferidas

my_select(m(Mulher,PrefsM), Ms, MRest), \+ instavel(c(Homem:PrefsH,Mulher:PrefsM), Casados), acasala(HRest,MRest, [c(Homem:PrefsH,Mulher:PrefsM)|Casados],Cs). instavel(c(H1:PrefsH1,M1:PrefsM1), [c(H2:PrefsH2,M2:PrefsM2)|_]):- preferem_trocar(H1,M1, H2,M2, PrefsH1,PrefsM2) ; preferem_trocar(H2,M2, H1,M1, PrefsH2,PrefsM1). instavel(Casal, [_|Cs]):- instavel(Casal, Cs).

%H1 (casado com M1) e M2 (casada com H2) preferem trocar entre eles

preferem_trocar(H1,M1, H2,M2, PrefsH1,PrefsM2):- antes(PrefsH1, M2,M1),

antes(PrefsM2, H1,H2).

%antes(Prefs, X,Y) :- X está antes de Y em Prefs.

antes([X|_], X,_):- !. antes([Y|_], _,Y):- !, fail.

antes([_|L], X,Y):- antes(L, X,Y).

my_select(X, [X|R], R).

Referências

Documentos relacionados

Quando o assunto é a quali- dade dos restaurantes de São Paulo, muito desse constante aprimoramento se deve às tradições que são passadas de pai para filho e, a cada nova

[r]

Org.: Secretaria Regional da Cultura, Turismo e Transportes/ Direção Regional dos Assuntos Culturais/ Museu de Arte Contemporânea do

Pos Nº Piloto Cidade / UF Patrocínio Veiculo (Pos) Cat SS1 Penal... Pos Nº Piloto Cidade / UF Patrocínio Veiculo (Pos) Cat

O método propriamente dito de um trabalho científico só pode ser estabelecido depois que o objetivo tiver sido definido. Por esse motivo, no caso da Computação, normalmente a revisão

Sendo assim, a automação residencial pode prover meios para controlar todos os sistemas da residência como sistema de ar condicionado e aquecimento, home- office, contemplando

Você já reparou que as outras crianças também têm o próprio jeito de ser e de conviver com as pessoas? Que diferenças você observa entre você e os seus amiguinhos?.. Como você

Sua deficiência causa tendências à hemorragias e dificuldade de cicatrização, porém ela é rara, exceto em recém-nascidos e indivíduos que têm alguma doença afetando a