MarkovJunior 概率生成语言
基于模式匹配与约束传播的概率编程语言,用重写规则生成迷宫、地牢、建筑等程序化内容,内置 153 个示例,C# 实现。
爱鲜报评分
0 人评分
8.3k
星数
否
中文
C#
主语言
是
活跃
5
贡献者
人工分析
EDITORIAL推荐理由
它把「概率编程」和「程序化生成」结合得非常优雅,几行规则就能生成迷宫、房间、体素建筑,非常适合游戏开发与生成艺术。项目自带 153 个示例模型,可直接运行观察效果,学习曲线友好。MIT 协议,代码与文档质量高,是研究马尔可夫算法与约束传播的绝佳素材。
适用场景
- 游戏关卡与地牢的程序化生成
- 体素/像素艺术与生成艺术创作
- 马尔可夫算法与约束传播的教学研究
- 随机过程与自避行走等算法实验
- 为游戏引擎提供地图生成原型
优点
- 规则式 DSL 极简,几行即可生成复杂结构
- 自带 153 个示例模型,可直接运行验证
- 支持任意维度,2D/3D 通用无需改代码
- 约束传播推理可反向约束生成结果
- MIT 协议,C# 实现,代码结构清晰
缺点
- 需要理解马尔可夫算法与约束传播概念
- 官方文档以英文为主,中文资料较少
- 大规模网格生成时性能可能受限
- 生态与工具链相对小众,集成需自行封装
MarkovJunior 是什么
MarkovJunior 是一门概率编程语言:程序由一组有序的重写规则组成,解释器通过模式匹配与约束传播来执行推理。项目以数学家 Andrey Markov 命名,致敬其提出的马尔可夫算法。
它最吸引人的地方在于:几行规则就能生成迷宫、地牢、建筑和体素场景。仓库内置了 153 个示例模型,覆盖迷宫、房间布局、Sokoban 谜题、程序化建筑等。
核心概念
重写规则
最基本的程序只有一条规则,例如 (B=W):每一步把随机的黑色格子变成白色。
更实用的例子是迷宫生成模型 (WBB=WAW),仅一行代码即可生成迷宫,而传统语言实现往往需要几十行。
执行流程
解释器每一步会:
- 在规则列表中找到第一条在当前网格上有匹配的规则;
- 找出该规则的所有匹配;
- 随机选择一个匹配并应用;
- 当所有规则都无匹配时停止。
约束传播与推理
MarkovJunior 支持概率推理:可以对未来状态施加约束,只生成满足约束的运行结果。例如 Sokoban 规则 {RWB=BRW RB=BR} 能让红色智能体把白色箱子组织成指定形状。
多维推广
多维下没有天然的「最左匹配」,因此 MJ 提供了几种策略:
(exists):随机选择一个匹配;{forall}:贪心选择互不冲突的匹配子集;- 叠加态:每个格子保存布尔向量,记录被禁止的时空模式,从而实现推理。
代价是失去图灵完备性,但实践中仍能描述大量有趣的随机过程。
典型示例
| 模型 | 规则 | 效果 |
|---|---|---|
| Basic | (B=W) |
随机黑格变白 |
| Growth | (WB=WW) |
类似 Eden 生长模型 |
| MazeGrowth | (WBB=WAW) |
一行代码生成迷宫 |
| RegularSAW | (RBB=WWR) |
自避随机行走 |
| MazeBacktracker | RBB=GGR + RGG=WWR |
回溯法迷宫 |
适用人群
- 游戏开发者:需要程序化生成关卡、地牢、地图原型;
- 生成艺术创作者:探索体素、像素风格的随机结构;
- 算法爱好者:研究马尔可夫算法、约束传播、随机过程。
上手建议
项目使用 C# 编写,模型以 XML 描述。建议先阅读仓库中的 syntax.md 了解 XML 语法,再从 models/ 目录挑选感兴趣的示例运行观察。由于官方文档以英文为主,中文用户可结合示例代码理解规则语义。
评论
- 暂无评论,来写第一条吧。