You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何生成可互相推导的公式所有合法组合变体?

公式自动推导组合实现方案

第一步:重构公式存储结构

不要仅存储变量列表,需要将每个公式的所有等价变形都拆解为「左值(单个变量)+ 右值(表达式)」的结构化形式,示例如下:

# 基础公式库存储所有原始公式的等价变形
formula_lib = [
    # 欧姆定律全变形
    {"left": "U", "right": "R * I"},
    {"left": "R", "right": "U / I"},
    {"left": "I", "right": "U / R"},
    # 焦耳定律全变形
    {"left": "P", "right": "U * I"},
    {"left": "U", "right": "P / I"},
    {"left": "I", "right": "P / U"},
]

第二步:实现公式关联替换逻辑

核心逻辑为遍历所有公式对,只要A公式的右值包含B公式的左值变量,就将A公式对应变量替换为B公式的右值,生成新公式,替换时注意加括号避免运算优先级错误。示例代码如下:

def generate_all_formulas(base_formulas, max_derive_depth=3):
    all_formulas = base_formulas.copy()
    for _ in range(max_derive_depth):
        new_add = []
        # 遍历所有公式两两匹配
        for target_f in all_formulas:
            for replace_f in all_formulas:
                replace_var = replace_f["left"]
                # 检查待替换变量是否出现在目标公式的右值中
                if replace_var in target_f["right"]:
                    # 变量替换,给代入的表达式套括号保证运算逻辑正确
                    new_right = target_f["right"].replace(replace_var, f"({replace_f['right']})")
                    new_formula = {"left": target_f["left"], "right": new_right}
                    # 去重后加入新公式列表
                    if new_formula not in all_formulas and new_formula not in new_add:
                        new_add.append(new_formula)
        if not new_add:
            # 没有新公式生成时提前终止推导
            break
        all_formulas.extend(new_add)
    return all_formulas

第三步:适配考试场景筛选可用公式

生成所有推导公式后,输入题目给出的已知变量列表,即可筛选出右值所有变量都属于已知变量的公式,直接代入数值计算即可得到结果。

可选优化方向

  • 引入符号计算库sympy自动完成表达式化简,去掉多余括号、合并同类项,输出更简洁的公式形式
  • 给每个变量绑定物理量单位,新增替换后的单位校验逻辑,避免出现逻辑错误的无效公式

内容的提问来源于stack exchange,提问作者idkwhat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 04:27:01