递归推理树(RR-Tree)系统:构建认知推理的骨架结构

探索基于三维评估的动态推理系统如何实现智能决策与知识演化

引言

在复杂问题求解领域(如战略决策或科学探索),人类思维的递归本质为AI系统设计提供了重要启发。我设计并实现的递归推理树(Recursive Reasoning Tree, RR-Tree)系统模仿人类思维的层层推进特性,通过结构化认知过程来解决复杂问题。

本文将深入探讨RR-Tree的核心机制,包括其数据结构、TQR三维评估模型和操作符引擎,并通过黑暗森林策略制定和数学反例发现两个案例展示其实际应用。

核心数据结构:知识树的结构化表达

RRNode:推理树的基本单位

每个推理节点代表一个知识单元,包含以下核心属性:

class RRNode:def __init__(self, name, content, parent=None):self.id = uuid.uuid4().hex  # 唯一标识符self.name = nameself.content = content  # 知识内容self.version = 1  # 版本迭代self.status = "hypothesized"  # 节点状态self.tqr_score = None  # 三维质量评分self.children = []  # 子节点self.parent = parent  # 父节点

节点生命周期经历五个阶段:

  1. hypothesized - 初步假设阶段
  2. evaluating - 质量评估阶段
  3. resolved - 已解决问题
  4. deprecated - 被淘汰方案
  5. merged - 与其它方案合并

RRTree:推理树的整体架构

class RRTree:def __init__(self, root_goal):self.root = RRNode("root", root_goal)self.root.status = "active"self.evaluator = TQREvaluator()  # 质量评估器self.operator = OperatorEngine(self)  # 操作引擎self.audit_log = []  # 推理过程记录self.converged = False  # 收敛状态

推理树支持从根节点开始的渐进式推理,通过reasoning_cycle()方法驱动推理循环。

TQR三维评估模型

推理质量通过三个维度进行评估:

class TQREvaluator:def evaluate(self, node, context):alpha = self._calculate_alignment(node, context)  # 逻辑连贯性beta = self._calculate_novelty(node, context)  # 观点新颖性gamma = self._calculate_complexity(node)  # 认知复杂度# 核心评估公式numerator = alpha * (1 + beta**2)denominator = (1 + gamma)**0.5score = numerator / denominatornode.tqr_score = score

三维度详细说明

  1. 逻辑连贯性(α):考察节点与上下文的匹配程度
    • 计算基础分(6.0)+上下文匹配奖励分(最高4.0)
  2. 观点新颖性(β):评估独特见解的价值
    • 基础分(5.0)+独特词汇奖励(每个0.1分)
  3. 认知复杂度(γ):衡量知识深度
    • 基于内容长度(词数/20)和节点深度(深度*0.1)

操作符引擎:知识树的演变机制

核心操作符定义了知识树的动态演化路径:

操作符功能描述状态转换路径
EXPAND扩展新分支→ hypothesized
CHOOSE选择最佳子节点evaluating → resolved
REWRITE重构节点内容resolved → resolved (v++)
MERGE合并相关节点resolved → merged
DEEP_DIVE递归深入解决复杂问题evaluating → resolved

DEEP_DIVE操作示例

def _deep_dive(self, node):# 创建子推理树subtree = RRTree(f"深度探索: {node.content}")# 执行递归推理for i in range(2):subtree.reasoning_cycle()if subtree.converged: break# 替换原节点new_node = RRNode(f"resolved_{node.name}", subtree.get_conclusion(),parent=node.parent)new_node.status = "resolved"return new_node

推理循环:认知决策的核心

推理树通过周期性循环实现知识的渐进式演化:

def reasoning_cycle(self):current = self._select_node_to_expand()  # 选择最佳节点if current.status in ["hypothesized", "evaluating"]:context = self._get_context(current)  # 获取上下文self.evaluator.evaluate(current, context)  # 三维评估# 基于状态选择操作if self._needs_expansion(current):self.operator.apply("EXPAND", current)elif self._needs_rewrite(current):self.operator.apply("REWRITE", current)elif self._is_complex_node(current):self.operator.apply("DEEP_DIVE", current)self.converged = self._check_convergence()  # 检查收敛

节点选择算法

  1. 收集所有"活动中"的边界节点
  2. 按TQR分数降序排序
  3. 选择最优节点进行扩展

应用案例

黑暗森林策略推导

构建宇宙文明生存策略的推理过程:

dark_forest_tree = RRTree("制定宇宙文明生存策略")# 添加公理基础
axioms = [("axiom_1", "生存是文明第一需要"),("axiom_2", "宇宙物质总量不变"),("axiom_3", "存在其他智慧文明"),("axiom_4", "暴露位置招致毁灭风险")
]

推理路径

(root 制定宇宙文明生存策略)├─ (axiom_1 生存是文明第一需要)├─ (axiom_2 宇宙物质总量不变)├─ (axiom_3 存在其他智慧文明)└─ (axiom_4 暴露位置招致毁灭风险)

经过三次推理循环后,系统推导出核心策略:“保持隐匿和技术优势以规避风险”。

数学反例发现

寻找a⁵ + b⁵ + c⁵ + d⁵ = e⁵的反例过程:

math_tree = RRTree("寻找a⁵+b⁵+c⁵+d⁵=e⁵的反例")
strategy_node = RRNode("strategy", "边界值搜索(max=150)")
math_tree.root.add_child(strategy_node)

关键演变

  1. 初始:边界值搜索策略(max=150)
  2. 扩展出多个搜索子策略
  3. 选择并优化TQR最高的分支
  4. DEEP_DIVE操作生成新解决方案
  5. 结论:27⁵ + 84⁵ + 110⁵ + 133⁵ = 144⁵

结论与展望

RR-Tree系统通过结构化的递归推理实现知识的渐进式演化,其特点包括:

  1. 动态决策机制:基于TQR评分动态选择扩展路径
  2. 可解释推理:完整的S表达式记录推理过程
  3. 自适应知识演化:通过版本控制实现观点迭代
  4. 复杂问题化解:深层递归分解复杂问题

未来方向

  1. 集成大语言模型提升推理能力
  2. 引入多树协同推理机制
  3. 开发可视化推理路径工具
  4. 构建推理知识共享网络

RR-Tree为复杂决策过程提供了结构化框架,将人类思维的递归本质转化为可执行的算法框架,在战略规划、科研探索和复杂决策领域具有广阔应用前景。

import uuid
import random
from collections import deque# ================== 核心数据结构 ==================
class RRNode:"""RR-Tree 节点实现"""def __init__(self, name, content, parent=None):self.id = uuid.uuid4().hexself.name = nameself.content = contentself.version = 1self.status = "hypothesized"  # hypothesized | evaluating | resolved | deprecated | active | mergedself.tqr_score = Noneself.children = []self.parent = parentdef add_child(self, node):"""添加子节点"""node.parent = selfself.children.append(node)return selfdef update_content(self, new_content):"""更新节点内容并增加版本号"""self.content = new_contentself.version += 1return selfdef to_s_expr(self):"""转换为S-表达式"""children_expr = " ".join([child.to_s_expr() for child in self.children])return (f"({self.name} "f"(meta (id '{self.id}') (version {self.version}) "f"(status '{self.status}') (tqr_score {self.tqr_score or 'None'})) "f"{children_expr})")def find_node(self, node_id):"""递归查找节点"""if self.id == node_id:return selffor child in self.children:found = child.find_node(node_id)if found:return foundreturn Noneclass RRTree:"""完整的RR-Tree实现"""def __init__(self, root_goal):self.root = RRNode("root", root_goal)self.root.status = "active"self.evaluator = TQREvaluator()self.operator = OperatorEngine(self)self.audit_log = []self.converged = Falsedef reasoning_cycle(self):"""核心推理循环"""if self.converged:return self.rootcurrent = self._select_node_to_expand()if not current:print("没有可扩展的节点,推理结束")self.converged = Truereturn self.rootprint(f"当前处理节点: {current.name} ({current.status}) - {current.content}")# 评估节点质量if current.status in ["hypothesized", "evaluating"]:context = self._get_context(current)print(f"评估节点: {current.name}, 上下文: {context}")self.evaluator.evaluate(current, context)print(f"评估完成 - TQR分数: {current.tqr_score:.2f}")# 应用操作符if current.children and all(c.status != "hypothesized" for c in current.children):print(f"节点 {current.name} 有子节点,执行CHOOSE操作")chosen = self.operator.apply("CHOOSE", current)print(f"选择了节点: {chosen.name} - {chosen.content}")else:if self._needs_expansion(current):print(f"节点 {current.name} 需要扩展,执行EXPAND操作")new_nodes = self.operator.apply("EXPAND", current)print(f"新增了 {len(new_nodes)} 个子节点")elif self._needs_rewrite(current):print(f"节点 {current.name} 需要重写,执行REWRITE操作")self.operator.apply("REWRITE", current)print(f"重写完成: {current.content}")elif self._is_complex_node(current):print(f"节点 {current.name} 复杂,执行DEEP_DIVE操作")self.operator.apply("DEEP_DIVE", current)print(f"深度探索完成: {current.content}")# 检查收敛条件self.converged = self._check_convergence()return self.rootdef _select_node_to_expand(self):"""基于TQR选择最佳扩展节点"""frontier = self._get_frontier_nodes()if not frontier:# 如果没有可扩展节点,尝试激活根节点if self.root.status == "active":print("激活根节点进行扩展")self.root.status = "evaluating"return self.root# 或者选择第一个子节点for child in self.root.children:if child.status in ["active", "hypothesized"]:print(f"选择子节点 {child.name} 进行扩展")return childreturn None# 按TQR分数排序并返回最佳节点frontier.sort(key=lambda x: x.tqr_score or 0, reverse=True)best_node = frontier[0]print(f"从候选节点中选择: {best_node.name} (分数: {best_node.tqr_score or '无'})")return best_nodedef _get_frontier_nodes(self):"""获取所有处于活跃状态的节点"""frontier = []queue = deque([self.root])while queue:node = queue.popleft()if node.status in ["hypothesized", "evaluating"]:frontier.append(node)queue.extend(node.children)return frontierdef _get_context(self, node):"""获取节点上下文信息"""context = []current = nodewhile current:context.append(f"{current.name}: {current.content}")current = current.parentreturn " <- ".join(reversed(context))def _needs_expansion(self, node):"""判断是否需要扩展"""return len(node.children) < 3 and (node.tqr_score or 0) > 0def _needs_rewrite(self, node):"""判断是否需要重写"""if node.status != "resolved":return Falsereturn (node.tqr_score or 0) < 7.0 and node.version < 3def _is_complex_node(self, node):"""判断是否需要深度递归"""return ((node.tqr_score or 0) > 7.0and self.evaluator._calculate_complexity(node) > 5.0)def _check_convergence(self):"""检查树是否收敛(所有节点已解决或弃用)"""queue = deque([self.root])while queue:node = queue.popleft()if node.status not in ["resolved", "deprecated", "active", "merged"]:return Falsequeue.extend(node.children)return Truedef find_node(self, node_id):"""在树中查找节点"""return self.root.find_node(node_id)def to_s_expr(self):"""将整棵树转换为S-表达式"""return self.root.to_s_expr()def get_conclusion(self):"""获取最终结论(根节点的第一个已解决子节点)"""if self.converged:for child in self.root.children:if child.status == "resolved":return child.contentreturn "未达成结论"# ================== TQR评估模型 ==================
class TQREvaluator:"""TQR评估引擎"""def __init__(self, alpha_weight=1.0, beta_weight=1.5, gamma_weight=0.7):self.weights = {'alpha': alpha_weight, 'beta': beta_weight, 'gamma': gamma_weight}def evaluate(self, node, context):"""三维度评估节点质量"""alpha = self._calculate_alignment(node, context)beta = self._calculate_novelty(node, context)gamma = self._calculate_complexity(node)# 核心公式: TQR = (α * (1 + β²)) / (1 + γ)^0.5numerator = self.weights['alpha'] * alpha * (1 + (self.weights['beta'] * beta) ** 2)denominator = (1 + self.weights['gamma'] * gamma) ** 0.5score = numerator / denominator if denominator != 0 else numeratornode.tqr_score = scorereturn scoredef _calculate_alignment(self, node, context):"""逻辑连贯性评估"""# 简化实现:基于上下文匹配度context_words = set(word for word in context.split() if len(word) > 3)node_words = set(word for word in node.content.split() if len(word) > 3)intersection = context_words & node_words# 基本分数 + 匹配度加分base_score = 6.0  # 中等分数match_bonus = min(len(intersection) * 0.5, 4.0)  # 最高加4分return base_score + match_bonusdef _calculate_novelty(self, node, context):"""新颖性评估"""# 简化实现:基于独特词汇unique_words = set(node.content.split()) - set(context.split())uniqueness = len(unique_words) / 10  # 每个独特词汇加0.1分# 基本分数 + 独特性加分base_score = 5.0return min(base_score + uniqueness, 10.0)def _calculate_complexity(self, node):"""认知复杂度评估"""# 基于内容长度和嵌套深度word_count = len(node.content.split())depth = self._get_node_depth(node)complexity = word_count / 20 + depth * 0.1return min(complexity, 10.0)def _get_node_depth(self, node):"""计算节点在树中的深度"""depth = 0current = nodewhile current.parent:depth += 1current = current.parentreturn depth# ================== 操作符引擎 ==================
class OperatorEngine:"""操作符执行引擎"""def __init__(self, tree):self.tree = treeself.state_transitions = {"EXPAND": {"from": ["active", "resolved", "evaluating"], "to": "hypothesized"},"CHOOSE": {"from": "evaluating", "to": "resolved"},"REWRITE": {"from": ["resolved", "active"], "to": "resolved"},"MERGE": {"from": "resolved", "to": "merged"},"DEEP_DIVE": {"from": ["evaluating", "active"], "to": "resolved"}}def apply(self, operator, target, params=None):"""应用操作符"""if isinstance(target, str):node = self.tree.find_node(target)else:node = targetif not node:print(f"目标节点未找到: {target}")return None# 检查状态转换是否有效valid_states = self.state_transitions.get(operator, {}).get("from", [])if node.status not in valid_states:print(f"无效状态转换: 无法在状态 {node.status} 下应用 {operator}")return nodeif operator == "EXPAND":return self._expand(node)elif operator == "CHOOSE":return self._choose(node)elif operator == "REWRITE":return self._rewrite(node)elif operator == "MERGE":return self._merge(node, params.get('sibling_nodes', []) if params else [])elif operator == "DEEP_DIVE":return self._deep_dive(node)else:print(f"未知操作符: {operator}")return nodedef _expand(self, node):"""EXPAND操作实现"""# 生成子节点内容expansions = [f"关于'{node.content}'的深入分析",f"对'{node.content}'的补充观点",f"'{node.content}'的实际应用"]new_nodes = []for i, content in enumerate(expansions):child = RRNode(f"{node.name}_child_{i + 1}", content, parent=node)child.status = "hypothesized"node.add_child(child)new_nodes.append(child)node.status = "evaluating"return new_nodesdef _choose(self, parent_node):"""CHOOSE操作实现"""if not parent_node.children:print(f"节点 {parent_node.name} 没有子节点可供选择")return None# 选择TQR分数最高的子节点best_child = max(parent_node.children, key=lambda x: x.tqr_score or 0)# 更新所有子节点状态for child in parent_node.children:child.status = "deprecated" if child != best_child else "resolved"parent_node.status = "resolved"return best_childdef _rewrite(self, node):"""REWRITE操作实现"""# 改进节点内容improved_content = f"[v{node.version + 1}] 改进版: {node.content}"node.update_content(improved_content)return nodedef _merge(self, target_node, sibling_nodes):"""MERGE操作实现"""# 收集所有需要合并的节点all_nodes = [target_node] + sibling_nodes# 创建新父节点parent_content = f"合并观点: {', '.join(n.content for n in all_nodes)}"new_parent = RRNode(f"merged_{target_node.name}", parent_content, parent=target_node.parent)# 重新设置父关系for node in all_nodes:node.parent = new_parentnode.status = "merged"new_parent.children.append(node)# 在树结构中替换节点if target_node.parent:target_node.parent.children.remove(target_node)target_node.parent.add_child(new_parent)return new_parentdef _deep_dive(self, node):"""DEEP_DIVE递归操作"""# 创建子推理树subtree = RRTree(f"深度探索: {node.content}")# 添加初始节点start_node = RRNode("deep_start", "开始探索", parent=subtree.root)subtree.root.add_child(start_node)# 执行子推理过程for i in range(2):  # 简化:执行2个推理周期subtree.reasoning_cycle()if subtree.converged:break# 创建新节点替换原节点new_content = subtree.get_conclusion()new_node = RRNode(f"resolved_{node.name}",new_content,parent=node.parent)new_node.status = "resolved"# 在树结构中替换节点if node.parent:node.parent.children.remove(node)node.parent.add_child(new_node)return new_node# ================== 使用示例 ==================
if __name__ == "__main__":print("===== 黑暗森林策略推理 =====")# 创建推理树 - 黑暗森林策略dark_forest_tree = RRTree("制定宇宙文明生存策略")# 添加公理节点axioms = [("axiom_1", "生存是文明第一需要"),("axiom_2", "宇宙物质总量不变"),("axiom_3", "存在其他智慧文明"),("axiom_4", "暴露位置招致毁灭风险")]for name, content in axioms:node = RRNode(name, content)node.status = "active"dark_forest_tree.root.add_child(node)print("\n===== 初始状态 =====")print(dark_forest_tree.to_s_expr())# 执行推理循环for i in range(3):print(f"\n===== 推理周期 {i + 1} =====")dark_forest_tree.reasoning_cycle()print(dark_forest_tree.to_s_expr())# 最终结论print("\n===== 最终结论 =====")print(dark_forest_tree.get_conclusion())print("\n\n===== 数学反例发现 =====")# 数学反例发现math_tree = RRTree("寻找a⁵+b⁵+c⁵+d⁵=e⁵的反例")math_tree.evaluator.weights = {'alpha': 1.2, 'beta': 2.0, 'gamma': 0.5}strategy_node = RRNode("strategy", "边界值搜索(max=150)")strategy_node.status = "active"math_tree.root.add_child(strategy_node)for i in range(3):print(f"\n===== 推理周期 {i + 1} =====")math_tree.reasoning_cycle()print(math_tree.to_s_expr())print("\n===== 数学反例 =====")print(math_tree.get_conclusion())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917877.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《动手学深度学习》读书笔记—9.5机器翻译与数据集

本文记录了自己在阅读《动手学深度学习》时的一些思考&#xff0c;仅用来作为作者本人的学习笔记&#xff0c;不存在商业用途。 语言模型是自然语言处理的关键&#xff0c; 而机器翻译是语言模型最成功的基准测试。 因为机器翻译正是将输入序列转换成输出序列的 序列转换模型&a…

Mysql进行操作时锁的具体行为

场景一&#xff1a;单个事务更新一条存在的数据 假设有表 user (id PK, name, age)&#xff0c;数据&#xff1a;[id1, nameAlice, age25] 你的 SQL&#xff1a; UPDATE user SET age 26 WHERE id 1; 底层动作&#xff1a; 事务 A (主动方) 发起更新请求。Lock Manager 介入&…

人工智能领域、图欧科技、IMYAI智能助手2025年7月更新月报

IMYAI 平台 2025 年 7 月重要功能更新与优化汇总 2025年07月31日更新 细节优化&#xff1a; 修复了移动端提交后自动弹出侧边栏的BUG。优化对话高级配置界面&#xff0c;增加滚动条并固定高度&#xff0c;避免内容超出屏幕。音乐生成界面的人声选择新增“合唱”选项&#xff…

HTTP 与 HTTPS 的区别深度解析:从原理到实践

HTTP 和 HTTPS 是现代 Web 开发中不可或缺的协议&#xff0c;它们决定了浏览器与服务器之间数据传输的方式。HTTPS 作为 HTTP 的安全版本&#xff0c;在安全性、性能和用户体验上都有显著提升。本文将通过万字篇幅&#xff0c;结合图表和代码示例&#xff0c;详细剖析 HTTP 与 …

STM32F407VET6学习笔记11:smallmodbus_(多从机)创建新的slave从机

今日记录一些smallmodbus 创建新的slave 从机 的过程&#xff0c;以及使用的关键点. 目录 创建新的从机对应操作函数与buffer 创建新的从机线程与操作代码&#xff1a; slave使用的要点&#xff1a; 完整的slave代码&#xff1a; 能正常通信&#xff1a; 创建新的从机对应操作函…

【论文阅读】Transformer Feed-Forward Layers Are Key-Value Memories

Transformer Feed-Forward Layers Are Key-Value Memories 原文摘要 研究背景与问题&#xff1a; 前馈层占Transformer模型参数总量的2/3&#xff0c;但其功能机制尚未得到充分研究 核心发现&#xff1a;提出前馈层实质上是键值存储系统 键&#xff1a;这里的键与训练数据中出…

昇思+昇腾开发板:DeepSeek-R1-Distill-Qwen-1.5B 模型推理部署与 JIT 优化实践

目录 引言 模型推理部署 环境准备 安装 MindSpore 查看当前 mindspore 版本 安装 MindNLP 模型与分词器加载 导入必要的库 加载分词器 加载模型 对话功能实现 设置系统提示词 构建对话历史输入 推理函数实现 交互界面实现 推理JIT优化 基础环境安装 JIT 优化配置…

用phpstudy安装php8.2后报错:意思是找不到php_redis.dll拓展时

1.地址&#xff1a;https://pecl.php.net/package/redis/6.2.0/windows 2.下载3.解压后复制php_redis.dll到phpstudy_pro\Extensions\php\php8.2.9nts\ext目录 4.打开php.ini&#xff0c;加上 extension_dir “D:\software\phpstudy_pro\Extensions\php\php8.2.9nts\ext”

开源列式分布式数据库clickhouse

这里写自定义目录标题开源列式OLAP数据库clickhouseclickhouse使用 ClickHouse 的场景如何理解行式存储和列式存储clickhouse-go开源列式OLAP数据库clickhouse OLAP (分析型)&#xff1a;专为快速扫描、聚合、分析海量数据设计。OLTP (事务型)&#xff1a;专为处理大量短事务&…

Java Stream API 详解(Java 8+)

1. Stream 操作分类Stream 操作分为两类&#xff1a;中间操作&#xff08;Intermediate Operations&#xff09;返回新的 Stream&#xff0c;可以链式调用&#xff08;如 filter, map, sorted, distinct&#xff09;。惰性求值&#xff1a;只有遇到终止操作时才会执行。终止操作…

「源力觉醒 创作者计划」_文心大模型4.5系列开源模型, 从一行代码到一个生态:聊聊开源战略那些事儿,顺便扯扯文心大模型 4.5 的使用心得

前言&#xff1a;哈喽&#xff0c;大家好&#xff0c;今天给大家分享一篇文章&#xff01;并提供具体代码帮助大家深入理解&#xff0c;彻底掌握&#xff01;创作不易&#xff0c;如果能帮助到大家或者给大家一些灵感和启发&#xff0c;欢迎收藏关注哦 &#x1f495; 目录从一行…

算法专题(二)回文链表

1、源代码class Solution {public boolean isPalindrome(ListNode head) {ListNode fasthead,slowhead; //快慢指针都在头结点//快指针走2步&#xff0c;慢指针走一步。//双数快指针最后是null&#xff0c;单数快指针下一位是nullwhile(fast!null && fast.next!null){f…

2025《艾诺提亚失落之歌》逆向工程解包尝试

前言 想开发一下光明之魂&#xff0c;看能不能解包《艾诺提亚失落之歌》的模型。 之前写了&#xff08;https://blog.csdn.net/weixin_42875245/article/details/148616547?spm1001.2014.3001.5501&#xff09; 沿用这个思路进行逆向工程解包。 文章目录请添加图片描述前言…

JVM 03 类加载机制

JVM 将字节码二进制流加载到内存称为类加载。 什么时候加载类 new 实例化对象。而对象所属类还没被加载。读取/设置类的静态非常量字段&#xff0c;常量字段在常量池。调用类的静态方法。类初始化&#xff0c;优先初始化父类。虚拟机启动时&#xff0c;先加载用户指定的主类。 …

STM32H7+FreeRTOS+LwIP移植EtherCAT开源主站SOEM

代码下载什么的就不多说了&#xff0c;直接看需要移植修改的代码。 1、osal.c修改 /******************************************************************************* * *** **** *** *** …

VijosOJ:中文信息学竞赛的二十年开源之路

VijosOJ&#xff1a;中文信息学竞赛领域的老牌开源在线判题系统 在中文编程教育与信息学竞赛的发展历程中&#xff0c;在线判题系统&#xff08;OJ&#xff09;扮演了至关重要的角色。它们不仅是选手训练的 “战场”&#xff0c;更是知识传递与社区交流的枢纽。VijosOJ&#x…

QPainter::CompositionMode解析

基本概念目标(Destination)&#xff1a;已经存在的像素。源(Source)&#xff1a;要绘制的新像素。组合模式&#xff1a;决定源和目标如何混合。总结SourceOver&#xff1a;源绘制在目标之上。DestinationOver&#xff1a;目标绘制在源之上。Clear&#xff1a;二者重叠区域被清空…

对接钉钉审批过程记录(C#版本)

钉钉开放平台&#xff1a;API总览 - 钉钉开放平台 按照开放平台操作指引&#xff0c;进入到钉钉开发者后台&#xff1a;开发者后台统一登录 - 钉钉统一身份认证&#xff0c;进行应用创建。 按照开放平台指引下载钉钉SDK&#xff08;新版&#xff09;。 在vs引入钉钉dll文件。 获…

AFSIM入门教程03.03:更新所有依赖库版本

系列索引&#xff1a;AFSIM入门教程索引 上一篇中更新了tiff库版本&#xff0c;本文将更新所有使用到的依赖库版本。 失败了 依赖库 首先获取哪些库被使用了。打开源码目录&#xff0c;搜索# Configure the 3rd_party&#xff0c;可以看到调用第三方库的代码。 官方提供的…

完美解决hive external表中csv字段内容含“,“逗号的问题

为解决hive表中csv字段内容含","逗号的问题&#xff0c;网上几乎都是说要用org.apache.hadoop.hive.serde2.OpenCSVSerde。 使用方法为&#xff1a; 1、mysql导出时&#xff0c;加一个ENCLOSED BY ‘"’&#xff0c; 示例&#xff1a; mysql -h 10.16.0.10 -P …