Package: plingo
PlingoA system forprobabilistic reasoning in clingo.The system is based on LP^MLN, and providesfront-endsfor different probabilistic logic languages:lpmln[1]p-log[2]problog[3].While the basicsyntaxofplingois the same as the one ofclingo, itssemanticsrelies on re-interpreting the cost of a stable model at priority level0as a measure of its probability.Solving exploits the relation between most probable stable models and optimal stable models[4]; it relies onclingo's optimization and enumeration modes, as well as anapproximation methodbased on answer set enumeration in the order of optimality[5].Theplingosystem can be used to solve tworeasoning tasks:MPE inference: find a most probable explanation (stable model)Marginal inference: find all stable models and their probabilitiesA number ofexamplescan be foundhere. There are also sub-directories containing examples using our front-ends for the other probabilistic logic languages.InstallationWith codaconda install -c potassco plingoWith pippip install plingoFrom sourcegit clone https://github.com/potassco/plingo.git
cd plingo
pip install .Usageplingois an extension of clingo, therefore it counts with all of clingo's functionality with new options.Run the following command and look atplingo's latest options under Plingo Options:plingo -hCommand line options--allEnumerates all stable models and prints their probabilities.--evid=fileProvides an evidence file to the program (.lpfile with clingo syntax rules)--frontend=modeSpecifies which frontend to use (lpmln,lpmln-alt,problog,plog).
Modelpmln-altis the alternative definition where hard rules have to be satisfied.
When using modelpmlnhard rules are also translated which can be useful for debugging or resolving inconsistencies in the program.--problog=output'Uses reificiation to translate a plingo program to a program which be can be given as input to the ProbLog system.
The ProbLog program is saved under the path given inoutput.
The input can also be given in any of the frontends (lpmln,lpmln-alt,problog,plog).--query='atom'Adds a query atomatom, e.g. using the example from above--query='bird(jo)'. The argument has to be inside single quotation marks (otherwise the command-line might not be able to parse it correctly).--two-solve-callsUses two solve calls: The first one finds the minimal bound for weak constraints priorities higher than 0. The second one solves for probabilistic stable models of LP^MLN.--unsatUses the conversion withunsatatomsExamplesMPEFind a most probable stable modelplingo examples/lpmln/birds.plp --frontend lpmln-altplingo version 1.1.0
Reading from examples/birds.lp
Solving...
Answer: 1

Optimization: 300000
Answer: 2
residentBird(jo) bird(jo)
Optimization: 100000
OPTIMUM FOUND

Models       : 2
  Optimum    : yes
Optimization : 100000
Calls        : 1
Time         : 0.005s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time     : 0.005sMarginal probabilitiesTo list all stable models, add the flag--all.plingo examples/lpmln/birds.plp --all --frontend lpmln-altplingo version 1.1.0
Reading from examples/birds.lp
Solving...
Answer: 1

Optimization: 300000
Answer: 2
residentBird(jo) bird(jo)
Optimization: 100000
Answer: 3
migratoryBird(jo) bird(jo)
Optimization: 200000


Probability of Answer 1: 0.09003
Probability of Answer 2: 0.66524
Probability of Answer 3: 0.24473


OPTIMUM FOUND

Models       : 3
  Optimum    : yes
Calls        : 1
Time         : 0.006s (Solving: 0.00s 1st Model: 0.00s Unsat: 0.00s)
CPU Time     : 0.006sApproximation algorithmFor large problems it is infeasible to determine all stable models.
Plingo offers an option to determine approximate probabilities using
answer set enumeration by optimality (ASEO)[1].For approximation of probabilistic queries it is recommended to use the--opt-enumoption together with--balanced=N.--opt-enumEnumerates stable models by optimality.
This can be used for approximating probabilities and queries.
Recommended to use along with -q1 to suppress printing of intermediate models--balanced=NApproximates a query in a balanced way, i.e. it will determine N stable models containing the query, and N stable modelsnotcontaining the query. This overwrites clingo's--modelsoption. Works only for a single ground query atom!--use-backendAdds constraints for query approximation in backend instead of using assumptions.Using ProbLog as a solverWith the--problogoption it is possible to translate a plingo program to a problog program
which can be solved by the ProbLog system (https://github.com/ML-KULeuven/problog).
This can also be combined with using any of the frontends.
The input file needs to contain at least one query when using marginal inference.plingo examples/lpmln/birds.plp examples/lpmln/birds_query.plp --frontend=lpmln-alt --problog=problog.lp >/dev/null; problog problog.lpshow(residentBird(jo)): 0.66524095Input LanguageSyntactically, LPMLN differs between "soft" rules and "hard" rules, where "soft" rules have a (real number) weight and "hard" rules the weight "alpha".Weights can be added by the theory atom&weight/1to the body of a rule. The argument has to be an integer or a string containing a float or an expression like2/3. For examplea(X) :- b(X), &weight(5).
b(X) :- &weight("-2/3").Further it is possible to use the theory atoms&log/1or&problog/1which only accept strings as arguments. The atom&log/1uses the natural logarithmlog(p)of its argumentpas weight. The atom&problog/1uses the natural logarithm ofp/(1-p)as its weight.
Rules that do not have any weight in the body are assumed to be hard rules.To compute LPMLN programs, a rule in an LPMLN program is converted to ASP with weak constraintsBy default, only soft rules are converted. To convert hard rules as well, the--hrflag can be added on the command line. This option essentially makes hard rules optional, whereas in the default setting all hard rules have to be satisfied as usually in ASP.References[1]J. Lee and Y. Wang. (2016).
Weighted Rules under the Stable Model Semantics[2]C. Baral and M. Gelfond and J.N. Rushton. (2009),
Probabilistic Reasoning with Answer Sets[3]L. De Raedt and A. Kimmig and H. Toivonen
ProbLog: A Probabilistic Prolog and its Applications in Link Discovery[4]J. Lee and Z. Yang (2017).
LPMLN, Weak Constraints and P-log[5]J. Pajunen and T. Janhunen. (2021).
Solution Enumeration by Optimality in Answer Set Programming.
Theory and Practice of Logic Programming, 21(6), 750-767.