MarkovModel
描述
MarkovModel 是一个 Swift 框架,它利用马尔可夫模型的强大功能来处理和计算已知系统中的状态。可以用于机器学习、游戏和其他方面多个目标。要了解更多关于马尔可夫模型的信息,请访问 https://wikipedia.org/wiki/Markov_model
特性
- 自动根据给定的交易序列创建马尔可夫链;
- 允许手动矩阵操作以更改成员;
- 用于调试的漂亮矩阵打印;
- 马尔可夫决策过程,包括加权随机过程;
- 预测下一个状态;
- 完整的 API 文档.
安装
CocoaPods
使用添加到您的 Podfile 文件
pod 'MarkovModel'
Carthage
使用将您要添加的代码放入您的 Cartfile 或 Cartfile.private 文件中。
github "db-in/MarkovModel"
Swift Package Manager
使用将您要添加的代码放入您的 Package.swift 文件中。
let package = Package(
name: "myproject",
dependencies: [
.package(url: "https://github.com/db-in/MarkovModel.git"),
],
targets: [
.target(
name: "myproject",
dependencies: ["MarkovModel"]),
]
)
需求
版本 | 语言 | Xcode | iOS |
---|---|---|---|
1.0.0 | Swift 4.1 | 9.0 | 10.0 |
编程指南
马尔可夫模型可以用以达到许多目标。本节将解释其用法,并提供一些可能的场景。
- 模型训练
- 决策过程
- 调试
模型训练
首先在您想要使用模型的地方导入包。处理模型有两种方式:通过实例化或通过静态训练。
import MarkovModel
...
let markovModel = MarkovModel(transitions: ["A", "B", "C", "A", "C"])
对于非常大的数据量(转换),您可能更愿意采取静态方法,因为它可以在闭包中一次性训练和操作模型。
import MarkovModel
...
MarkovModel.process(transitions: ["A", "B", "C", "A", "C"]) { model in
// perform the operations on model
}
决策过程
为了性能和更好的API设计,所有马尔可夫决策过程算法都在矩阵本身中完成。您可以通过调用 next
来计算任何未来状态。有三种可能的决策过程选项: predict
、random
和 weightedRandom
。
markovModel.chain.next(given: "B", process: .random)
您可以省略过程参数,默认选项将是 predict
。
markovModel.chain.next(given: "B")
有时您可能想获取矩阵本身的某些列。使用 probabilities
方法可以检索从给定状态的所有可能的转换。
markovModel.chain.probabilities(given: "B")
选择过程
为了性能和更好的API设计,所有马尔可夫决策过程算法都在矩阵本身中完成。您可以通过调用 next
来计算任何未来状态。有三种可能的决策过程选项: predict
、random
和 weightedRandom
。
let markovModel = MarkovModel(transitions: ["A", "A", "B"])
print(markovModel)
// or
print(markovModel.chain)
// It will print
B A
| 0.00 0.50 | B
| |
| 0.00 0.50 | A
常见问题
对于没有转换的状态怎么办?
- 为了内存安全和高性能,一旦这些状态不影响选择过程,它们就不会被《
MarkovModel
》考虑。