Q-learning
强化学习基础概念
State :观测到的环境状态
Action :当前 Agent 选择的行为
Policy : Agent 选择行为的依据的策略
Reward :执行完 Action 之后得到的激励
State’ :执行完策略之后环境状态
强化学习流程
Q-learning 算法概述
奖励矩阵 $R_{s,a}$ :表示在 $s$ 状态下采取动作 $a$ 时,从环境中获得的即时奖励 Reward
Q 值矩阵 $Q_{s,a}$ :表示从 $s$ 状态下采取动作 $a$ 时,并在未来遵循最佳策略所能获得的累计奖励的估计
初始化为 0 矩阵
核心思想:不断更新 Q 值矩阵 $Q_{s,a}$ 来逼近最优 Q 值矩阵‘,从而得到所谓的最优策略
更新公式:$Q(s, a) \leftarrow Q(s, a) + \alpha \left[ R + \gamma \max_{a’} Q(s’, a’) - Q(s, a) \right]$
训练过程:
给定 $\gamma$ 和 reward 矩阵 $R_{s,a}$ ;
初始化 Q 值矩阵 $Q_{s,a}$ 为零矩阵;
For ea ...
xv6-lab9-fs
中文题目翻译
Large files(moderate)
实现二级间接块
题目理解原始文件的data block分布
12个直接块
1个一级间接块–>指向256个数据块
目标的data block分布
11个直接块
1个一级间接块–>指向256个数据块
1个二级间接块–>指向 256*256 个数据块
lab实现的原理很简单——添加二级间接块
代码实现修改关于数据块数目宏定义
1234#define NDIRECT 11 // 直接块数目#define NINDIRECT (BSIZE / sizeof(uint)) // 一级间接块数目#define NDINDIRECT (NINDIRECT * NINDIRECT) // 二级间接块数目#define MAXFILE (NDIRECT + NINDIRECT + NDINDIRECT) // 最大块数
修改disk inode
12345678struct dinode { short type; // File type short major; ...
xv6-lab4-traps
什么是trap?trap:CPU暂时搁置普通指令的执行,强制将控制权转移到处理该事件的特殊代码上,以下三种情况都会出现trap:
系统调用:用户程序执行ecall(用户程序不直接使用设备)
异常:用户或内核执行非法的事情(杀死违规例程)
设备中断:磁盘读写完成中断、时钟中断(用户程序不直接使用设备)
trap的一些说明
trap发生时正在执行的代码随后需要恢复
trap对于正在执行的代码是透明的
trap是怎么执行的?trap的逻辑流程
trap将控制权转移到内核
内核保存寄存器和其他状态
内核执行适当的处理程序代码
内核恢复保存的状态并从trap中返回
原始代码从它停止的地方恢复
trap的实际流程
RISC-V CPU采取的硬件操作
为内核C代码执行而准备的汇编程序集“向量”
决定如何处理陷阱的C陷阱处理程序
系统调用或设备驱动程序服务例程
trap的举例说明初始 xv6 启动后,运行第一个程序 shell , shell 运行在用户态,想要输出一些字符串到命令行时,执行系统调用 wirte 切换到内核,输出字符串之后再切换回用户态
trap的具体过程(gdb调试说明) ...
xv6-lab2:系统调用
https://xv6.dgs.zone/labs/requirements/lab2.html
阅读在你开始写代码之前,请阅读xv6手册《book-riscv-rev1》的第2章、第4章的第4.3节和第4.4节以及相关源代码文件:
系统调用的用户空间代码在 user/user.h 和 user/usys.pl 中。
内核空间代码是 kernel/syscall.h 、 kernel/syscall.c 。
与进程相关的代码是 kernel/proc.h 和 kernel/proc.c 。
xv6手册阅读 理论篇
操作系统应该需要满足的要求
多路复用:可以支持多个进程,让进程分时复用计算机的资源
隔离:进程出错时,不能影响不依赖于它的进程,不影响操作系统
交互:不同进程之间可以进行合理可控的交互
为什么需要操作系统?而不是直接将系统调用设计成一个库?什么时候可以设计成一个库?
直接用上面的操作系统需要满足的要求来回答即可:库函数实现无法满足多路复用、隔离
不满足多路复用:不能保证进程定期放弃 CPU
不满足 ...
常用软件
日常软件snipaste截图软件
F1:截图
F3:将粘贴板上的任何东西编程贴图(如下图)
笔记软件Typora这款软件是我最开始接触 markdown 语法时
现在用于写博客,主要是方便传图片
Obsidian这个主要用于做笔记
如果有必要写成博客,再转移到 Typora 上,顺便复习一遍
编程软件VSCode用习惯了,学长以及实验室大家都用这个,方便连服务器
看论文Zotero大家都推荐,也就用了,也懒得换了
电机控制
为什么要写这个笔记?本人基础很菜,看书痛苦不堪,但更不喜欢听课,网上资料难得,所以想要记录下自己学习本课程时,从一个菜狗逐步摸索的过程
本笔记的思路借鉴于OSTEP,希望呈现出一个渐进的过程,而不是直说结论;致敬OSTEP,如果每本教材都能有如此质量,你会觉得知识很简单
为什么只有两章?因为后面的我还没学
声明:
我不能完全保证正确,因为我是菜狗
我的符号可能和教材不一样,因为我感觉教材的符号标的不好
简单的图片我希望自己画,但是太耗时间,只能拍书上的照片
考试出分:期末考了 60+ ,说实话超出我的预期,我的目标是不挂科的,毕竟只是考试前突击了下(需要一个好老师,不那么在乎课堂表现;需要一个 hxd 教你怎么做实验、写报告)
第二章电机负载系统基础电机负载系统的动力学方程
先推导单轴系统,再推导多轴系统到单轴系统的等效
以下图为例, $T_e$ 为电机给传动轴的电磁转矩, $T_L$ 为负载给传动轴的负载转矩, $n$ 为转速,则转动角速度 $\Omega = \frac{2\pi n}{60}$
由转动定律可得 $T_e - T_L = J\frac ...
OSTEP虚拟化内存
内存虚拟化
代码随想录-刷题总结
代码随想录刷题总结
设计模式
设计模式学习
STL常用命令自查
STL常用命令自查