概率栅格

欢迎访问我的博客首页。


概率栅格

  • 1. miss 表与 hit 表

1. miss 表与 hit 表


  miss 表和 his 表是一维数组,它们存放的都是空闲值。其下标 i i i 代表旧空闲值,元素 t a b l e [ i ] table[i] table[i] 代表旧空闲值 i i i 的新空闲值。表的更新可以用占据几率 o d d s odds odds 的更新表示:

o d d s i = { p 0 1 − p 0 , i = 0 o d d s 0 ⋅ 1 − f ( i ) f ( i ) , 1 ≤ i ≤ 32767 (1) {\rm odds}_i = \left\{\begin{aligned} \frac{p_0}{1 - p_0}, & {\kern 10pt} i = 0 \\\\ {\rm odds}_0 \cdot \frac{1 - f(i)}{f(i)}, & {\kern 10pt} 1 \le i \le 32767 \end{aligned}\right. \tag{1} oddsi= 1p0p0,odds0f(i)1f(i),i=01i32767(1)

其中, p 0 p_0 p0 是初始占据概率,miss 表的初始占据概率是 0.49,hit 表的初始占据概率是 0.55;函数 f ( x ) f(x) f(x) 是从 [ 1 , 32767 ] [1, 32767] [1,32767] [ 0.1 , 0.9 ] [0.1, 0.9] [0.1,0.9] 的线性映射,也就是下面的函数 SlowValueToBoundedFloat。再使用函数 oddsToValue 就可以求得空闲值。

# encoding=utf-8
import numpy as np
import matplotlib.pyplot as plt

kValueCount = 32768


def SlowValueToBoundedFloat(x: np.uint16, lower_bound=0.1, upper_bound=0.9) -> np.float32:
    """值转概率"""
    # x = np.clip(x, 1, 32767)
    # return (0.8 * x + 3275.8) / 32766
    x = np.clip(x, 1, 32767)
    kScale = (upper_bound - lower_bound) / (kValueCount - 2.)
    return x * kScale + (lower_bound - kScale)


def BoundedFloatToValue(x: np.float32, lower_bound=0.1, upper_bound=0.9) -> np.uint16:
    """概率转值"""
    # x = np.clip(x, 0.1, 0.9)
    # return round(40957.5 * x - 4094.75)
    x = np.clip(x, 0.1, 0.9)
    t = (x - lower_bound) * (32766. / (upper_bound - lower_bound)) + 1
    return round(t)


def oddsToValue(x):
    """占据几率转空闲值"""
    Probability = x / (1 + x)
    CorrespondenceCost = 1 - Probability
    value = BoundedFloatToValue(CorrespondenceCost) #+ 32768
    return value


def ComputeLookupTableToApplyCorrespondenceCostOdds(a):
    """生成空闲值表"""
    x = list()
    y = list()
    # odds0
    odds0 = a / (1 - a)
    value = oddsToValue(odds0)
    x.append(0)
    y.append(value)
    # oddsi
    for i in range(1, 32768):
        oddsi = odds0 * (1 - SlowValueToBoundedFloat(i)) / SlowValueToBoundedFloat(i)
        value = oddsToValue(oddsi)
        x.append(i)
        y.append(value)
    # 空闲值表。
    return x, y


if __name__ == '__main__':
    x1, y1 = ComputeLookupTableToApplyCorrespondenceCostOdds(0.49)
    x2, y2 = ComputeLookupTableToApplyCorrespondenceCostOdds(0.55)
    x3, y3 = [0, 32767], [0, 32767]
    fig, ax = plt.subplots(figsize=(19.2, 10.8), dpi=100)
    ax.plot(x1, y1, color='red', label='miss')
    ax.plot(x2, y2, color='green', label='hit')
    ax.plot(x3, y3, color='blue', label='x=y')
    ax.set_xlim(1, 32767)
    ax.set_ylim(1, 32767)
    ax.set_xlabel('old')
    ax.set_ylabel('new')
    ax.set_title('CorrespondenceCostValue')
    ax.legend(loc='best')
    fig.savefig('1298.png', bbox_inches='tight')

  上面的代码生成的表的下标范围是 [ 0 , 32767 ] [0, 32767] [0,32767],元素范围是 [ 1 , 32767 ] [1, 32767] [1,32767]

  Cartographer 中的表长是 65536,其中后 32768 个元素和前 32768 个元素相等,即 t a b l e [ i ] = t a b l e [ i + 32768 ] , 0 ≤ i ≤ 32767 table[i] = table[i + 32768], 0 \le i \le 32767 table[i]=table[i+32768],0i32767。这样做的目的是,无论旧空闲值带不带更新标记 32768,都能更新到同一个值。

  向概率栅格添加一帧距离数据时,该概率栅格会进行一轮更新。为了让每个栅格像素在此轮更新时只被更新一次,Cartographer 生成的表的元素也都加了更新标记 32768,如上面代码第 30 行。每个像素值(空闲值)与 32768 比较大小即可知道该像素本次是否已被更新。更新结束后,所有被更新的栅格像素都会减去该更新标记。

在这里插入图片描述

图 1 miss 表和 hit 表

  上面是我们的代码生成的 miss 表和 hit 表,不带更新标记。可以看出,miss 表的图像在直线 x = y x=y x=y 上方,即 x < y x \lt y x<y,说明按照 miss 表,越更新空闲值越大;hit 表的图像在直线 x = y x=y x=y 下方,即 x > y x \gt y x>y,说明按照 hit 表,越更新空闲值越小。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/37383.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Maven —— 项目管理工具

前言 在这篇文章中&#xff0c;荔枝会介绍如何在项目工程中借助Maven的力量来开发&#xff0c;主要涉及Maven的下载安装、环境变量的配置、IDEA中的Maven的路径配置和信息修改以及通过Maven来快速构建项目。希望能对需要配置的小伙伴们有帮助哈哈哈哈~~~ 文章目录 前言 一、初…

安全防御 --- SSL VPN

附&#xff1a;无线项目介绍 SSL VPN 有浏览器的设备就可以使用SSL&#xff0c;进而使用SSL VPN。无需担心客户端问题&#xff0c;所以SSL VPN也称为无客户端VPN。SSL VPN在client to lan场景下特别有优势。 实际实现过程&#xff08;基于TCP实现&#xff09; &#xff08;1&…

MYSQL执行一条SELECT语句的具体流程

昨天CSDN突然抽风 我一个ctrlz把整篇文章给撤掉了还不能复原 直接心态崩了不想写了 不过这部分果然还是很重要,还是写出来吧 流程图 这里面总共有两层结构Server层 储存引擎 Server 层负责建立连接、分析和执行 SQL。MySQL 大多数的核心功能模块都在这实现&#xff0c;主要包…

Java-API简析_java.lang.ProcessBuilder类(基于 Latest JDK)(浅析源码)

【版权声明】未经博主同意&#xff0c;谢绝转载&#xff01;&#xff08;请尊重原创&#xff0c;博主保留追究权&#xff09; https://blog.csdn.net/m0_69908381/article/details/131729933 出自【进步*于辰的博客】 因为我发现目前&#xff0c;我对Java-API的学习意识比较薄弱…

什么是Docker

容器技术和虚拟机 虚拟机 和一个单纯的应用程序相比&#xff0c;操作系统是一个很重的程序&#xff0c;刚装好的系统还什么都没有部署&#xff0c;单纯的操作系统其磁盘占用至少几十G起步&#xff0c;内存要几个G起步。 在这台机器上开启三个虚拟机&#xff0c;每个虚拟机上…

Failed to connect to github.com port 443: Connection refused问题解决

文章目录 一、问题描述&#xff1a;Failed to connect to github.com port 443: Connection refused问题解决二、解决方法一&#xff1a;排查代理问题1、尝试重置代理或者取消代理的方式2、添加全局代理 三、解决方法二&#xff1a;排查DNS解析问题1、第一步&#xff1a;查找gi…

Redis解决Session共享问题

文章目录 一、集群Session共享问题二、Redis存储验证码和对象三、解决状态登录刷新问题 一、集群Session共享问题 session共享问题&#xff1a;多台Tomcat并不共享session存储空间&#xff0c;当请求切换到不同tomcat服务器时导致数据丢失的问题 tomcat可以进行多台tomcat进行…

蓝牙技术|低功耗蓝牙和LE Audio助力游戏设备行业发展

去年&#xff0c;蓝牙技术联盟官方宣布推出LE Audio&#xff0c;它以BLE为基础&#xff0c;旨在更好地兼顾音频质量和低功耗&#xff0c;以在多种潜在应用中显著增强用户体验。这在游戏行业中引起了轰动&#xff0c;由于其延迟显著降低&#xff0c;LE Audio在增强游戏体验方面展…

连接一个JavaScript文件

● 首先&#xff0c;本章我们会使用一个起始文件&#xff0c;代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0&qu…

unidbg或者java层解密方法IDEA中打包成jar包供python调用方法

一、导出jar包方法 &#xff08;1&#xff09;配置jar包参数 &#xff08;2&#xff09;创建生成jar包 成功生成&#xff01; 二、Python代码调用 import jpypejvmPath jpype.getDefaultJVMPath() d unidbg-android.jar # 对应jar地址 jpype.startJVM(jvmPath, "-ea&q…

apple pencil一代的平替有哪些品牌?苹果平板的触控笔

随着苹果Pencil系列的推出&#xff0c;平替电容笔在国内市场得到了较好的发展&#xff0c;随之的销量&#xff0c;也开始暴涨&#xff0c;苹果pencil因为价格太高&#xff0c;导致很多人买不起。目前市场上&#xff0c;有不少的平替电容笔&#xff0c;可以替代苹果的Pencil&…

opencv-06 使用numpy.array 操作图片像素值

opencv-06 使用numpy.array 操作图片像素值 **1&#xff0e;二值图像及灰度图像****利用item 读取某一个像素值****利用itemset 修改像素值****彩色图像numpy.arry 像素值操作** numpy.array 提供了 item()和 itemset()函数来访问和修改像素值&#xff0c;而且这两个函数都是经…

C基础day9(2023.7.11)

一、Xmind整理&#xff1a; 二、课上练习&#xff1a; 练习1&#xff1a;实现字符串逆置 #include <stdio.h> #include <string.h> #include <stdlib.h> int main(int argc, const char *argv[]) {char str[]"hello";char *pstr;char *qstrstrlen…

【Android知识笔记】系统进程(一)

Android 系统进程有哪些 先来一个整体结构图从宏观上理解Android系统的进程结构布局: 这里我们简单总结一下: 系统的第一个进程其实是0号进程(又叫swapper进程/Idle进程) 0号进程fork出了1号进程(init进程)和2号进程(kthreadd进程) 1号进程是所有普通用户进程的祖先,2号进程…

CSDN-AI小组2023-半年-研发总结

目录 1.丐版「大模型」&#xff0c;Proof of concept2. LLM和AIGC的各种综述3. 基于Embedding的应用&#xff0c;问答&#xff0c;AI编程4. 评论区的AI助手5. 结合AIGC的各种数据自动计算6. 个性化推荐的系统重构7. 基于AIGC的个性化博客创作鼓励8. 博客质量分V5: 可解释性计算…

vulnhub靶机渗透:PWNLAB: INIT

PWNLAB: INIT 靶机环境介绍nmap扫描端口扫描服务扫描漏洞扫描扫描总结 80端口目录爆破LFI利用 3306端口回到80端口文件上传 获得立足点横向移动提权总结参考 靶机环境介绍 https://www.vulnhub.com/entry/skytower-1,96/ 靶机IP&#xff1a;192.168.56.103 kali IP&#xff…

Linux信号机制

转自&#xff1a;深入理解Linux信号机制(1.0)_城中之城的博客-CSDN博客 一、信号机制概览 相信大家对信号并不陌生&#xff0c;很多人都用过kill命令或者CtrlC组合键杀死过进程&#xff0c;或者遇到过程序因为收到SIGSEGV信号而崩溃的。而对信号的基本原理&#xff0c;估计很…

含多类型充电桩的电动汽车充电站优化配置方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

cloud Alibab+nacos+gateway集成swaggerui,统一文档管理(注意点)

首先说明&#xff1a;本文只说整合注意点 效果图和功能参考链接 1.使用gateway访问nacos服务&#xff0c;503 在网关服务添加依赖即可解决 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign&…

一款玩法十分经典的RPG游戏《QQ宠物大乐斗2》

文章目录 1.介绍2.界面介绍2.1游戏主界面&#xff1a;2.2出城界面&#xff1a; 3.战斗系统3.1主动战斗3.2被动战斗 4.技能系统4.1主动技能4.2被动技能4.3五神技狂龙傲天拳惊天混元掌灵气寒霜指道威无极真气八卦迷踪腿 5.道具系统6.装备系统6.1装备品质6.2装备展示6.3装备获得方…