位置: IT常识 - 正文

python A*算法是什么(python apriori算法)

编辑:rootadmin

推荐整理分享python A*算法是什么(python apriori算法),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:python的a+,python计算a+aa+aaa,python计算a+aa+aaa,python apriori算法,a*算法代码 python,python的a+,pythonai算法,python的a+,内容如对您有帮助,希望把文章链接给更多的朋友!

python A*算法是什么(python apriori算法)

说明

1、A*算法是静态路网中解决最短路径最有效的直接搜索方法。

2、A*算法是启发式算法,采用最佳优先搜索策略(Best-first),基于评估函数对每个搜索位置的评估结果,猜测最佳优先搜索位置。

A*算法大大降低了低质量的搜索路径,因此搜索效率高,比传统的路径规划算法更实时、更灵活。但A*算法找到的是相对最优的路径,而不是绝对最短的路径,适合大规模、实时性高的问题。

实例

importheapqimportcopyimportreimportdatetimeBLOCK=[]#给定状态GOAL=[]#目标状态#4个方向direction=[[0,1],[0,-1],[1,0],[-1,0]]#OPEN表OPEN=[]#节点的总数SUM_NODE_NUM=0#状态节点classState(object):def__init__(self,gn=0,hn=0,state=None,hash_value=None,par=None):'''初始化:paramgn:gn是初始化到现在的距离:paramhn:启发距离:paramstate:节点存储的状态:paramhash_value:哈希值,用于判重:parampar:父节点指针'''self.gn=gnself.hn=hnself.fn=self.gn+self.hnself.child=[]#孩子节点self.par=par#父节点self.state=state#局面状态self.hash_value=hash_value#哈希值def__lt__(self,other):#用于堆的比较,返回距离最小的returnself.fn<other.fndef__eq__(self,other):#相等的判断returnself.hash_value==other.hash_valuedef__ne__(self,other):#不等的判断returnnotself.__eq__(other)defmanhattan_dis(cur_node,end_node):'''计算曼哈顿距离:paramcur_state:当前状态:return:到目的状态的曼哈顿距离'''cur_state=cur_node.stateend_state=end_node.statedist=0N=len(cur_state)foriinrange(N):forjinrange(N):ifcur_state[i][j]==end_state[i][j]:continuenum=cur_state[i][j]ifnum==0:x=N-1y=N-1else:x=num/N#理论横坐标y=num-N*x-1#理论的纵坐标dist+=(abs(x-i)+abs(y-j))returndistdeftest_fn(cur_node,end_node):return0defgenerate_child(cur_node,end_node,hash_set,open_table,dis_fn):'''生成子节点函数:paramcur_node:当前节点:paramend_node:最终状态节点:paramhash_set:哈希表,用于判重:paramopen_table:OPEN表:paramdis_fn:距离函数:return:None'''ifcur_node==end_node:heapq.heappush(open_table,end_node)returnnum=len(cur_node.state)foriinrange(0,num):forjinrange(0,num):ifcur_node.state[i][j]!=0:continuefordindirection:#四个偏移方向x=i+d[0]y=j+d[1]ifx<0orx>=numory<0ory>=num:#越界了continue#记录扩展节点的个数globalSUM_NODE_NUMSUM_NODE_NUM+=1state=copy.deepcopy(cur_node.state)#复制父节点的状态state[i][j],state[x][y]=state[x][y],state[i][j]#交换位置h=hash(str(state))#哈希时要先转换成字符串ifhinhash_set:#重复了continuehash_set.add(h)#加入哈希表gn=cur_node.gn+1#已经走的距离函数hn=dis_fn(cur_node,end_node)#启发的距离函数node=State(gn,hn,state,h,cur_node)#新建节点cur_node.child.append(node)#加入到孩子队列heapq.heappush(open_table,node)#加入到堆中defprint_path(node):'''输出路径:paramnode:最终的节点:return:None'''num=node.gndefshow_block(block):print("---------------")forbinblock:print(b)stack=[]#模拟栈whilenode.parisnotNone:stack.append(node.state)node=node.parstack.append(node.state)whilelen(stack)!=0:t=stack.pop()show_block(t)returnnumdefA_start(start,end,distance_fn,generate_child_fn,time_limit=10):'''A*算法:paramstart:起始状态:paramend:终止状态:paramdistance_fn:距离函数,可以使用自定义的:paramgenerate_child_fn:产生孩子节点的函数:paramtime_limit:时间限制,默认10秒:return:None'''root=State(0,0,start,hash(str(BLOCK)),None)#根节点end_state=State(0,0,end,hash(str(GOAL)),None)#最后的节点ifroot==end_state:print("start==end!")OPEN.append(root)heapq.heapify(OPEN)node_hash_set=set()#存储节点的哈希值node_hash_set.add(root.hash_value)start_time=datetime.datetime.now()whilelen(OPEN)!=0:top=heapq.heappop(OPEN)iftop==end_state:#结束后直接输出路径returnprint_path(top)#产生孩子节点,孩子节点加入OPEN表generate_child_fn(cur_node=top,end_node=end_state,hash_set=node_hash_set,open_table=OPEN,dis_fn=distance_fn)cur_time=datetime.datetime.now()#超时处理if(cur_time-start_time).seconds>time_limit:print("Timerunningout,break!")print("Numberofnodes:",SUM_NODE_NUM)return-1print("Noroad!")#没有路径return-1defread_block(block,line,N):'''读取一行数据作为原始状态:paramblock:原始状态:paramline:一行数据:paramN:数据的总数:return:None'''pattern=re.compile(r'\d+')#正则表达式提取数据res=re.findall(pattern,line)t=0tmp=[]foriinres:t+=1tmp.append(int(i))ift==N:t=0block.append(tmp)tmp=[]if__name__=='__main__':try:file=open("./infile.txt","r")exceptIOError:print("cannotopenfileinfile.txt!")exit(1)f=open("./infile.txt")NUMBER=int(f.readline()[-2])n=1foriinrange(NUMBER):l=[]forjinrange(NUMBER):l.append(n)n+=1GOAL.append(l)GOAL[NUMBER-1][NUMBER-1]=0forlineinf:#读取每一行数据OPEN=[]#这里别忘了清空BLOCK=[]read_block(BLOCK,line,NUMBER)SUM_NODE_NUM=0start_t=datetime.datetime.now()#这里添加5秒超时处理,可以根据实际情况选择启发函数length=A_start(BLOCK,GOAL,manhattan_dis,generate_child,time_limit=10)end_t=datetime.datetime.now()iflength!=-1:print("length=",length)print("time=",(end_t-start_t).total_seconds(),"s")print("Nodes=",SUM_NODE_NUM)

以上就是python A*算法的介绍,希望对大家有所帮助。更多Python学习指路:Python基础教程

本文链接地址:https://www.jiuchutong.com/zhishi/313077.html 转载请保留说明!

上一篇:🎉使用JSONP解决跨域(jsoncpp使用)

下一篇:Nginx 防盗链(nginx防盗链的作用)

  • 华为悬浮球怎么打开(华为悬浮球怎么锁屏)

    华为悬浮球怎么打开(华为悬浮球怎么锁屏)

  • 华为手机拉黑后会收到短信吗(华为手机拉黑后不想看到对方短信,怎么办?)

    华为手机拉黑后会收到短信吗(华为手机拉黑后不想看到对方短信,怎么办?)

  • 快手可以挂淘宝链接吗(快手可以挂淘宝商品吗)

    快手可以挂淘宝链接吗(快手可以挂淘宝商品吗)

  • boss直聘微信号怎么改(boss直聘绑定微信会怎样)

    boss直聘微信号怎么改(boss直聘绑定微信会怎样)

  • 抖音音乐卡点怎么做(抖音音乐卡点怎么设置)

    抖音音乐卡点怎么做(抖音音乐卡点怎么设置)

  • 华为闹铃在哪儿设置(华为闹铃在哪儿关闭)

    华为闹铃在哪儿设置(华为闹铃在哪儿关闭)

  • 照片删除了怎么找回来(照片删除了怎么恢复回来vivo)

    照片删除了怎么找回来(照片删除了怎么恢复回来vivo)

  • 手机录音后播放没声音(手机录音后播放断断续续的)

    手机录音后播放没声音(手机录音后播放断断续续的)

  • 手机出现绿色线条(手机出现绿色线条可以恢复吗)

    手机出现绿色线条(手机出现绿色线条可以恢复吗)

  • 微信注销后是什么头像(微信注销后是什么状态)

    微信注销后是什么头像(微信注销后是什么状态)

  • 美团的评价为什么不显示不出来(美团的评价为什么会被折叠呢)

    美团的评价为什么不显示不出来(美团的评价为什么会被折叠呢)

  • vivox21屏幕多少厘米(vivox21屏幕多少hz)

    vivox21屏幕多少厘米(vivox21屏幕多少hz)

  • 51单片机编程用什么软件(51单片机编程实例百例)

    51单片机编程用什么软件(51单片机编程实例百例)

  • 淘宝打标是什么意思(淘宝打标是什么意思兔子)

    淘宝打标是什么意思(淘宝打标是什么意思兔子)

  • 苹果拦截电话在哪里查看(苹果拦截电话在哪里)

    苹果拦截电话在哪里查看(苹果拦截电话在哪里)

  • 屏幕使用时间密码可以输多少次(屏幕使用时间密码忘记怎么办苹果)

    屏幕使用时间密码可以输多少次(屏幕使用时间密码忘记怎么办苹果)

  • 如何取消拼多多的抽奖(如何取消拼多多快捷支付协议)

    如何取消拼多多的抽奖(如何取消拼多多快捷支付协议)

  • mate20pro指纹解锁在哪里(mate20pro指纹解锁不灵敏)

    mate20pro指纹解锁在哪里(mate20pro指纹解锁不灵敏)

  • Win10电脑卡顿不流畅怎么版?这5项设置能提速十倍(w10电脑很卡)

    Win10电脑卡顿不流畅怎么版?这5项设置能提速十倍(w10电脑很卡)

  • Linux系统中tr命令的基本使用教程(linux tr)

    Linux系统中tr命令的基本使用教程(linux tr)

  • 【微信小程序】按钮还能这样用?(微信小程序开发一个多少钱)

    【微信小程序】按钮还能这样用?(微信小程序开发一个多少钱)

  • nethogs命令  实时统计网络带宽使用率工具(net命令详解步骤)

    nethogs命令 实时统计网络带宽使用率工具(net命令详解步骤)

  • 如何让网站优化持续稳定(如何让网站优化成功)

    如何让网站优化持续稳定(如何让网站优化成功)

  • Spring Boot 中使用 Swagger(spring boot dao)

    Spring Boot 中使用 Swagger(spring boot dao)

  • 税务局退税多久到账
  • 过路费抵扣进项税填在申报表哪里
  • 个税返还什么时候到账
  • 应付职工薪酬应发数
  • 小区业委会是否可以进行经营活动?
  • 征地费用应计入什么会计科目
  • 小规模纳税人季度不超30万免增值税
  • 低于5000是什么意思
  • 股东投入款放入什么科目
  • 吸收合并的税务处理增值税风险
  • 交房前是否需要给房产局交房租维修费
  • 采用重置成本计量属性的税种是
  • 核定征收所得税税率
  • 增值税发票抵扣进项税什么意思
  • 企业计提福利费时,贷记应付职工薪酬
  • 增值税税负率怎么算
  • 增值税专票需要哪些开票信息
  • 土建税率是多少
  • 滞留发票一般怎么开具
  • 需要缴纳企业所得税的有哪些
  • 与工程有关的差旅费是否可以计入在建工程呢?
  • 工会财务任务是什么
  • 企业所得税固定资产折旧计算
  • 税基式减免的内容有哪些?
  • 个税经营所得申报怎么更正
  • prevsrv.exe - prevsrv是什么进程 有什么用
  • 职工教育经费是工资总额的多少
  • 资产负债表其他流动资产计算公式
  • 分配的水电费属于什么会计要素
  • 公司设计费属于什么费用
  • 360tray.exe损坏文件怎么修复
  • uniapp小程序自定义tabbar在iOS手机上太高了
  • 咨询公司流程完整
  • 不征税收入如何记账
  • 羽毛球脚踝扭伤怎么办
  • 进项税额是
  • php限制登录次数
  • php一个页面多个分页
  • vue面试题2020
  • 企业所得税是怎么产生的
  • 同事写了一个责任链模式,bug 无数...
  • 小规模申报增值税减免税申报明细表
  • 汽车4s店厂家返修流程
  • db2比较大小
  • 季节性临时工什么意思
  • 生产成本科目期末怎么结转
  • 个人所得税规定的免纳个人所得税的范围
  • 招待客户的住宿费发票可以报销吗
  • 申报个人所得税的软件叫什么
  • 银行贷款直接给钱吗
  • 土地增值税预缴计算方法70号公告
  • 购货方收到销售方提供的发票怎么做分录
  • 收到对方的银行承兑汇票
  • 建账初期账务处理程序
  • 预提成本费用的会计分录
  • 办理房产证的时候可以加孩子的名字吗
  • 企业外币折算的方法包括
  • 营业外收入主要来源
  • 成本与费用的区别联系
  • win10下载mysql图解
  • sql2005定时备份数据库
  • sql server2000个人版安装步骤
  • Winserver2012下mysql 5.7解压版(zip)配置安装教程详解
  • WINDOWS操作系统属于单用户任务操作系统
  • 受益无穷还是受用无穷
  • 如何将用户加入某个组
  • win8.1评估版
  • linux系统中怎么全选
  • Win10 Mobile/PC RS2快速预览版14926同步推送
  • win7系统每次开机都要选择用户
  • win8怎么更改账户名称
  • linux解压操作
  • window10添加虚拟网卡
  • 手机物理游戏
  • 着色器模型
  • jquery移动节点的方法
  • android基础入门教程
  • 河北省网上税务局电子税务局
  • 河南个人社保查询登录入口官网
  • 税盘注销了怎么申报增值税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设