时间计算

路径规划学习入门

半世苍凉 提交于 2019-11-29 02:02:18
运动规划简介 当虚拟人开始一次漫游时,首先全局规划器根据已有的长期信息进行全局静态规划,确定虚拟人应该经过的最优化路线。然后全局规划器控制执行系统按照该路径运动。在运动过程中,感知系统会持续对周围环境进行感知。当发现动态的物体或未知障碍时,局部规划器根据这些感知到的局部信息,确定短期內的运动。当避障行为的优先级高于沿原路径前进时,局部规划器就能够通过竞争获得执行系统的控制权,使得虚拟人按照局部规划结果运动。完成对当前感知障碍的规避行为后,全局规划器再次取得执行系统的控制权,使得虚拟人重新回到全局规划路径上,继续向目标点运动。 参考 Dijkstra和A*算法做的效果演示动画 A*算法加入了启发函数,用于引导其搜索方向,A*算法会比Dijkstra算法规划速度快不少 最佳优先搜索(BFS)算法  BFS按照类似的流程运行,不同的是它能够评估(称为启发式的)任意结点到目标点的代价。与选择离初始结点最近的结点不同的是,它选择离目标最近的结点。BFS不能保证找到一条最短路径。然而,它比Dijkstra算法快的多,因为它用了一个启发式函数(heuristic function)快速地导向目标结点。例如,如果目标位于出发点的南方,BFS将趋向于导向南方的路径。在下面的图中,越黄的结点代表越高的启发式值(移动到目标的代价高),而越黑的结点代表越低的启发式值(移动到目标的代价低)

iOS 获取N天前或N天后日期中的坑

落花浮王杯 提交于 2019-11-29 00:40:41
最常见获取N天前后的日期的方法是: //获取N天后日期 + (NSDate *)getDate:(NSDate *)currentDate day:(NSInteger)day { NSInteger days = day; // n天后的天数 days = (days == 0 ? 2.f : days);//未指定天数则默认为两天 NSDate *appointDate; // 指定日期声明 NSTimeInterval oneDay = 24 * 60 * 60; // 一天一共有多少秒 appointDate = [currentDate initWithTimeIntervalSinceNow: +(oneDay * days)]; return appointDate; } 而获取N天前的日期 //改为负的天数即可 appointDate = [currentDate initWithTimeIntervalSinceNow: -(oneDay * days)]; 大都是这样的方法,该方法也确实能计算出距离《当前》时间的N天前或N天后的时间;但是在最近使用时,发现这样计算却无法算出《指定日期》的N天前/后时间,为此还试了很多次,却都没有计算出… 感觉 initWithTimeIntervalSinceNow 方法始终是用《当前》时间来计算N天前/后的时间;即使传入一个

米联客 ZYNQ/SOC精品教程 S02-CH13 CAN总线通信实验

百般思念 提交于 2019-11-29 00:23:45
软件版本:VIVADO2017.4 操作系统:WIN10 64bit 硬件平台:适用米联客 ZYNQ系列开发板 米联客(MSXBO)论坛: www.osrc.cn 答疑解惑专栏开通,欢迎大家给我提问!! 13.1 概述 ZYNQ的PS中包含了2个CAN接口,兼容CAN 2.0A和CAN 2.0B,最高可支持1Mbps的波特率。CAN作为工业应用中的一个重要的总线标准,广泛应用于各行各业之中。本教程介绍了ZYNQ中PS端CAN接口的基本使用方法,并通过CAN接口实现与PC端CAN调试软件之间的数据接收和发送测试。 13.2 CAN总线介绍 13.2.1数据格式 CAN总线中的数据以帧为单位,一共包含5种类型的帧,分别为:数据帧、远程帧、错误帧、过载帧和帧间隔。 数据帧:用于发送节点向接收节点传送数据的帧。 远程帧:用于接收节点向具有相同ID的发送节点请求数据的帧。 错误帧:用于当检测出错误时向其他节点通知错误的帧。 过载帧:用于接收节点通知其尚未做好接受准备的帧。 帧间隔:用于将数据帧及远程帧与前面的帧分离开来。 CAN帧格式如下图所示,CAN 2.0A中使用的是标准帧,CAN 2.0B中使用的是扩展帧。标准帧和扩展帧的区别在于扩展帧增加了18bit的扩展标识符。一般情况下,与用户直接相关的只有数据帧和远程帧。数据帧和远程帧都可以使用标准帧格式或者扩展帧格式。

计算从出生到现在活了多少天

流过昼夜 提交于 2019-11-28 20:24:15
import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Scanner; /** * * 计算活了多少天 * * */ public class CountLife { public static void main(String[] args) throws ParseException { Scanner scanner = new Scanner(System.in); // 1) 输入您的出生日期确定时间开始时间 System.out.println("请输入您的出生日期(如:1998-12-12)"); String first = scanner.next(); // 2) 确定结束时间 System.out.println("请输入当前时间(如:1998-12-12)"); String end = scanner.next(); // 3) 使用 SimpleDateFormat 类,格式化时间,将字符转成Date格式,注意时间字符串必须和指定格式一样的 (yyyy-MM-dd) SimpleDateFormat format = new

计算两个时间的时间差,并排除掉周末两天

ぐ巨炮叔叔 提交于 2019-11-28 20:12:10
参数为时间戳 function workDays($start, $end) { $end < $start && exit; $double = ($end - $start) / (7 * 24 * 3600); $double = floor($double); $start_weekday = date('w', $start); $end_weekday = date('w', $end); //开始结束时间去掉周末 if($start_weekday==6 || $start_weekday==0) { if ($start_weekday == 6) { $start = strtotime(date('Y-m-d', $start)) + 2 * 24 * 3600; } if ($start_weekday == 0) { $start = strtotime(date('Y-m-d', $start)) + 1 * 24 * 3600; } $start_weekday = date('w', $start); } if($end_weekday==6 || $end_weekday==0) { if ($end_weekday == 6) { $end = strtotime(date('Y-m-d', $end)); } if ($end_weekday =

机器学习 — 优化

眉间皱痕 提交于 2019-11-28 16:32:49
优化问题 使用随机优化解决写作类问题:存在多种变量的影响,存在许多个可能的解,通过对题解打分,找到一个问题的最优解。 优化的主要思想: 找到影响结果的因素,比如这里旅行的航班价格、花费时间、租车费用等 将考虑到的主要因素根据权重组成,计算出总的成本 利用一定的算法找到成本最小时候的各个因素的取值 关键在于确定题解表示法和成本函数 计算最小成本的方法: 随机搜索 爬山法 模拟退火 遗传算法 在本节中要找到所有人乘坐航班的最佳班次表,也就是一个航班班次的列表 import time import math import random people = [('Seymour','BOS'), ('Franny','DAL'), ('Zooey','CAK'), ('Walt','MIA'), ('Buddy','ORD'), ('Les','OMA')] # Laguardia destination='LGA' # 解析schedule.txt为航班详情 flights = {} for line in file('schedule.txt'): origin, dest, depart, arrive, price = line.split(',') flights.setdefault((origin, dest), []) # 将航班详情添加到航班列表中 flights[

实时计算大数据处理的基石-Google Dataflow

六月ゝ 毕业季﹏ 提交于 2019-11-28 05:43:52
​ 此文选自Google大神Tyler Akidau的另一篇文章:Streaming 102: The world beyond batch ​ 欢迎回来!如果您错过了我以前的帖子, Streaming-大数据的未来 ,强烈建议您先花时间阅读那篇文章。 简要回顾一下,上一篇我们介绍了Streaming,批量与流式计算,正确性与推理时间的工具,数据处理模式,事件事件与处理时间,窗口化。 在这篇文章中,我想进一步关注上次的数据处理模式,但更详细。 ​ 这里会用到一些 Google Cloud Dataflow 的代码片段,这是谷歌的一个框架,类似于Spark Streaming或Storm 。 这里还有再说三个概念: Watermarks:水印是关于事件时间的输入完整性的概念。如果到某一个时间的水印,应该是已经获取到了小于该时间的所有数据。在处理无界数据时,水印就作为处理进度的标准。 Triggers: 触发器是一种机制,用于声明窗口何时应该输出,触发器可灵活选择何时应发出输出。我们可以随着时间的推移不断改进结果,也可以处理那些比水印晚到达的数据,改进结果。 Accumulation: 累积模式指定在同一窗口中观察到的多个结果之间的关系。这些结果可能是完全脱节的,即随着时间的推移表示独立的增量,或者它们之间可能存在重叠。 四个新的问题: what? where? when? How?

操作系统详解

时光毁灭记忆、已成空白 提交于 2019-11-28 03:28:29
目录 一 为什么要有操作系统 二 什么是操作系统 三 操作系统与普通软件的区别 四 操作系统发展史 五、操作系统原理 1. 操作系统的资源管理技术 2. 系统调用 3. 操作系统内核 4. 处理器状态: 内核态和用户态 5. 中断(Interupt) 6. 进程 7. 处理器调度 8. 进程的交互 9. 临界区管理 10. 信号量(samaphore)和PV操作 11. 管程 12. 死锁 13. 可变分区存储管理 14. 分页存储管理 15. 分段存储管理 16. 虚拟存储管理 17. 请求段页式虚拟内存管理 18. I/O硬件原理:I/O控制方式 19. I/O软件原理 20. 缓冲技术 21. 驱动调度技术 22. 设备独立性 23. 虚拟设备 24. 文件逻辑结构 25. 文件物理结构 二、Q&A 1. 什么是操作系统?操作系统在计算机系统中的主要作用是什么? 2. 什么是多道程序设计?多道程序设计有什么特点? 3. 计算机操作系统为什么引入进程? 4. 在分时系统中,什么是响应时间?它与哪些因素有关? 5. 解释并发性与并行性 6. 试述存储管理的基本功能。 7. 何谓地址转换(重定向)?哪些方法可以实现地址转换? 8. 什么是文件的共享?介绍文件共享的分类和实现思想。 一 为什么要有操作系统 ( 两本书:现代操作系统、操作系统原理,学好python以后再去研究吧~~)

Streaming-大数据的未来

本小妞迷上赌 提交于 2019-11-28 03:28:00
分享一篇关于实时流式计算的经典文章,这篇文章名为Streaming 101: The world beyond batch 那么流计算如何超越批处理呢? 从这几个方面说明:实时流计算系统,数据处理模式,还有大数据的未来。 一、实时流式计算系统 实时流式计算的意义: 1、企业渴望获得更及时的数据,实时计算系统延迟更低。 2、数据量越来越大,而实时计算系统理论上是处理无界数据的。 3、在数据到达时处理数据,可以更好的分担负载,对于资源的消耗更容易预测。 什么是Streaming? 有很多的定义,比如无界数据处理,近实时结果等,并不能说明Streaming的真正含义。Streaming应该是包含 无界数据 近实时 一致性 可重复结果 等等特征的。 所以这里给出Streaming的定义是: a type of data processing engine that is designed with infinite data sets in mind 一种考虑了无线数据集的数据处理引擎。 (这个定义包含了现在流行的真正的流式和微批) Streaming常见的用法: 1、无限数据:一种不断增长的,基本上无限的数据集。这些通常被称为“流式数据”。无限的流式数据集可以称为无界数据,相对而言有限的批量数据就是有界数据。 2、无界数据处理:一种持续的数据处理模式,应用于上面的无界数据。批量处理数据

限流常规设计和实例

泄露秘密 提交于 2019-11-27 16:49:45
限流算法 计数器限流 固定窗口 滑动窗口 桶限流 令牌桶 漏桶 计数器 计数器限流可以分为: 固定窗口 滑动窗口 固定窗口 固定窗口计数器限流简单明了,就是限制单位之间内的请求数,比如设置QPS为10,那么从一开始的请求进入就计数,每次计数前判断是否到10,到达就拒绝请求,并保证这个计数周期是1秒,1秒后计数器清零。 以下是利用redis实现计数器分布式限流的实现,曾经在线上实践过的lua脚本: local key = KEYS[1] local limit = tonumber(ARGV[1]) local refreshInterval = tonumber(ARGV[2]) local currentLimit = tonumber(redis.call('get', key) or '0') if currentLimit + 1 > limit then return -1; else redis.call('INCRBY', key, 1) redis.call('EXPIRE', key, refreshInterval) return limit - currentLimit - 1 end 一个明显的弊端就是固定窗口计数器算法无法处理突刺流量,比如10QPS,1ms中来了10个请求,后续的999ms的所有请求都会被拒绝。 滑动窗口 为了解决固定窗口的问题