4. 逻辑与计算引擎 (Math Engine)

这是 MindLogic 最引以为傲的核心驱动力。普通的图谱只是一张死板的图,而在 MindLogic 中,图谱是一张活的电子表格逻辑沙盘

4.1 置信度推演 (Confidence Inference)

置信度用于处理图谱中的“逻辑概率”或“事实发生可能性”。当您串联多个节点时,您可以选中连接器 (Junctor),并在侧边栏的 “置信度推演 (Operators)” 中为其配置运算符。系统会根据运算符,将上游的置信度自动传导到下游:

  • 模糊与 (Fuzzy AND, ∧):取所有上游输入置信度的最小值(木桶效应)。
  • 模糊或 (Fuzzy OR, ∨):取所有上游输入置信度的最大值。
  • 代数乘积 (Product, ×):将上游概率相乘,适用于计算多个互相独立的连续事件的联合概率。
  • 概率和 (Sum Probability, Σp):计算 1 - (1-p1)(1-p2)...,用于推演多个能够独立促成结果的概率。
  • 其他还包含:求和 (Sum)平均值 (Average)取反 (Negate)互补 (Complement) 等十余种数学算子。

提示:实体的默认置信度由上游推演而来,但如果您手动修改了某个实体的置信度,它将被“锁定(Override)”为您指定的值。

4.2 变量与公式 (Data & Formulas)

让节点化身为电子表格单元格,使底层数据沿连线自动流转。这通过侧边栏的 “变量与公式 (Attributes)” 面板实现。

1. 定义与输出变量

在“已定义属性”或“输出公式”中,您可以为当前节点新增属性。

  • 例如,您可以直接定义常量:Key: cost,Value: 100
  • 您也可以定义公式:Key: total_cost,Value: cost * 1.2

2. 接收上游分支数据 (Inputs)

如果一个节点有多条输入连线,这些连线传来的数据会自动挂载在隐藏的 inputs 数组中。 为了方便提取,您可以直接通过 变量名[ID] 的语法来提取特定分支的数据:

  • 例如,上游有两个节点分别传来了 time,您可以写公式 time[1] + time[2]

3. 使用内置宏函数 (Macros)

MindLogic 引擎在底层注入了多个强大的聚合函数,它们会自动遍历所有上游节点传来的变量进行聚合计算:

  • SUM(cost):将所有上游传来的 cost 值相加。
  • MIN(time) / MAX(time):找出上游所有 time 变量中的最小值或最大值。
  • PRODUCT(rate):将所有上游传来的 rate 值连乘。

4. 原生 JS 引擎与丰富的全局函数支持

底层的推演引擎基于完整的 JSContext,并且我们直接将大量的 Excel 风格函数和原生数学函数提升到了全局变量,意味着您可以直接像在 Excel 中一样使用它们:

逻辑与容错函数 (Logic & Error Handling)

  • IF(条件, 满足时的值, 不满足时的值):条件判断。
  • AND(条件1, 条件2) / OR(条件1, 条件2) / NOT(条件):基础逻辑。
  • IFERROR(表达式, 默认值)非常推荐。在遇到空值、除以0等异常时,使用它提供默认值,避免链路中断。例如:IFERROR(A / B, 0)
  • ISBLANK(值) / ISNULL(值):判断上游变量是否存在。

文本处理函数 (Text Functions)

用于拼接或处理需要在 UI 或报表展示的文本信息:

  • CONCAT(text1, text2, ...):多段文本合并。
  • LEN(text):计算字符串长度。
  • LEFT(text, n) / RIGHT(text, n):截取左右侧字符串。
  • UPPER(text) / LOWER(text):转换大小写。
  • TRIM(text):去除首尾空格。

高级数学与日期函数 (Advanced Math & Date)

  • 数学计算:ROUND(x), ABS(x), POW(x, y), CEIL(x), FLOOR(x), SQRT(x), MOD(num, div), PI()
  • 随机生成:RAND()(0~1之间),RANDBETWEEN(min, max)(范围随机整数)。
  • 日期时间:NOW()(当前时间戳),TODAY()(今天凌晨的时间戳),YEAR(date), MONTH(date), DAY(date), DATEDIF(start, end)(计算天数差)。

您依然可以随时降级使用原生的 JS 语法,比如 Math.max(x, y) 等。

4.3 高阶使用技巧 (Advanced Tips)

1. 变量名转义与特殊字符 (Variable Name Escaping)

MindLogic 的计算引擎底层基于强大的 JavaScript 环境。如果您的变量名包含括号、空格或数学符号等特殊字符(例如 订单延误(小时)),直接写在公式中可能会被误认为是一段代码,从而引发语法错误(如 SyntaxError)。

  • 正确做法:在使用 SUMAVERAGE 等内置聚合函数时,将这类变量名用英文双引号或单引号包裹起来传入。
  • 示例SUM("订单延误(小时)")MAX('交货周期 (天)')
  • 原理:引擎识别到字符串后,会自动在所有上游透传来的数据中,查找与该字符串完全匹配的变量名并进行聚合计算。对于标准英文/拼音字母组成的变量名(如 cost),则不需要加引号,直接写 SUM(cost) 即可。

2. 属性与数据的自动透传 (Attribute Pass-through)

数据在连线网络中流转时具有自动透传和汇聚特性:

  1. 上游变量无缝流入:任何节点上自定义的属性值、或通过公式计算输出的值,都会顺着连接线,自动被携带并传递到下游节点的数据池(inputs)中。
  2. 智能同名变量累加:对于标准命名的变量,引擎会自动在底层帮您进行同名变量的累加合并。例如,如果上游有 3 个节点分别传来了 10、20、30 的 cost,您在下游节点的公式里直接写 cost + 100 即可(此时 cost 已自动求和为 60),甚至无需显式书写 SUM(cost)。这种“所连即所得”的机制大大简化了复杂模型的配置。

4.4 动态占位符 (Dynamic Placeholders)

计算引擎最直观的体验方式是“数据可视化”。 在节点的标题或 Markdown 文本描述中,您可以随时使用 { } 语法插入变量名。

  • 操作步骤:双击节点进入编辑模式,输入 成本为:{cost} 万
  • 效果:当图谱结构发生变化,或上游的数据变动时,引擎会瞬间完成重新计算,节点上的文字会自动实时更新为 成本为:120 万,无需任何刷新操作!