Answer set programming: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m tag source deprecati, replaced: <source lang= → <syntaxhighlight lang= (18), </source> → </syntaxhighlight> (18) |
m Bot: numeri di pagina nei template citazione |
||
(5 versioni intermedie di 3 utenti non mostrate) | |||
Riga 1:
L{{'}}'''answer set programming''' ('''ASP''') è una forma di [[programmazione logica]] di tipo [[Programmazione dichiarativa|dichiarativo]] utilizzato per [[Algoritmo di ricerca|problemi di ricerca]] complessi (in primis [[NP-difficile|NP-difficili]]), basata sulla [[semantica del modello stabile]] (o ''answer set'').<ref name="pitoni">{{cita pubblicazione|autore=Valentina Pitoni|titolo=Answer Set Programming|url=http://costantini.di.univaq.it/CorsoAI/Answer%20Set%20Programming.pdf|formato=pdf|editore=[[Università degli Studi dell'Aquila]]|accesso=4 aprile 2016|urlarchivio=https://web.archive.org/web/20161104023636/http://costantini.di.univaq.it/CorsoAI/Answer%20Set%20Programming.pdf
== Storia ==
Il metodo di planning proposto nel 1993 da Dimopoulos, Nebel e Köhler<ref>{{cita libro|lingua=en|nome1=Y. |cognome1=Dimopoulos |wkautore2=Bernhard Nebel |nome2=B. |cognome2=Nebel |nome3=J. |cognome3=Köhler |capitolo=Encoding planning problems in non-monotonic logic programs |pp=
L'espressione "''answer set''" come sinonimo di "''stable model''" fu proposta da Lifschitz.<ref>{{Cita pubblicazione|lingua=en|nome=V. |cognome=Lifschitz |titolo=Action Languages, Answer Sets, and Planning |anno=1999
== AnsProlog ==
[http://www.tcs.hut.fi/Software/smodels/lparse.ps Lparse] è il nome del programma che è stato creato in origine per l{{'}}''answer set solver'' [http://www.tcs.hut.fi/Software/smodels/ smodels]. Il linguaggio che Lparse accetta è AnsProlog. Un programma in AnsProlog consiste di regole scritte nella forma:
<syntaxhighlight lang="prolog">
<head> :- <body> .
Riga 17:
{p,q,r}.
</syntaxhighlight>
afferma: scegli arbitrariamente quali fra gli [[Atomo (logica)|atomi]] <math>p,q,r</math> includere nel modello stabile. Un programma contenente solo questa regola ha 8 modelli stabili, sottinsiemi di <math>\{p,q,r\}</math>. Il significato di questa regola nella semantica del modello stabile è rappresentato dalla formula [[Logica proposizionale|proposizionale]]:
:<math>(p\lor\neg p)\land(q\lor\neg q)\land(r\lor\neg r).</math>
Riga 34:
:<math>\neg((p\land q)\lor(p\land r)\lor(q\land r)).</math>
Le variabili (con iniziale maiuscola, come in Prolog) sono utilizzate per abbreviare collezioni di regole che seguono lo stesso schema, oppure per abbreviare collezioni di atomi all'interno della stessa regola. Ad esempio, il programma:
<syntaxhighlight lang="prolog">
p(a). p(b). p(c).
Riga 70:
== Generazione di modelli stabili ==
Utilizzando il software Lparse<ref>{{cita web|url=http://www.tcs.hut.fi/Software/smodels/lparse.ps|titolo=Lparse|editore=[[Università Aalto|Aalto-yliopisto]] - Laboratory of Theoretical Computer Science|urlarchivio=https://web.archive.org/web/20160320044603/http://www.tcs.hut.fi/Software/smodels/lparse.ps
<syntaxhighlight lang="bash">
% lparse <filename> | smodels
Riga 101:
== Applicazioni ==
=== Colorabilità ===
Riga 127:
In Prolog il problema può essere modellato come segue:
<syntaxhighlight lang="prolog">
dentro(X,Y) | fuori(X,Y) :- arco(X,Y). % ogni arco può essere dentro o fuori
:-dentro(X,Y), dentro (X,Y1), Y<>Y1. % partendo da un vertice non si può giungere a due vertici distinti.
:-dentro(X,Y), dentro (X1,Y), X<>X1. % partendo da due vertici distinti non si può giungere allo stesso vertice.
|