Obsah

Riesenie a priklady

Logicky program pre instalaciu: install.dlv
Logicky program pre odinstalovanie: remove.dlv

Priklad 1:

Vstup:
balik(1,balik1,v1).
balik(2,balik2,v1).
balik(3,balik3,v1).
balik(4,balik4,v1).

depend(1,1).

condition(1,0,eq,balik2,v1,2,3).
condition(2,0,eq,balik3,v1,0,0).
condition(3,0,eq,balik4,v1,0,0).

user_install(balik1,v1).

Vystup:
Best model: {round(0,3), round(0,4), round(1,1)}
Cost ([Weight:Level]): <[3:1]>

Best model: {round(0,2), round(0,3), round(1,1)}
Cost ([Weight:Level]): <[3:1]>

Z balikov 2, 4 mozno vybrat lubovolny, obidve konfiguracie su rovnako dobre. Balik 1 treba instalovat ako posledny.

Priklad 2:

Vstup:
balik(1,balik1,v1).
balik(2,balik2,v1).
balik(3,balik3,v1).
balik(4,balik4,v1).
balik(5,balik5,v1).

depend(1,1).
provide(1,6).
provide(5,7).

condition(1,0,eq,balik2,v1,2,3).
condition(2,0,eq,balik3,v1,0,0).
condition(3,0,eq,balik4,v1,0,0).
condition(6,0,eq,funct,nover,0,0).
condition(7,0,eq,funct,nover,0,0).

user_install(funct,nover).

nover(nover).

Vystup:
Best model: {round(0,5)}
Cost ([Weight:Level]): <[1:1]>

Funkcionalitu funct poskytuju baliky 1 aj 5, ale pri vybrani 5 je vo vyslednej konfiguracii menej balikov, preto je povazovany za lepsiu volbu.

Priklad 3:

Vstup:
balik(1,balik1,v1).
balik(2,balik2,v1).
balik(3,balik3,v1).
balik(4,balik4,v1).
balik(5,balik5,v1).

depend(1,1).
depend(5,4).

condition(1,0,eq,balik2,v1,2,3).
condition(2,0,eq,balik3,v1,0,0).
condition(3,0,eq,balik4,v1,0,0).
condition(4,1,uv,use1,nover,0,5).
condition(5,1,eq,balik1,v1,0,0).

user_install(balik1,v1).
user_install(balik5,v1).

nover(nover).
usevar(use1).

Vystup:
Best model: {round(0,3), round(0,4), round(0,5), round(1,1)}
Cost ([Weight:Level]): <[4:1]>

Best model: {round(0,2), round(0,3), round(0,5), round(1,1)}
Cost ([Weight:Level]): <[4:1]>

Baliky 1 a 5 je mozne sucasne nainstalovat iba vdaka tomu, ze USE flag use1 je zapnuty. Ak by bol vypnuty, neexistovala by ziadna konfiguracia.

Priklad 4:

Vstup:
balik(1,balik1,v1).
balik(2,balik2,v1).
balik(3,balik3,v1).
balik(4,balik4,v1).
balik(5,balik5,v1).

depend(1,1).
depend(5,4).

condition(1,0,eq,balik2,v1,2,3).
condition(2,0,eq,balik3,v1,0,0).
condition(3,0,eq,balik4,v1,0,0).
condition(4,1,uv,use1,nover,0,5).
condition(5,1,eq,balik1,v1,0,0).

nover(nover).
usevar(use1).

installed(balik1,v1).
installed(balik2,v1).
installed(balik3,v1).
installed(balik4,v1).
installed(balik5,v1).

requested(balik1,v1).
requested(balik5,v1).

Vystup:
Best model: {remove(2)}
Cost ([Weight:Level]): <[4:1]>

Best model: {remove(4)}
Cost ([Weight:Level]): <[4:1]>

Ziaden balik nie je oznaceny na odinstalovanie, ale jeden z balikov 2,4 je zbytocny.

Priklad 5:

Vstup:
balik(1,balik1,v1).
balik(2,balik2,v1).
balik(3,balik3,v1).
balik(4,balik4,v1).
balik(5,balik5,v1).

depend(1,1).
depend(5,4).

condition(1,0,eq,balik2,v1,2,3).
condition(2,0,eq,balik3,v1,0,0).
condition(3,0,eq,balik4,v1,0,0).
condition(4,1,uv,use1,nover,0,5).
condition(5,1,eq,balik1,v1,0,0).

nover(nover).
usevar(use1).

installed(balik1,v1).
installed(balik3,v1).
installed(balik4,v1).
installed(balik5,v1).

requested(balik1,v1).
requested(balik4,v1).
requested(balik5,v1).

user_remove(balik1,v1).

Vystup:
Best model: {remove(1), remove(3)}
Cost ([Weight:Level]): <[2:1]>

Pouzivatel prikazal odinstalovanie balika1. Spolu s nim sa odstrania aj vsetky jeho zavislosti, ktore pouzivatel nepozaduje.

Priklad 6:

Vstup:
balik(1,balik1,v1).
balik(2,balik2,v1).
balik(3,balik3,v1).
balik(4,balik4,v1).
balik(5,balik5,v1).

depend(1,1).
depend(5,4).

condition(1,0,eq,balik2,v1,2,3).
condition(2,0,eq,balik3,v1,0,0).
condition(3,0,eq,balik4,v1,0,0).
condition(4,1,uv,use1,nover,0,5).
condition(5,1,eq,balik1,v1,0,0).

nover(nover).
usevar(use1).

installed(balik1,v1).
installed(balik3,v1).
installed(balik4,v1).
installed(balik5,v1).

requested(balik1,v1).
requested(balik5,v1).

user_remove(balik3,v1).

Vystup:
Best model: {remove(3), forceRemove(1), remove(1), remove(4)}
Cost ([Weight:Level]): <[1:1]>

Pouzivatel prikazal odinstalovanie balika3. To je mozne iba ked sa odinstaluje balik1, pretoze balik3 bol jeho zavislostou. Po odinstalovani balika1 bude balik4 zbytocny, preto je takisto mozne odinstalovat ho.