#tile #tiling #rl #ml #hash-table

tilecoding

Rust 实现了 Dr. Richard S. Sutton 的瓦片编码软件。

5 个不稳定版本

0.3.0 2019年6月7日
0.2.0 2019年5月16日
0.1.2 2019年5月16日
0.1.1 2019年5月16日
0.1.0 2019年5月16日

#1489 in 数据结构

MIT/Apache

28KB
219

瓦片编码(Rust 实现)

Crates.io Docs Build Status

这是 Dr. Richard S. Sutton 在其网站上提供的瓦片编码软件的 Rust 版本,网站地址为:[http://incompleteideas.net/tiles/tiles3.html](http://incompleteideas.net/tiles/tiles3.html)。强烈建议您完整阅读该页面,因为它描述了该软件的原理、如何使用它,并提供了示例。

以下是引言的内容:

在此,我们描述了实现瓦片编码核心思想的软件,该思想在 Sutton 和 Barto 的强化学习教科书的第 9.5.4 节中有所描述。[该节](http://www.incompleteideas.net/book/RLbook2018.pdf#page=239) 应在阅读本手册或使用此软件之前阅读并完全理解。该软件目前可用 Python 和 Common Lisp 实现。C 或 C++ 的实现将是受欢迎的贡献。

瓦片编码是将连续变量的向量值表示为具有很少的 1 和很多 0 的大二进制向量的一种方法。二进制向量不是显式表示的,而是表示为 1 的组件的列表。主要步骤是将连续空间多次分区或瓦片化,并从每个瓦片中选择一个与向量值相对应的瓦片。每个瓦片被转换为大二进制向量中的一个元素,并返回瓦片(元素)编号的列表作为向量值的表示。瓦片编码被推荐作为将在线学习方法应用于具有连续状态或动作变量的领域的一种方法。

瓦片编码软件是从在纽约大学汉普顿校区为一种相关但更专业化的用途开发的软件发展而来的,该用途称为 "CMAC"(参见 Miller 和 Glanz 的[外部文档](http://incompleteideas.net/tiles/tilesUNHdoc.pdf))。在此,我们将瓦片编码与完整的 CMAC 分离,这使得它可以更灵活地使用。当前的软件也简化并优化,以适应强化学习应用。例如,我们的代码只有一页长。

此版本提供两种实现:

  1. 使用索引散列表(IHT)
  2. 不使用 IHT(稍微快一点,但不如使用 IHT 作为冲突表安全)

简单示例

// initialize an index-hash-table with size `1024`
let mut iht = IHT::new(1024);

// find the indices of tiles for the point (x, y) = (3.6, 7.21) using 8 tilings:
let indices = iht.tiles(8, &[3.6, 7.21], &[]);

// this is the first time we've used the IHT, so we will get the starting tiles:
assert_eq!(indices, vec![0, 1, 2, 3, 4, 5, 6, 7]);

// a nearby point:
let indices = iht.tiles(8, &[3.7, 7.21], &[]);

// differs by one tile:
assert_eq!(indices, vec![0, 1, 2, 8, 4, 5, 6, 7]);

// and a point more than one away in any dim
let indices = iht.tiles(8, &[-37.2, 7.0], &[]);

// will have all different tiles
assert_eq!(indices, vec![9, 10, 11, 12, 13, 14, 15, 16]);

无运行时依赖