AX 爱鲜报

MarkovJunior 概率生成语言

基于模式匹配与约束传播的概率编程语言,用重写规则生成迷宫、地牢、建筑等程序化内容,内置 153 个示例,C# 实现。

爱鲜报评分

0.0

0 人评分

8.3k

星数

否

中文

C#

主语言

是

活跃

5

贡献者

人工分析

EDITORIAL

推荐理由

它把「概率编程」和「程序化生成」结合得非常优雅,几行规则就能生成迷宫、房间、体素建筑,非常适合游戏开发与生成艺术。项目自带 153 个示例模型,可直接运行观察效果,学习曲线友好。MIT 协议,代码与文档质量高,是研究马尔可夫算法与约束传播的绝佳素材。

适用场景

  • 游戏关卡与地牢的程序化生成
  • 体素/像素艺术与生成艺术创作
  • 马尔可夫算法与约束传播的教学研究
  • 随机过程与自避行走等算法实验
  • 为游戏引擎提供地图生成原型

优点

  • 规则式 DSL 极简,几行即可生成复杂结构
  • 自带 153 个示例模型,可直接运行验证
  • 支持任意维度,2D/3D 通用无需改代码
  • 约束传播推理可反向约束生成结果
  • MIT 协议,C# 实现,代码结构清晰

缺点

  • 需要理解马尔可夫算法与约束传播概念
  • 官方文档以英文为主,中文资料较少
  • 大规模网格生成时性能可能受限
  • 生态与工具链相对小众,集成需自行封装
上手难度 进阶

MarkovJunior 是什么

MarkovJunior 是一门概率编程语言:程序由一组有序的重写规则组成,解释器通过模式匹配与约束传播来执行推理。项目以数学家 Andrey Markov 命名,致敬其提出的马尔可夫算法。

它最吸引人的地方在于:几行规则就能生成迷宫、地牢、建筑和体素场景。仓库内置了 153 个示例模型,覆盖迷宫、房间布局、Sokoban 谜题、程序化建筑等。

核心概念

重写规则

最基本的程序只有一条规则,例如 (B=W):每一步把随机的黑色格子变成白色。

更实用的例子是迷宫生成模型 (WBB=WAW),仅一行代码即可生成迷宫,而传统语言实现往往需要几十行。

执行流程

解释器每一步会:

  1. 在规则列表中找到第一条在当前网格上有匹配的规则;
  2. 找出该规则的所有匹配;
  3. 随机选择一个匹配并应用;
  4. 当所有规则都无匹配时停止。

约束传播与推理

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/ 目录挑选感兴趣的示例运行观察。由于官方文档以英文为主,中文用户可结合示例代码理解规则语义。

评论

登录后才可评论与评分

0 条评论

  • 暂无评论,来写第一条吧。