贝叶斯公式 全概率公式 定位问题 机器人寻路
2016-09-13 21:19
375 查看
p=[0.2, 0.2, 0.2, 0.2, 0.2] #the lable of real world world=['green', 'red', 'red', 'green', 'green'] #sense value before move measurements = ['red', 'red'] #number of steps after measurements motions = [1,1] """ process: 1. check measurements[0], find init position(probability), assume the probability we'r in each grid 2. move setp of each grid, also the last position is important(product one by one) loop """ #sense may be error or correct pHit = 0.6 pMiss = 0. #move can be overshoot or not pExact = 0.8 pOvershoot = 0.1 pUndershoot = 0.1 """self drive located is made of move and sense circle """ def sense(p, Z): q=[] for i in range(len(p)): hit = (Z == world[i]) #actually it is bayes rule #p[i] is prior and p(i|Z) is measurements probability q.append(p[i] * (hit * pHit + (1-hit) * pMiss)) s = sum(q) for i in range(len(q)): q[i] = q[i] / s print q return q def move(p, U): """move many (U) steps Args: p : list probolity list U : int object of shot, Returns: q:list after moving """ near = 0 success = 0 over = 0 if U == 0: return p q = [0 for i in range(len(p))] # in every shotting process: for i in range(len(p)): if p[i] != 0: #if U is very large the follow should change #now U is in (-len(p), len(p)) if U > 0: near = (i + U - 1 - len(p)) if (i + U - 1 - len(p) >= 0) else (i + U - 1) success = (i + U - len(p)) if (i + U - len(p) >= 0 ) else (i + U) over = (i + U + 1 - len(p)) if (i + U + 1 - len(p) >= 0 ) else (i + U + 1) if U < 0: near = i + U + 1 success = i + U over = i + U - 1 q[near] += p[i] * pUndershoot q[success] += p[i] * pExact q[over] += p[i] * pOvershoot else: continue return q def move_simple(p, U): """better version to move, can single step or many - can also design a move 1 step func and a util func to move many steps - always go roght - it is a circle list -i-u means go right and i+u means go left Args: p:list U:int """ q = [] #there, i-u means go right and i+u means go left for i in range(len(p)): #actually it is total probability #pExact is prior s = pExact * p[(i-U) % len(p)] s = s + pOvershoot * p[(i-U-1) % len(p)] s = s + pUndershoot * p[(i-U+1) % len(p)] q.append(s) print q return q # p = [0,1,0,0,0] # # print move_simple(p,3) # print move(p,-2) for i in range(len(measurements)): print "sense" p = sense(p, measurements[i]) print "move" p = move_simple(p, motions[i])
相关文章推荐
- CSS浮动和定位学习笔记
- C#实现txt定位指定行完整实例
- Flex中怎么给表格中的滚动条定位避免刷新回到原处
- JavaScript实现点击文本自动定位到下拉框选中操作
- 一个JavaScript操作元素定位元素的实例
- jquery实现网页定位导航
- jQuery仿京东商城楼梯式导航定位菜单
- js中的如何定位固定层的位置
- JS弹出层单纯的绝对定位居中示例代码
- 讲解iOS开发中基本的定位功能实现
- iOS中定位当前位置坐标及转换为火星坐标的方法
- JavaScript网页定位详解
- 微信企业号开发之微信考勤百度地图定位
- js实现滚动条滚动到某个位置便自动定位某个tr
- 在Android里完美实现基站和WIFI定位
- android 定位的4种方式介绍
- 基于JavaScript实现根据手机定位获取当前具体位置(X省X市X县X街道X号)
- 基于Android实现百度地图定位过程详解
- Android百度地图实现搜索和定位及自定义图标绘制并点击时弹出泡泡
- Android百度地图自定义公交路线导航