Branch(分支)
每次运行随机选择它的一个输出分支。
用途
让行为多样、自动化不那么齐整——交替路线、随机化跑哪个策略、或在两条路间分流。
你在画布上接的分支就是候选列表。 没有关于可选项的独立配置。
何时用
- 在多个等价例程间交替,让各次运行不完全相同。
- 在两个策略间分流以作比较。
- 随机选起始方向、目标或顺序。
何时不用
前提
每个分支端口都必须接线。 校验强制如此,因为未接的分支会随机把运行带进死胡同。
如何运行
- 从已接的分支端口(
branch1…branchN)构建候选列表。 - 用所设 Mode 选一个。
- 沿选中分支路由,并记录选择(输出:
selectedBranch、mode、branchCount)。
设置
| 设置 | 类型 | 范围 | 备注 |
|---|---|---|---|
| Mode | 选择 | random、noRepeat、weighted | 必填 |
| Branch count | integer | 2–8 | 必填。 每个在画布上加一个端口 |
| Weights | map | 每分支 1–100 | weighted 模式;缺省默认 1 |
三种模式
| 模式 | 行为 |
|---|---|
random | 均匀。可能连续重复同一分支 |
noRepeat | 洗牌的袋子——每个分支用过一遍才会重复 |
weighted | 权重高的更常被选 |
noRepeat 通常才是人们说"随机"时想要的。 均匀随机会心安理得地连抽同一分支三次;不重复的袋子不会。
不重复的袋子在一次运行内跨循环轮次延续,运行之间重置。
端口
| 端口 | 走它的时机 | 必接 |
|---|---|---|
| branch1…branchN | 该分支被选中 | 全部必接 |
| Fatal | mode 或分支数无效 | 永不被走 |
Branch 是产品里接线最严格的节点:每一个分支端口都必须连接。
基础示例
两条路线 50/50 分流:
- Mode:Random
- Branch count:
2
实际示例——变换扫描顺序
每次运行都先扫同一方向是可识别的模式。轮换它只需一个节点:
Branch 选择;变量记录选择;switch 据此行动。把"选"与"做"分开让图可读,还让后续节点知道走了哪条路线。
高级示例——加权策略
五次里一次跑昂贵的彻底例程,其余跑快速版:
- Mode:Weighted
- Branch count:
2 - Weights:
branch1 = 4(快)、branch2 = 1(彻底)
最佳实践
- 接上每个分支。 这是必需,未接的分支会让运行死胡同。
- 要多样优先
noRepeat。 均匀随机会扎堆。 - 把选择记进变量,让后续节点和运行日志知道发生了什么。
- 让各分支结果等价。 随机选择应改变怎么做,不改变做没做成。
- 用权重而非嵌套 Branch 表达不均等的几率。
性能笔记
- 选择是纯计算——几乎免费。
- 成本全在分支做的事。某分支慢得多,你的平均运行时间就是加权平均,不是快路径。
内存笔记
- 不重复的袋子是每次运行的小结构;可忽略。
- 运行之间不持久——袋子每次运行重置。
常见错误
| 错误 | 后果 | 修复 |
|---|---|---|
| 留一个分支不接 | 校验错误;运行时会死胡同 | 全接上 |
| 指望 Random 交替 | 均匀随机会重复 | 用 noRepeat |
| 拿 Branch 做数据决策 | 行为不确定 | 用 If |
| 权重加起来不是 100 | 没问题——它们是相对的 | 无需修复 |
| 各分支结果不同 | 运行随机成败 | 让分支等价 |
故障排查
同一分支总被选中。
Mode 是 random。换 noRepeat。
节点校验失败。 一个或多个分支端口未接。
某分支似乎从不运行。 weighted 模式下它的权重相对太低。
调低分支数删掉了一条连线。 预期如此——尾部端口被移除、孤儿连线被剪。
FAQ
能有几个分支? 2 到 8。
No-repeat 运行之间重置吗? 是。它只在一次运行内跨循环轮次。
没写权重的分支得多少? 1。
能看到选了哪个分支吗?
能——输出记录 selectedBranch,运行日志里可见。