- 博客(77)
- 收藏
- 关注
原创 Potential Reward Shaping不改变智能体的原始最优策略
Potential Reward Shaping是一种理论上不改变智能体最优策略的奖励塑形方法。通过数学推导证明,potential shaping会导致价值函数产生状态相关的常数平移(V'^π(s)=V^π(s)+Φ(s)),而不影响动作间的相对优劣。核心在于shaping项γΦ(s')-Φ(s)形成了时间维度上的望远镜求和,使累计影响仅剩初始状态Φ(s)。这种精心设计的"可积项"确保了最优策略不变性,即argmax_a Q'(s,a)=argmax_a Q(s,a)。
2026-02-11 12:14:31
658
原创 【Rust GUI开发入门】编写一个本地音乐播放器(15. 记录运行日志)
本文介绍了真正的音乐播放器日志记录实现方案,通过env_logger实现同时输出日志到控制台和文件。主要包含:1)使用MultiWriter自定义多目标输出,同时输出到控制台和日志文件;2)设置日志格式和过滤级别;3)重定向Paniceme消息到日志文件,便于调试。代码已开源在Github的zeedle项目。该方案兼顾开发调试和发布后的日志记录需求,有效解决GUI程序异常诊断难题问题。
2025-10-02 22:58:45
304
原创 【Rust GUI开发入门】编写一个本地音乐播放器(14. 应用打包-制作安装程序)
本文介绍了如何使用cargo-packager打包Rust编写的音乐播放器程序。主要内容包括:1) 打包原因:Windows系统依赖C运行时DLL文件;2) 安装配置打包工具;3) 在Cargo.toml中设置打包参数,包括资源文件和安装包图标;4) 使用dumpbin查找依赖DLL;5) 执行打包命令并测试安装包。最终生成的可执行文件位于target/release目录,经测试安装后能正常运行。教程配套代码已开源在Github。
2025-10-01 00:43:08
329
原创 【Rust GUI开发入门】编写一个本地音乐播放器(13. 实现按键绑定)
摘要:本文介绍如何使用Slint UI为播放器添加按键绑定功能。通过FocusScope组件处理窗口聚焦时的按键输入,定义不同按键触发对应操作:空格键控制播放/暂停,方向键切换歌曲,F1-F4快速切换不同页面标签。代码示例展示了按键事件与回调函数的绑定实现方式。(98字)
2025-10-01 00:09:28
311
原创 【Rust GUI开发入门】编写一个本地音乐播放器(12. 国际化应用-多语言支持)
本文介绍了为Slint UI播放器页面添加多语言支持的完整流程:1) 使用@tr修饰待翻译文本;2) 通过命令行提取字符串生成.pot文件;3) 使用Poedit工具翻译并保存为.po文件;4) 在build.rs中配置语言目录进行静态编译;5) 通过Rust API动态切换语言。文章提供了详细的操作步骤和代码示例,帮助开发者实现应用国际化,支持中、西、德等多种语言。相关代码已开源在Github。
2025-09-30 23:54:24
420
原创 【Rust GUI开发入门】编写一个本地音乐播放器(11. 支持动态明暗主题切换)
本文介绍了Slint UI框架中实现明暗主题切换的方法。通过修改Palette.color-scheme属性(设为ColorScheme.light/dark)即可实现运行时主题动态切换,但需注意该功能需在UI层通过function/callback实现,无法在Rust代码中直接操作。教程配套代码已开源在Github项目zeedle中,并提供了明暗主题效果图示例。最新版本1.13.1存在ColorScheme无法导出到Rust的限制,相关讨论可参考Github社区帖子。
2025-09-30 23:16:08
275
原创 【Rust GUI开发入门】编写一个本地音乐播放器(10. 拼装UI组件)
本文介绍了如何将多个UI组件整合成一个完整的音乐播放器界面。通过TabWidget将功能划分为四个标签页:歌曲列表库(展示并管理歌曲)、歌词面板(显示当前播放歌词)、设置面板(配置语言和主题等)和关于页面(显示应用信息)。核心组件包括歌曲列表视图、播放控制面板和歌词面板,通过数据绑定实现交互功能如播放控制、进度调整和主题切换等。该播放器支持多语言、明暗主题切换,并提供了完整的音乐播放管理功能。
2025-09-30 22:47:43
243
原创 【Rust GUI开发入门】编写一个本地音乐播放器(9. 制作设置面板)
本教程介绍了如何使用Slint语言创建一个简单的设置面板界面。该面板包含三个设置项:音乐目录(带输入框)、语言选择(下拉框)和主题切换(开关),所有元素都居中显示。每个设置项采用水平布局,包含左侧标签和右侧控件,整体采用垂直布局排列。代码已开源在Github的zeedle项目中,展示了如何通过Slint实现界面布局和交互逻辑,包括属性绑定和回调处理。
2025-09-30 22:14:38
230
原创 【Rust GUI开发入门】编写一个本地音乐播放器(8. 从文件中提取歌曲元信息)
本文介绍了如何使用Rust的lofty库解析音频文件元数据。教程包含三部分功能实现:1)解析歌曲基础信息(歌名、歌手、时长),2)提取歌词并按时间戳处理,3)获取专辑封面图片数据。所有代码已开源,通过PathBuf路径参数处理不同格式音频文件,返回结构化的歌曲信息对象。解析过程针对不同场景进行了优化:基础信息在启动时加载,而歌词和封面仅在播放时解析。
2025-09-30 18:16:11
333
原创 【Rust GUI开发入门】编写一个本地音乐播放器(7. 制作歌词显示面板)
摘要:本文介绍了一个歌词面板的实现方案,采用水平布局(左30%显示专辑封面,右70%显示歌词)。代码使用Slint语言构建,左侧包含专辑图像、歌手和歌曲名信息,右侧通过ListView组件展示歌词。关键特性包括:支持歌词进度高亮显示(根据当前播放时间匹配歌词时间戳)、视图滚动控制,以及后续将介绍的歌词文件解析功能。该布局实现了音乐播放时图文并茂的歌词展示效果。
2025-09-30 17:33:14
151
原创 【Rust GUI开发入门】编写一个本地音乐播放器(6. 制作播放控制面板)
摘要:该代码实现了一个水平布局的音乐播放控制面板,包含专辑封面、歌曲信息、播放控制按钮和进度条。主要功能包括:显示专辑图片和歌曲信息;提供顺序/随机播放模式切换按钮;上一曲/播放暂停/下一曲控制按钮;支持拖动进度条调整播放进度;通过回调函数处理各种播放控制事件。组件采用Slint语言编写,使用HorizontalLayout和VerticalLayout进行布局,通过双向绑定实现播放状态同步。
2025-09-30 17:05:11
345
原创 【Rust GUI开发入门】编写一个本地音乐播放器(5. 制作音乐列表组件)
本文介绍了一个音乐列表组件的实现方案,包含标题栏和列表项两部分。标题栏支持按歌曲名、歌手和时长排序,通过自定义排序图标和枚举类型实现交互功能。列表项展示歌曲信息(歌名、歌手、时长),支持双击触发播放回调。组件采用Slint语言开发,包含完整的UI布局和交互逻辑,结构清晰,可扩展性强。 (150字)
2025-09-30 16:22:51
225
原创 【Rust GUI开发入门】编写一个本地音乐播放器(4. 绘制按钮组件)
本文介绍了如何使用Slint UI框架构建音乐播放器界面控件,重点展示了通过Path指令绘制矢量图标的方法。文章提供了四个播放器按钮的实现代码:下一曲按钮(NextSongButton)、上一曲按钮(PrevSongButton)、播放/暂停切换按钮(PlayPauseButton)和顺序播放模式按钮(InOrderButton)。每个按钮都采用Path指令绘制,并包含交互逻辑,如点击事件和状态切换功能。代码示例展示了如何通过MoveTo、LineTo、ArcTo等SVG指令创建自定义图标,同时保持UI风格
2025-09-29 23:43:37
422
原创 【Rust GUI开发入门】编写一个本地音乐播放器(3. UI与后台线程通信)
本文介绍了在Slint UI框架中实现线程间通信的两种方法:1)通过管道(channel)从UI线程向后台线程发送消息;2)通过slint::invoke_from_event_loop()从后台线程向UI主线程发送任务。重点展示了如何定义消息类型、使用全局状态变量更新UI,以及在不同线程间安全地传递数据和指令。这种模式充分利用了Rust的类型安全和Slint的全局状态管理特性,实现了高效可靠的跨线程UI更新。
2025-09-29 17:09:53
426
原创 【Rust GUI开发入门】编写一个本地音乐播放器(2. Rodio播放库的使用)
本文介绍了使用Rust音频库rodio播放音频的基本方法。主要内容包括:添加rodio依赖、创建音频流和sink对象、解码音频文件、控制播放流程(播放/暂停/恢复)。重点解析了关键API功能,并指出stream_handle硬件资源管理机制和生命周期注意事项,强调必须保持stream_handle生命周期长于sink才能正常播放音频。代码示例演示了20秒播放-20秒暂停-20秒播放的完整流程。
2025-09-27 23:38:39
576
原创 【Rust GUI开发入门】编写一个本地音乐播放器(1. 主要技术选型&架构设计)
本文介绍了音乐播放器应用的技术选型和架构设计。UI框架选用Slint,因其声明式设计、样式逻辑分离和高性能。音频播放采用Rodio库,支持多种格式。元数据解析使用Lofty库。架构采用经典的双线程模型,UI主线程负责渲染和事件处理,后台线程执行任务并更新UI状态,以避免阻塞卡顿。这种设计兼顾了性能与开发便利性。
2025-09-27 22:12:35
533
原创 【从0开始】使用Flax NNX API 构建简单神经网络并训练
与 Linen API 不同,NNX 使用起来对初学者更加简单,跟 PyTorch 的体验更加接近。
2025-02-06 18:30:14
892
原创 Rust调用Windows API制作进程挂起工具
一个 sysinternals/pssuspend 替代工具,用于在Windows上挂起/恢复指定PID的进程。目前只能使用未公开的系统API来实现,底层使用了ntdll.dll。
2025-01-13 21:03:08
706
转载 静态优化问题与动态优化问题
静态优化问题:一次性决策,不考虑时间变化,目标函数和约束是固定的。动态优化问题:决策随时间演化,未来的决策影响当前决策,目标函数和约束可能随时间变化。
2024-08-14 21:30:29
1061
原创 资本回收率(Captial Recovery Factor, CRF)
工程经济学中的一个概念,用于计算在一定期间内逐年回收投资本金和利息的年金值。它用于将初始投资金额(即现值)等效为一系列等额的年金付款,帮助分析投资的可行性或确定贷款的还款额。CRF1ry−1r1ry其中,r是年利率,y是年数。
2024-08-12 19:47:20
2251
原创 Rust中的特殊类型(引用、智能指针等)所占的内存大小
综上所述,智能指针/引用所占内存大小是固定的,但是其指向的数据大小未必固定。对于所占内存固定已知的数据类型,运行时会把它们放在栈上,对于所占内存不固定的数据类型,运行时会把它们放在堆上,然后可以通过存放在栈上的指针来操作堆上的数据。Rust中,一个普通指针的大小为usize,与计算机CPU字长相等,对64位计算机来说usize=64/8=8字节。的本质都是智能指针,它们的大小都是固定的(大小不固定也没法通过编译啊),它们的本质是通过存放在栈上的指针访问堆内存,来操作堆上包裹的数据。
2024-08-03 01:54:37
729
原创 Rust的运行时多态
Rust的静态多态即编译时多态,通过**泛型+特征约束(Generic Type + Trait Constrait)**来实现;那么动态多态(运行时多态)呢?答案是。特征对象不是一个实例,而是一个结构体类型。语法是,编译时指示某个对象是实现TraitName的类型,其具体类型未知。
2024-08-02 16:51:22
613
原创 Windows下安装Mujoco1.50
最近看了很多在Windows上安装Mujoco1.50的教程,大多数过于繁杂,下面根据官方文档,写一个相对简化的安装方法,主要是其实很简单,总共就三句话,并没有说1.50版本要设置环境变量啥的,不知道其他博主在哪看的。
2024-07-17 01:17:48
1511
原创 DDPG算法
确定性策略梯度理论,在DPG算法中被提出,原论文,推导过程相当复杂,我也不大能看懂,总之用就完事了😂训练流程:参考了DQN,因此属于Off Policy算法,使用了经验回放缓存,引入了actor target和critic target。
2023-09-06 13:45:17
407
原创 深度强化学习算法的参数更新时机
深度强化学习中往往涉及到多个神经网络来拟合策略函数、值函数等,什么时候更新参数因算法而异,与具体算法架构/算法思想紧密相关。
2023-09-05 22:41:52
622
原创 PPO算法
全称Proximal Policy Optimization,是TRPO(Trust Region Policy Optimization)算法的继承与简化,大大降低了实现难度。
2023-09-05 21:29:32
284
原创 Windows系统下MMDeploy预编译包的使用
MMDeploy步入v1版本后安装/使用难度大幅下降,这里以部署MMDetection项目的Faster R-CNN模型为例,将PyTorch模型转换为ONNX进而转换为Engine模型,部署到TensorRT后端,实现高效推理,主要参考了。每调用一次就会加载一次模型,效率很低,只是用来测试模型可用性,不能用在生产环境。要高效使用模型,可以集成Detector到自己的应用程序里面,一次加载,多次推理。
2023-08-30 18:42:30
1267
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅