python实现知识推理,图可达,pydatalog,kanren,sympy

简介: python实现知识推理,图可达,pydatalog,kanren,sympy

刚刚学习人工智能知识推理记录一下

python 人工智能的推理包 又 kanren , pydatalog ,sympy

楼主比较各有利弊

kanren 语法更加接近python 原生语法

pydatalog 语法更加接近我们 离散数学 学到的语法

1、编写一个描述亲属关系的逻辑程序,然后再给予出一些事实数据,建立一个小型演绎数据库。

提示:可以以父亲和母亲为基本关系(作为基本谓词),再由此来描述祖父、祖母、兄弟、姐妹以及其他所属关系。



20191121150638804.png

代码

import kanren
import sympy
from kanren import run, eq, membero, var, conde
from kanren import Relation, facts
parent = Relation()
facts(parent, (“Homer”,“Bart”),(“lmk”,“Bart”),(“Homer”,“Lisa”),(“Abe”,“Homer”))
x = var()
res1=run(0, x, parent(x, “Bart”))
print(res1)
father=Relation()
mather=Relation()
facts(father,(“f1”,“f2”),(“f2”,“f3”),(“f2”,“f31”),(“f3”,“f4”),(“f4”,“f5”))
facts(mather,(“m1”,“m2”),(“m2”,“m3”),(“m3”,“m4”))
someone=var()
someone_son=var()
#爷爷
def grandfather(grandson):
someone = var()
someone_son = var()
return run(0,someone,father(someone,someone_son),father(someone_son,grandson))
#奶奶
def grandmather(grandson):
someone = var()
someone_son = var()
return run(0,someone,mather(someone,someone_son),mather(someone_son,grandson))

grandfather1=grandfather(“f3”)

#兄弟
def borther(one_person):
one_father = var()
one_mather =var()
one_brother = var()
return run(0,(one_person,one_brother),father(one_father,one_person),father(one_father,one_brother),)
one_grandson=input(“你要找谁的爷爷\n”)
grandfather1=grandfather(one_grandson)
print(grandfather1)
one_person=input(“你要找谁的兄弟\n”)
borther1=borther(one_person)
print(borther1)

2、编写一个路径查询程序,使其能输出图中所有路径。

提示:程序中的事实描述了下面的有向图,规则是图中两节点间通路的定义。

import  pyDatalog 
pyDatalog.create_terms('X,Y,Z,link,can_reach')
# there is a link between node 1 and node 2
+link('a', 'b')
+link('a', 'c')
+link('c', 'd')
+link('b', 'd')
+link('b', 'e')
+link('d', 'e')
# x y之间是否可达?
can_reach(X, Y) <= link(X, Y)  # direct link
# 递归查找 x,y 之间是否可达
can_reach(X, Y) <= link(X, Z) & can_reach(Z, Y) & (X != Y)
while True:
    start_node=input('请输入出发的地点')
    print(can_reach(start_node, Y))

3、一个雇主在发出招聘广告之后,收到了大量的应聘申请。为了从中筛选出不量的候选人,该雇主采用下列判据:申请者必须会打字、开车,并且住在伦敦。

(a)用规则表述这个雇主的选择准则。

(b)用事实描述下列申请者的情况:

史密斯住在剑桥,会开车但不会打字。

布朗住在伦敦,会开车也会打字。

简住在格拉斯哥,不会开车但会打字。

埃文斯住在伦敦,会开车也会打字。

格林住在卢顿,会开车也会打字。

(c)要求运行结果提供一个候选人名单。

import pyDatalog 
pyDatalog.create_terms('X,live,drive,type_word,can_be_hire')
#现在又 几个 应聘者
# sms  ,bl  , jian  ,aws   ,gl
+live('sms','jianqiao')
+live('bl','lundun')
+live('jian','silage')
+live('aws','lundun')
+live('gl','ludun')
+drive('sms')
+drive('bl')
+drive('aws')
+drive('gl')
+type_word('bl')
+type_word('jian')
+type_word('aws')
+type_word('gl')
#定义能够被雇佣的 员工
can_be_hire(X)  <= live(X,'lundun') & drive(X)  & type_word(X)
print(can_be_hire(X))

输出结果

相关文章
|
7月前
|
数据可视化 数据挖掘 数据处理
python 盒装图纵坐标单位
【4月更文挑战第1天】
|
7月前
|
Python
针状图(python
针状图(python
55 0
|
5月前
|
存储 程序员 Python
小白也能用的代码!1行Python,把PPT转成1张长图
大家好,我是程序员晚枫。今天介绍`python-office`库的新功能:仅用1行Python代码将PPT转为单张长图。
85 11
 小白也能用的代码!1行Python,把PPT转成1张长图
|
5月前
|
算法 Python
Python 大神修炼手册:图的深度优先&广度优先遍历,深入骨髓的解析
【7月更文挑战第12天】Python进阶必学:DFS和BFS图遍历算法。理解图概念,用邻接表建无向图,实现DFS和BFS。DFS适用于查找路径,BFS解决最短路径。通过实例代码加深理解,提升编程技能。
44 4
|
5月前
|
算法 Python
逆袭之路!用 Python 玩转图的 DFS 与 BFS,让数据结构难题无处遁形
【7月更文挑战第12天】图的遍历利器:DFS 和 BFS。Python 中,图可表示为邻接表或矩阵。DFS 沿路径深入,回溯时遍历所有可达顶点,适合找路径和环。BFS 层次遍历,先近后远,解决最短路径问题。两者在迷宫、网络路由等场景各显神通。通过练习,掌握这些算法,图处理将游刃有余。
65 3
|
5月前
|
存储 算法 Python
“解锁Python高级数据结构新姿势:图的表示与遍历,让你的算法思维跃升新高度
【7月更文挑战第13天】Python中的图数据结构用于表示复杂关系,通过节点和边连接。常见的表示方法是邻接矩阵(适合稠密图)和邻接表(适合稀疏图)。图遍历包括DFS(深度优先搜索)和BFS(广度优先搜索):DFS深入探索分支,BFS逐层访问邻居。掌握这些技巧对优化算法和解决实际问题至关重要。**
46 1
|
5月前
|
存储 算法 搜索推荐
Python高手必备!揭秘图(Graph)的N种风骚表示法,让你的代码瞬间高大上
【7月更文挑战第10天】在Python中,图数据结构通过邻接矩阵、邻接表、边列表和邻接集来表示,用于社交网络分析和路径查找等。邻接矩阵用二维数组存储连接,邻接表仅存储每个节点的邻居,节省空间。边列表列出所有边,而邻接集用集合确保邻居唯一性。选择合适表示法能提升代码效率和可读性,展现编程技巧。
79 1
|
6月前
|
机器学习/深度学习 数据采集 TensorFlow
使用Python实现深度学习模型:图神经网络(GNN)
使用Python实现深度学习模型:图神经网络(GNN)
333 1
|
5月前
|
数据可视化 Python
Python中绘制3D曲面图的艺术
【7月更文挑战第4天】使用Python的Matplotlib和mpl_toolkits.mplot3d库,可以轻松绘制3D曲面图。首先安装matplotlib,然后导入numpy和相关模块。通过定义函数和使用numpy的meshgrid生成数据,接着用`plot_surface`绘制曲面,可定制色彩映射、添加标签、标题、色标、透明度和阴影。通过自定义颜色映射和添加网格线,能进一步增强图形的解读性。这些技巧使3D数据可视化更具洞察力和吸引力。
98 0
|
7月前
|
机器学习/深度学习
python-随机森林后筛选最重要变量,模型准确率、随机森林混淆矩阵结果、基尼系数排序图
python-随机森林后筛选最重要变量,模型准确率、随机森林混淆矩阵结果、基尼系数排序图