位置: 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防盗链的作用)

  • 红米k50pro卡槽在哪(红米k50pro+)

    红米k50pro卡槽在哪(红米k50pro+)

  • 安卓版idm语言设置(idm安卓版怎么设置ua)

    安卓版idm语言设置(idm安卓版怎么设置ua)

  • iPhone12如何进行截屏(iphone 12步骤)

    iPhone12如何进行截屏(iphone 12步骤)

  • 苹果xmax外屏碎了要不要换(苹果xmax外屏碎了需要换多少钱)

    苹果xmax外屏碎了要不要换(苹果xmax外屏碎了需要换多少钱)

  • 10.2英寸ipad屏幕长宽(10.2英寸ipad屏幕是多大对比A4纸)

    10.2英寸ipad屏幕长宽(10.2英寸ipad屏幕是多大对比A4纸)

  • 12306乘客信息待核验怎么办(12306乘客信息待核验)

    12306乘客信息待核验怎么办(12306乘客信息待核验)

  • 交通摄像头能拍多远(交通摄像头能拍到车里情况吗)

    交通摄像头能拍多远(交通摄像头能拍到车里情况吗)

  • 电脑显示屏变粉色了怎么办(电脑显示器突然变粉)

    电脑显示屏变粉色了怎么办(电脑显示器突然变粉)

  • qq二级密码是什么(qq二级密码有什么用处)

    qq二级密码是什么(qq二级密码有什么用处)

  • 钉钉可以看到学生的屏幕吗(钉钉可以看到学生开悬浮窗吗)

    钉钉可以看到学生的屏幕吗(钉钉可以看到学生开悬浮窗吗)

  • 咸鱼知道被谁举报吗(闲鱼能不能查看被谁举报的)

    咸鱼知道被谁举报吗(闲鱼能不能查看被谁举报的)

  • 电脑ua啥意思(电脑ul是什么意思)

    电脑ua啥意思(电脑ul是什么意思)

  • 苹果相机九宫格的作用(苹果相机九宫格怎么设置)

    苹果相机九宫格的作用(苹果相机九宫格怎么设置)

  • 红米k20pro能插内存卡吗(redmi k20pro支持内存卡吗)

    红米k20pro能插内存卡吗(redmi k20pro支持内存卡吗)

  • 什么手机有siri这样功能(苹果手机打开siri)

    什么手机有siri这样功能(苹果手机打开siri)

  • 苹果快充需要关闭优化吗(苹果快充需要关掉那个最佳化充电吗)

    苹果快充需要关闭优化吗(苹果快充需要关掉那个最佳化充电吗)

  • 华为手环别的手机能用吗(华为手环别的手表能用吗)

    华为手环别的手机能用吗(华为手环别的手表能用吗)

  • 爱思助手备份和itunes备份一样吗(爱思助手备份和网速有关吗)

    爱思助手备份和itunes备份一样吗(爱思助手备份和网速有关吗)

  • word文档常见视图方式(word文档视频教程大全)

    word文档常见视图方式(word文档视频教程大全)

  • 微信朋友圈如何定位其他城市(微信朋友圈如何设置不让别人看)

    微信朋友圈如何定位其他城市(微信朋友圈如何设置不让别人看)

  • 苹果11截屏快捷键设置(苹果11截屏快捷键是哪个键)

    苹果11截屏快捷键设置(苹果11截屏快捷键是哪个键)

  • b站视频怎么下载到手机相册(b站视频怎么下载到u盘)

    b站视频怎么下载到手机相册(b站视频怎么下载到u盘)

  • airpods2怎么唤醒siri(airpods怎么唤醒sirl)

    airpods2怎么唤醒siri(airpods怎么唤醒sirl)

  • GWX.exe是什么进程?GWX.exe可以删除吗?(zmweb.exe是什么进程)

    GWX.exe是什么进程?GWX.exe可以删除吗?(zmweb.exe是什么进程)

  • 税后净营业利润和净利润的区别
  • 代收代缴个人所得税手续费
  • 个税系统里的收入包括什么
  • 年数总和法怎么做
  • 取消待摊费用科目
  • 停车费收入增值税申报表怎么填
  • 经营活动现金净流量公式
  • 减免税金需要计提吗
  • 营改增后小规模纳税人涉税账务处理
  • 年末结转增值税之后增值税有余额嘛
  • 二手商品没有发票
  • 购买房产怎么确认收入
  • 单位定期存款如遇利率调整,不论调高调低
  • 公司每年都要纳税吗?
  • 企业发生的咨询费用
  • 小规模纳税人核定标准
  • 跨县提供建筑服务增值税申报
  • 年底增值税有余额吗
  • 汇算清缴报错了怎么更正
  • 固定资产清理的借方
  • 公司的车卖了
  • 公司租土地建厂房应该怎么做账呢?
  • 未开票收入纳税
  • 预借差旅费计入其他应收款吗
  • 手机超过1万元有必要买吗
  • vue2-elm
  • 购入嵌入式软件能一次性扣除吗
  • PHP+Mysql+jQuery文件下载次数统计实例讲解
  • 房地产评估费计算公式
  • 在php中,字符串有哪些表示形式
  • object转map工具类
  • 实收资本大于注册资本是什么意思
  • 计提消费税的会计科目
  • 将自产的应税消费品用于连续生产应税消费品
  • thinkphp框架介绍
  • 一键部署源码
  • 虚拟机安装win11提示无法运行
  • phpcms怎么用
  • 企业报表年报
  • 小规模纳税人每月不超过10万
  • 企业购进专门用于研发的生产设备
  • 老板天天吸烟
  • 单位向职工出租房子
  • 什么是国有划拔土地私房
  • 保洁公司的税率是多少
  • 审核后的凭证
  • 安全宣传标牌
  • 老板让我做分公司负责人能接受么
  • 商品流通企业税费按征收对象可分为
  • 会计核算职能有全面性吗
  • 房地产开发企业成本核算方法
  • 小规模纳税人去银行开立什么账户
  • 公司车辆购买保险申请
  • 免税的会计分录有哪些
  • 发票抵扣联要放入凭证里吗
  • 企业实缴各类税金的总额
  • 电信收据可以报销吗
  • 公司帐户转到法人账户
  • 历年案例分析题及答案
  • 会计应该怎么做职业规划
  • 三大财务报表英文
  • 个人到税务局开普票要交多少税
  • 用Win7系统的Syskey命令来设置系统的启动密码
  • 360安全卫士中心未完全开启
  • win8.1电脑设置在哪里
  • XP系统怎么设置屏幕常亮
  • ntfs权限设置步骤
  • eclipse awt
  • vue中父子组件如何通信的
  • 利用的英文
  • android系统虚拟机
  • jquery手册手机版
  • javascript none
  • javascript学到什么程度
  • javascript 类
  • Windows下Eclipse+PyDev配置Python+PyQt4开发环境
  • 江苏国税电子税务局打印控件
  • 销售农药化肥的经营范围
  • 新疆电子税务局下载app
  • 广东省上交国家财政
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设