Skip to content

Instantly share code, notes, and snippets.

@So-Cool
Created September 28, 2015 15:18
Show Gist options
  • Save So-Cool/c259174af7867beb1f82 to your computer and use it in GitHub Desktop.
Save So-Cool/c259174af7867beb1f82 to your computer and use it in GitHub Desktop.
`ProbLog2` **pseudo** Jupyter (iPython notebook) interface
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Populating the interactive namespace from numpy and matplotlib\n"
]
}
],
"source": [
"%pylab inline\n",
"\n",
"from problog.program import PrologFile\n",
"from problog.formula import LogicFormula\n",
"from problog.sdd_formula import SDD\n",
"from problog.nnf_formula import NNF\n",
"from problog.cnf_formula import CNF\n",
"\n",
"###############################################\n",
"\n",
"from problog.learning import lfi\n",
"\n",
"###############################################\n",
"\n",
"from matplotlib import pyplot as plt\n",
"import pylab\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"def problog_v1(model) :\n",
" program = PrologFile(model)\n",
" formula = LogicFormula.create_from(program)\n",
" cnf = CNF.create_from(formula)\n",
" nnf = NNF.create_from(cnf)\n",
" return nnf.evaluate()\n",
"\n",
"\n",
"def problog_v2(model) :\n",
" program = PrologFile(model)\n",
" formula = LogicFormula.create_from(program)\n",
" sdd = SDD.create_from(formula)\n",
" return sdd.evaluate()\n",
"\n",
"\n",
"def problog_draw(answer) :\n",
" # print like online interface\n",
" positions_v = np.arange(.5, len(answer), 1)\n",
" values_v = answer.values()\n",
" if len(values_v) == 1:\n",
" positions = positions_v[0]\n",
" values = values_v[0]\n",
" else:\n",
" positions = positions_v\n",
" values = values_v\n",
" plt.barh(positions, values, align='center', height=0.65, color='b')\n",
" plt.axis([0, 1, 0, len(answer)])\n",
" labels = [str(i)+\": %.4f\"%j for i, j in answer.iteritems()]\n",
" pylab.yticks(positions_v, labels)\n",
" plt.show()\n",
" \n",
"\n",
"def problog_eval(model) :\n",
" # write it to temporary file\n",
" model = open('/tmp/ProbLog_JupyterNotebook.pl', 'w')\n",
" model.write(model_str)\n",
" model.close()\n",
" # evaluate it\n",
" answer = problog_v2('/tmp/ProbLog_JupyterNotebook.pl')\n",
"\n",
" print(answer)\n",
" problog_draw(answer)\n",
"\n",
"\n",
"def problog_learn(model_str, data_str) :\n",
" filename = '/tmp/ProbLogLearnModel_JupyterNotebook.pl'\n",
" examplefile = '/tmp/ProbLogLearnData_JupyterNotebook.pl'\n",
"\n",
" # write it to temporary file\n",
" model = open(filename, 'w')\n",
" model.write(model_str)\n",
" model.close()\n",
" model = open(examplefile, 'w')\n",
" model.write(data_str)\n",
" model.close()\n",
"\n",
" examples = list(lfi.read_examples( examplefile ))\n",
" program = PrologFile(filename)\n",
" score, weights, names, iterations = lfi.run_lfi( program, examples)\n",
"\n",
" new_names = []\n",
" for n in names:\n",
" new_names.append((str(n.with_probability()),) + program.lineno(n.location)[1:])\n",
"\n",
" # score, weights, new_names, iterations\n",
" print( \"Stats: score=\" + str(score) + \", iterations=\" + str(iterations) )\n",
"\n",
" answer = {}\n",
" for i in range(len(weights)):\n",
" answer[new_names[i][0]] = weights[i]\n",
" \n",
" print answer\n",
" problog_draw(answer)\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Stats: score=-2.31500761299, iterations=157\n",
"{'stress(X)': 0.6666666666666667, 'influences(X,Y)': 0.3333333333333325}\n"
]
},
{
"data": {
"image/png": "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\nUgf/D25X6ygx3sHtAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10523bf90>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model_str = \"\"\"\n",
"t(_)::stress(X) :- person(X).\n",
"t(_)::influences(X,Y) :- person(X), person(Y).\n",
"\n",
"smokes(X) :- stress(X).\n",
"smokes(X) :- friend(X,Y), influences(Y,X), smokes(Y).\n",
"\n",
"person(1).\n",
"person(2).\n",
"person(3).\n",
"person(4).\n",
"\n",
"friend(1,2).\n",
"friend(2,1).\n",
"friend(2,4).\n",
"friend(3,2).\n",
"friend(4,2).\n",
"\"\"\"\n",
"\n",
"data_str = \"\"\"\n",
"evidence(smokes(2),false).\n",
"evidence(smokes(4),true).\n",
"evidence(influences(1,2),false).\n",
"evidence(influences(4,2),false).\n",
"evidence(influences(2,3),true).\n",
"evidence(stress(1),true).\n",
"\"\"\"\n",
"\n",
"problog_learn(model_str, data_str)"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{excess(8): 0.11805555555555555}\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAcAAAAD7CAYAAAD970SpAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADKlJREFUeJzt3HuM5XdZx/HPQ1uVVrk0xYJcBAkQhEAAQagXVtFYIYAo\nigqISJRgQExMpEEDjREFYoKXRCQo2BBpTRSxodxqdQOpUG3ojdIGqhDKbYUKgkCwlMc/5rfpsGx3\nzi6dc6b7vF7JJOf8znfPPPvdmd97z2WmujsAMM3tNj0AAGyCAAIwkgACMJIAAjCSAAIwkgACMNKJ\nmx6Ar1dVfi4F4Bh0dx3NegHcg472H/F4VVVnd/fZm55jL7AXN7MXN7MXNzuWBw+eAgVgJAEEYCQB\nZC/bv+kB9pD9mx5gD9m/6QH2kP2bHuC2rPwu0L2lqtprgABH51jOnR4BAjCSAAIwkgACMJIAAjCS\nAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIA\nAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgAC\nMNKJmx6Ab1RVvekZbkl316ZnALg1COCetFf7p33A8cNToACMJIAAjCSAAIwkgACMJIAAjCSAAIwk\ngACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSA\nAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAA\njCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACM\nJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwk\ngACMJIAAjCSAAIx0mwlgVX1nVV2wXP62qjq3qq6sqg9U1Vnb1l1UVd+xwv2dWlUXVtUHq+qdVXWn\nW1j3uqo6UFVXHXL8Z6vq6qq6qaoevu34kWZ7WVV9tKq+cCx7AMCt5zYTwCTPT/LXy+WfT5LufkiS\nRyR5blXda7ntvCS/usL9nZXkwu6+f5KLluuH8/okZx7m+FVJnpLkXYccP9Js5yd51AqzAbDLdgxg\nVT2jqi6pqsuq6i+q6nZV9ciquqKqvrWqTqmq91fV9y63/VFVXbXc/vzlPh5RVfur6tKqentV3XU5\n/hvLo6grqurc5dhjl891WVW9r6pOWUZ5apILlsufTHJKVZ2Q5JQk/5fk88tt52eJ0A6elOSc5fI5\nSX7qcIu6+91JPnuY49d29wcP80ducbbuvqS7P7XCbADsshOPdGNVPTDJzyU5o7tvqqo/T/L07n5D\nVZ2f5PeT3D7JG7r7A1X1vCT3SvLQ7v5aVd25qk5K8mdJntjdN1TV05K8LMlzkrwoyb27+8aqusPy\naX8rya9393uq6uQkX1mCeVN3fylJuvsdVfXMbMXm5CS/2d2fW247UFWnVdUp3f3F5WnT5xwmPKd3\n94Hl8oEkpx/jHn6dI80GwN5xxAAmeVy2nsa7tKqSrdgdDMnvJbk0yZeTvGDb+ld399eSpLs/W1UP\nTvKgJP+03McJST6xrL8yyRur6s1J3rwcuzjJq6rqb5K8qbs/XlXfna2gJNl6VLrMcrckpyZ5d1Vd\n1N0fXpYcSHLPJNd29xN22oTu7qrqndatYoXZVnD2tsv7lg8ADqqqffkmT447BTBJzunuFx/m+GnZ\neorvhGyd8L90cK5D1lWSq7v7jMPcxxOS/HCSJyb5nap6cHe/oqrestx2cVX9xGHu94wk/9DdNyX5\ndFVdnOT7knx429qdgnagqu7a3Z+qqrsl+a8d1q9qp9lWcPatNArA8am79yfZf/B6Vb30aO9jp9cA\nL0ry1Kq6y/IJTt32ho7XJPndJG9M8orl2IXZetPHCcv6Oye5NsldqurRy7GTltcLK8m9lr/EWUnu\nmOTbq+q+3X11d78yyb8neUCSjyS567a5rk3yo8v9nZLk0Umu2Xb76Uk+tsPf7fwkz1ouPys3PwI9\nFtvjvNNsAOwBRwxgd1+Trci9s6quSPLOJHdbXuP6Snefl+TlSR65PBz9yyQfTXJlVV2e5Be6+8Zs\nvYHlFcuxy5I8JluPHN9QVVcmeV+SP+nuzyd54cE30WTrDSRvW16rO3HbG2Jek+Rblh9N+Lckr+vu\n9yfJ8nrhDd39xeX6BQffdHOIlyf58ar6YLaC9fJl/Xcd/HGL5fq5Sf41yf2r6vqqevZy/ClVdX22\nAndBVb1thdleufyZ2y/39ZIj7T8Au6e6b5WXvnZdVZ2d5Jru/tsd1v1aklO6+1VrGexWtvVa5F79\nN6l096FPcQNsXFX10Z6fbksBvEu2Xo98/A7rLkry5O7+3/VMdusSQICjd1wHcAoBBDh6xxLA29Jv\nggGAW40AAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCS\nAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIA\nAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgAC\nMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIw\nkgACMJIAAjCSAAIwkgACMJIAAjCSAAIwkgACMJIAAjCSAAIw0ombHoDDqU0PAHDcE8A9qLsVEGCX\neQoUgJEEEICRBBCAkQQQgJEEEICRBBCAkQQQgJEEEICRBBCAkQQQgJEEEICRBBCAkQQQgJEEEICR\nBBCAkQQQgJEEEICRBBCAkQQQgJEEEICRBBCAkQQQgJEEEICRBBCAkQQQgJEEEICRBBCAkQQQgJEE\nEICRBBCAkQQQgJEEEICRBBCAkQSQPauq9m16hr3CXtzMXtzMXnxzBJC9bN+mB9hD9m16gD1k36YH\n2EP2bXqA2zIBBGAkAQRgpOruTc/ANlXlHwTgGHR3Hc16AQRgJE+BAjCSAAIwkgBuQFWdWVXXVtWH\nqupFt7DmT5fbr6iqh617xnXaaT+q6unLPlxZVRdX1UM2MeduW+XrYln3yKr6alX99DrnW6cVv0f2\nVdVlVfX+qtq/5hHXZoXvj9Oq6u1VdfmyF7+8gTHXoqpeV1UHquqqI6xZ/dzZ3T7W+JHkhCTXJbl3\nkpOSXJ7kgYeseXySty6Xvz/Jezc994b34zFJ7rhcPvN43I9V9mHbun9O8pYkP7PpuTf4NXGnJFcn\nucdy/bRNz73BvTg7yR8e3IckNyQ5cdOz79J+/FCShyW56hZuP6pzp0eA6/eoJNd190e6+8Yk5yV5\n8iFrnpTknCTp7kuS3KmqTl/vmGuz435093u6+3+Wq5ckuceaZ1yHVb4ukuQFSf4uyafXOdyarbIX\nv5jk77v7Y0nS3Z9Z84zrsspefDLJHZbLd0hyQ3d/dY0zrk13vzvJZ4+w5KjOnQK4fndPcv226x9b\nju205ng86Ser7cd2z0ny1l2daDN23Iequnu2Tn6vXg4dr2/hXuVr4n5JTq2qf6mqS6vqmWubbr1W\n2YvXJnlQVX0iyRVJXrim2faiozp3nrjr43CoVU9ah/48y/F6slv571VVP5LkV5L8wO6NszGr7MMf\nJzmru7uqKt/4NXK8WGUvTkry8CSPS3JykvdU1Xu7+0O7Otn6rbIXL05yeXfvq6r7Jrmwqh7a3V/Y\n5dn2qpXPnQK4fh9Pcs9t1++Zrf+lHGnNPZZjx6NV9iPLG19em+TM7j7SUyC3VavswyOSnLfVvpyW\n5Cer6sbuPn89I67NKntxfZLPdPeXk3y5qt6V5KFJjrcArrIXZyR5WZJ0939U1YeTPCDJpWuZcG85\nqnOnp0DX79Ik96uqe1fVtyR5WpJDT2DnJ/mlJKmqRyf5XHcfWO+Ya7PjflTVvZK8Kckzuvu6Dcy4\nDjvuQ3d/T3ffp7vvk63XAZ93HMYvWe175B+T/GBVnVBVJ2frDQ8fWPOc67DKXlyb5MeSZHm96wFJ\n/nOtU+4dR3Xu9Ahwzbr7q1X1/CTvyNY7vP6qu6+pqucut7+mu99aVY+vquuSfDHJszc48q5aZT+S\nvCTJnZO8enn0c2N3P2pTM++GFfdhhBW/R66tqrcnuTLJ15K8truPuwCu+HXxB0leX1VXZOtBzW93\n939vbOhdVFXnJnlsktOq6vokL83W0+HHdO70q9AAGMlToACMJIAAjCSAAIwkgACMJIAAjCSAAIwk\ngACMJIAAjPT/qHXmEqCf5K8AAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x105222910>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"model_str = \"\"\"\n",
"% The ProbLog file starts here\n",
"\n",
"\n",
"\n",
"\n",
"weight(skis,6).\n",
"weight(boots,4).\n",
"weight(helmet,3).\n",
"weight(gloves,2).\n",
"\n",
"% intensional probabilistic fact with flexible probability:\n",
"P::pack(Item) :- weight(Item,Weight), P is 1.0/Weight.\n",
"\n",
"excess(Limit) :- excess([skis,boots,helmet,gloves],Limit). % all possible items\n",
"excess([],Limit) :- Limit<0.\n",
"excess([I|R],Limit) :- pack(I), weight(I,W), L is Limit-W, excess(R,L).\n",
"excess([I|R],Limit) :- \\+pack(I), excess(R,Limit).\n",
"query(excess(8)).\n",
"\n",
"\n",
"\n",
"% The ProbLog file ends here\n",
"\"\"\"\n",
"\n",
"problog_eval(model_str)"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.10"
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment