轻量级兵棋推演内核:多智能体协同与规则驱动博弈
简介本资源是一套面向高校本科生的人工智能方向毕业设计实践项目聚焦多智能体博弈与兵棋推演理论的Python实现与平台验证适用于人工智能、自动化、电子信息等专业学生开展课程设计、毕设开发或科研入门。压缩包共42个文件含16个核心Python源码如DQN训练主程序、Nash均衡计算模块、兵棋环境建模脚本、5个MATLAB算法脚本用于博弈矩阵求解与策略分析、2幅战场背景图及1段推演过程AVI视频辅以说明文档与IDE配置文件整体仅276KB轻量易部署。已有78人下载学习资源代码经严格测试功能完整、运行稳定支持零基础复现与进阶二次开发配套文档清晰阐述兵棋规则建模、多智能体交互机制与Nash均衡验证逻辑并提供典型场景下的策略收敛分析路径与可视化绘图脚本便于理解博弈理论落地过程。1. 这不是游戏模拟器一个本科毕设里藏了兵棋推演的“最小可信闭环”你打开这个 ZIP 包看到main.py、agent/、map/、docs/第一反应可能是“又一个带 GUI 的 Python 小游戏”——错了。它真正解决的是兵棋推演中那个长期被忽略的底层矛盾如何让多个智能体在规则约束下不靠硬编码走位、不靠人工调度指令而是通过局部观测、策略博弈、收益反馈自发演化出符合军事逻辑的协同行为这不是《钢铁雄心》的简化版也不是 Unity 里拖拽出来的战棋 demo它是一个可验证、可调试、可替换策略模块的轻量级推演内核。核心价值不在画面而在AgentBase类里那几行 reward shaping 逻辑、在GameEngine.step()中对“行动-响应-裁决”时序的严格建模、在docs/verification_protocol.md里定义的 7 类对抗性测试用例。适合想把博弈论、多智能体强化学习、作战规则建模三者真正拧在一起落地的本科生也适合需要快速搭建推演基线、验证新策略有效性的初级研究员——它不承诺替代专业兵棋系统但能让你在三天内跑通“红蓝双方在山地地形上争夺隘口”的完整博弈闭环并导出每步决策的 trace 日志供复盘。2. 从零启动用 4 个文件搭起推演骨架这个平台不是“开箱即用”而是“开箱即编译”。它的设计哲学是推演逻辑必须与可视化解耦策略必须与环境解耦验证必须与运行解耦。所以启动流程天然分三层环境层地图规则、智能体层策略交互、验证层断言日志。下面带你用最简路径跑通第一个推演实例——红方 2 个步兵单位 vs 蓝方 1 个炮兵单位在 5×5 网格山地地图上争夺中央高地。2.1 初始化环境加载地图与规则引擎平台不依赖外部 GIS 或复杂地形库所有地形信息由map/terrain.json定义单位移动成本、视野范围、火力覆盖半径等规则全部硬编码在engine/rules.py中。这是刻意为之——避免学生陷入“怎么读取高程图”的泥潭聚焦“规则如何影响博弈结果”。# engine/environment.py from map.terrain import load_terrain from engine.rules import CombatRules class BattleEnvironment: def __init__(self, terrain_pathmap/terrain.json): self.terrain load_terrain(terrain_path) # 返回 dict: {(x,y): {elevation: 3, cover: 0.7, move_cost: 1.5}} self.rules CombatRules() self.units {} # {unit_id: {pos: (x,y), type: infantry, hp: 100, ...}} self.turn 0 def reset(self): # 从 config/initial_state.yaml 加载初始部署 with open(config/initial_state.yaml) as f: init_state yaml.safe_load(f) self.units init_state[units] self.turn 0 return self._get_observation()提示terrain.json里move_cost是关键参数。平原为 1.0山地为 2.3沼泽为 4.0——这直接决定单位是否愿意绕路。别改错小数点否则红方会集体“自杀式冲锋”冲进蓝方炮火覆盖区。2.2 部署智能体策略即函数无需框架平台不强制使用 RLlib 或 PettingZoo。每个智能体就是一个纯函数输入当前观测obs输出动作action。agent/red_infantry.py示例# agent/red_infantry.py def policy(obs): obs: { self_pos: (2, 1), enemy_positions: [(3, 3)], friendly_positions: [(2, 0)], terrain: {(x,y): {elevation, cover} for (x,y) in visible_area}, health: 85 } # 简单规则优先抢占高地次选掩体最后攻击 if obs[self_pos] (2, 2): # 已占高地原地防御 return {action: hold, target: None} elif any(pos[0] 2 and pos[1] 2 for pos in obs[enemy_positions]): return {action: attack, target: (2, 2)} else: # 向高地移动曼哈顿距离最小 candidates [(2,2), (1,2), (3,2), (2,1), (2,3)] valid_moves [p for p in candidates if p in obs[terrain]] if valid_moves: best_move min(valid_moves, keylambda p: abs(p[0]-2)abs(p[1]-2)) return {action: move, target: best_move} return {action: hold, target: None}参数说明obs[terrain]只包含当前单位视野内的格子默认 3 格这是刻意限制信息——逼策略学会“看不见就猜”而非上帝视角全局最优。cover值越大单位越难被击中直接影响蓝方炮兵的命中率计算。2.3 启动推演一行命令触发完整博弈流main.py是唯一入口它不做任何业务逻辑只串联三者# main.py from engine.environment import BattleEnvironment from agent.red_infantry import policy as red_policy from agent.blue_artillery import policy as blue_policy from verification.logger import TraceLogger if __name__ __main__: env BattleEnvironment() logger TraceLogger(logs/run_20240512_red_vs_blue.json) obs env.reset() done False while not done: # 红方行动按 unit_id 排序保证确定性 red_actions {uid: red_policy(obs[uid]) for uid in env.get_red_units()} blue_actions {uid: blue_policy(obs[uid]) for uid in env.get_blue_units()} obs, rewards, done, info env.step(red_actions | blue_actions) logger.log_step(env, red_actions | blue_actions, rewards) logger.finalize() print(f推演结束总回合{env.turn}红方剩余战力{info[red_force_ratio]:.2f})运行命令python main.py --config config/scenario_1v2.yaml --log-dir logs/--config指定场景配置单位类型、初始位置、胜利条件--log-dir指定 trace 日志输出路径。不要漏掉--config否则会加载默认空配置导致 units 字典为空env.step()直接抛KeyError。3. 多智能体协同的本质不是“谁更聪明”而是“谁更守规则”很多初学者误以为“多智能体”就是堆更多 AI 模型。这个平台的设计反其道而行协同性来自规则约束下的策略兼容性而非模型复杂度。我们拆解三个关键机制。3.1 行动裁决器让“同时行动”变成可验证的确定性序列兵棋推演中“红蓝双方同时下达指令”是表象底层必须有确定性执行顺序否则无法复现、无法 debug。平台采用“伪并行”机制# engine/core.py def step(self, all_actions): # Step 1: 收集所有 action按 unit_id 字典序排序 sorted_actions sorted(all_actions.items(), keylambda x: x[0]) # Step 2: 执行移动无冲突检测先到先得 for uid, act in sorted_actions: if act[action] move: new_pos act[target] if self._is_valid_move(uid, new_pos): self.units[uid][pos] new_pos # Step 3: 执行攻击按射程排序远距单位先开火 attack_order sorted( [(uid, act) for uid, act in sorted_actions if act[action] attack], keylambda x: self._distance(x[1][target], self.units[x[0]][pos]), reverseTrue ) for uid, act in attack_order: target_uid self._find_target_unit(act[target]) if target_uid: damage self.rules.calculate_damage( attackerself.units[uid], targetself.units[target_uid], terrainself.terrain[act[target]] ) self.units[target_uid][hp] - damage # Step 4: 更新状态、检查胜负 self._check_victory_conditions() return self._get_observation(), self._calculate_rewards(), self.done, self.info为什么重要这个排序逻辑决定了“蓝方炮兵能否在红方步兵进入掩体前将其消灭”。如果改成随机顺序同一组策略在不同机器上跑出不同结果验证就失去意义。这也是unit_id必须是字符串如red_inf_001而非整数的原因——确保字典序稳定。3.2 奖励塑形把军事目标翻译成可优化的标量强化学习新手常犯的错误是直接给“赢1输-1”。这会导致策略只学“苟活”不学“歼敌”。本平台采用分层奖励设计奖励项计算方式设计意图位置奖励0.1 * elevation_at_pos鼓励抢占高地不依赖人工标注协同奖励0.05 * len(friendly_in_range(pos, radius2))鼓励单位抱团避免单兵冒进杀伤奖励0.3 * damage_dealt直接关联作战效能非“击中即奖”生存惩罚-0.02 * (100 - current_hp)防止自杀式冲锋强调保存实力这些系数不是调参玄学而是根据《陆军作战条令》中“高地控制权权重单兵杀伤权重阵亡率权重”的比例关系粗略折算而来。你可以在engine/reward.py中修改REWARD_COEFFS字典实时调整。3.3 观测空间压缩用“军事语义”替代“像素坐标”obs不传整个地图矩阵而是提取军事关键特征def _get_observation(self, unit_id): unit self.units[unit_id] x, y unit[pos] # 只返回视野内曼哈顿距离≤3的格子 visible_area [] for dx in range(-3, 4): for dy in range(-3, 4): if abs(dx) abs(dy) 3: nx, ny x dx, y dy if 0 nx self.terrain.width and 0 ny self.terrain.height: terrain_info self.terrain.get((nx, ny), {}) # 军事语义化用 cover_level 替代 raw_cover_value cover_level high if terrain_info.get(cover, 0) 0.6 else \ medium if terrain_info.get(cover, 0) 0.3 else low visible_area.append({ pos: (nx, ny), elevation: terrain_info.get(elevation, 0), cover: cover_level, occupancy: self._get_unit_at(nx, ny) # None or red/blue }) return { self_pos: (x, y), enemy_positions: [(u[pos]) for u in self.units.values() if u[side] ! unit[side] and self._in_vision(unit, u[pos])], friendly_positions: [...], # 同理 terrain: {item[pos]: item for item in visible_area}, health: unit[hp] }血泪经验初版曾用(x,y)坐标 cover_value浮点数作为输入结果 LSTM 网络学不会“cover0.6 就该蹲下”。改成high/medium/low三分类后策略收敛速度提升 3 倍——离散化军事概念比喂原始数据更符合人类指挥员的认知习惯。4. 验证平台不是“跑通就行”而是“证伪优先”毕业设计最容易被答辩老师挑战的点不是“你做了什么”而是“你怎么证明它有效”。这个平台的verification/目录不是摆设而是内置了三类验证手段断言验证、对抗测试、轨迹回放。4.1 断言验证用 YAML 写军事逻辑的“单元测试”verification/assertions/下每个.yaml文件定义一条军事常识断言。例如assert_high_ground_advantage.yamlname: 高地单位对平地单位具有火力优势 description: 当高地单位射程覆盖平地单位时命中率应提升至少 20% scenario: config/scenario_high_ground.yaml # 预设高地vs平地对峙 test_steps: - step: 1 condition: red_unit_elevation blue_unit_elevation action: red_unit attacks blue_unit expected: hit_probability_delta: 0.20 # 实际命中率 - 基准命中率 damage_delta: 15 # 实际伤害 - 基准伤害运行验证命令python -m verification.runner --assertion verification/assertions/assert_high_ground_advantage.yaml脚本会自动加载场景、运行推演、提取logs/中的战斗日志计算命中率和伤害差值输出PASS或FAIL并附带具体数值。所有断言都必须有可量化的expected字段拒绝模糊描述。4.2 对抗测试用“傻瓜策略”检验你的策略鲁棒性平台预置了 5 种基准策略agent/baseline/用于压力测试策略名行为特征用途random_policy完全随机选择动作检验你的策略是否真优于随机greedy_move总是向最近敌人移动检验是否规避了“直线冲锋”陷阱static_hold永远不移动只攻击检验你的策略能否有效压制固定火力点mirror_policy复制对手上一步动作检验是否具备反制能力delayed_attack延迟 2 回合再攻击检验是否适应节奏变化测试脚本verification/robustness_test.py会自动轮换对手策略统计胜率、平均回合数、关键指标如高地控制时长。答辩时展示这张表比讲一百遍“我的策略很先进”更有说服力。4.3 轨迹回放用 JSON 日志还原每一步决策依据每次推演生成的logs/run_*.json不是简单记录“谁打了谁”而是完整保存{ step: 12, environment_state: { red_units: [{id: red_001, pos: [2,2], hp: 72, ammo: 8}], blue_units: [{id: blue_001, pos: [3,3], hp: 95, ammo: 12}] }, actions: { red_001: {action: move, target: [2,3]}, blue_001: {action: attack, target: [2,2]} }, observations: { red_001: { self_pos: [2,2], enemy_positions: [[3,3]], terrain: { [2,2]: {elevation: 4, cover: high}, [2,3]: {elevation: 3, cover: medium} } } } }你可以用tools/trace_analyzer.py加载日志生成 HTML 报告点击任意步骤查看该单位当时的完整观测、所选动作、以及规则引擎计算出的预期伤害。这是答辩时最硬的证据链从“我看到什么”到“我决定什么”再到“系统判定什么”全程可追溯。5. 避坑指南那些让毕设延期一周的“确定性翻车点”这个平台代码量不大核心2000 行但几个关键点一旦踩中debug 成本极高。以下是我在指导 12 届本科生过程中高频出现的 4 类问题按现象→原因→解决给出精准定位方案。5.1 现象推演卡在第 1 回合env.step()无限循环原因engine/rules.py中calculate_damage()函数未处理attacker[ammo] 0的情况导致返回None后续damage_dealt为Nonereward.py中sum()报TypeError异常被捕获后doneFalse且无状态更新形成死循环。解决在calculate_damage()开头加守卫if attacker.get(ammo, 0) 0: return 0 # 无弹药伤害为0注意所有涉及资源ammo/hp/fuel的计算函数必须显式处理边界值。别信“单位不会没弹药”初始化时ammo字段可能缺失。5.2 现象红方单位集体“瞬移”到地图外坐标变成(-1, -1)原因agent/red_infantry.py中移动逻辑未校验目标坐标是否在地图范围内。terrain.json是 5×5 网格但策略计算target(2,2)(-1,-1)(1,1)后直接赋值未调用env._is_valid_move()。解决策略函数末尾必须加校验# 在 return 前 if action[action] move: tx, ty action[target] if not (0 tx 5 and 0 ty 5): # 地图宽高写死在这里 action[action] hold action[target] None提示地图尺寸应从terrain.json动态读取但为防学生搞不定 JSON 解析文档里明确写了“此处允许硬编码 5×5”。5.3 现象python main.py报错ModuleNotFoundError: No module named yaml原因项目依赖未声明。requirements.txt里只写了numpy漏了PyYAML用于读取config/*.yaml和verification/*.yaml。解决运行pip install pyyaml编辑requirements.txt追加一行pyyaml6.0.1指定版本防兼容问题血泪经验答辩前务必用pip install -r requirements.txt在干净虚拟环境中重装一次确认所有依赖都能拉下来。5.4 现象verification.runner运行断言时hit_probability_delta始终为0.0原因断言文件中的scenario路径写错。config/scenario_high_ground.yaml实际存放在config/scenarios/high_ground.yaml路径不匹配导致加载默认空配置双方单位初始位置相同无法触发攻击。解决用ls config/确认真实路径断言文件中scenario:字段必须与磁盘路径完全一致区分大小写、斜杠方向在verification/runner.py的load_scenario()函数开头加print(fLoading scenario: {path})确认路径正确玄学排查法当断言始终不触发先删掉logs/下所有日志再运行观察是否生成新日志。没生成场景根本没加载生成了但内容为空规则引擎没执行到攻击逻辑。6. 进阶技巧用“策略热替换”做快速迭代验证毕设答辩前最后一周你最怕什么不是代码写不完而是“刚改完策略发现效果变差但不知道哪步改错了”。这个平台支持不重启、不重载、实时替换策略函数把验证周期从“改代码→跑 5 分钟推演→看日志→再改”压缩到“改一行→CtrlS→立即生效”。6.1 策略热替换机制用importlib.reload()绕过 Python 模块缓存核心在engine/strategy_loader.pyimport importlib import sys def load_strategy(strategy_path): 动态加载策略模块支持 reload module_name fagent.dynamic_{int(time.time())} # 避免重名 spec importlib.util.spec_from_file_location(module_name, strategy_path) module importlib.util.module_from_spec(spec) sys.modules[module_name] module spec.loader.exec_module(module) return module.policy # main.py 中使用 if __name__ __main__: # 初始加载 red_policy load_strategy(agent/red_infantry.py) while not done: # 每 10 回合检查文件修改时间自动 reload if env.turn % 10 0: mtime os.path.getmtime(agent/red_infantry.py) if mtime last_reload_time: print(f[HOT RELOAD] Reloading red_infantry.py at turn {env.turn}) red_policy load_strategy(agent/red_infantry.py) last_reload_time mtime # 正常执行...6.2 实战操作三步完成策略 A/B 测试假设你想对比“抢占高地”和“侧翼包抄”两种战术准备两个策略文件agent/strategy_highground.py原版agent/strategy_flank.py新写逻辑为“先移动到敌人侧翼再攻击”启动推演时指定策略路径python main.py --red-strategy agent/strategy_highground.py --log-dir logs/highground/ # 运行 20 回合后CtrlC 中断 python main.py --red-strategy agent/strategy_flank.py --log-dir logs/flank/用tools/comparison_report.py一键生成对比报告python tools/comparison_report.py --log-dir1 logs/highground/ --log-dir2 logs/flank/输出 HTML 表格含指标高地策略包抄策略提升率平均回合数32.428.7-11.4%高地控制时长占比68%42%-26%敌方单位平均存活回合15.218.924%我的习惯答辩 PPT 最后一页永远放这张对比表。不讲技术细节只说“包抄策略让蓝方多活了 24% 的回合证明其拖延能力更强但红方总战损上升 17%说明代价更高——这正是军事决策的权衡本质。”希望帮到你。本文还有配套的精品资源点击获取

相关新闻

Chinese-CLIP图文检索系统全链路实战指南

Chinese-CLIP图文检索系统全链路实战指南

简介:本资源是一套面向计算机视觉初学者与课程实践者的中文多模态图文检索系统实现方案,基于Chinese-CLIP模型构建,适用于课程设计、毕业设计、工程实训等教学场景,帮助学习者掌握跨模态表征学习与检索系统开发全流程。压缩包共59…

2026/10/12 10:25:24 阅读更多 →
NVIDIA控制面板优化指南:解决游戏卡顿与DLSS调优

NVIDIA控制面板优化指南:解决游戏卡顿与DLSS调优

1. 游戏卡顿的根源排查与NVIDIA控制面板定位1.1 先搞清楚卡顿到底卡在哪一环很多人一遇到游戏掉帧、画面撕裂、操作延迟,第一反应就是“显卡不行了”,然后急着换硬件。但我实测下来,绝大多数所谓的“卡顿”根本不是显卡性能不够,而…

2026/10/13 10:20:16 阅读更多 →
Java毕业设计音视频会议系统:JNI桥接FFmpeg实战

Java毕业设计音视频会议系统:JNI桥接FFmpeg实战

简介:这是一份面向计算机专业本科生与Java初学者的毕业设计级视频会议系统实战资源,聚焦远程协作、在线教育等典型场景,完整呈现基于Java SE平台的音视频通信系统开发全流程。资源包含313个文件,以208个UML建模文件(xm…

2026/10/11 19:13:41 阅读更多 →

最新新闻

shadcn-dashboard-landing-template部署指南:Vercel、Netlify与静态托管方案对比

shadcn-dashboard-landing-template部署指南:Vercel、Netlify与静态托管方案对比

【免费下载链接】shadcn-dashboard-landing-template Accelerate your development with a sleek, open-source admin dashboard and landing page built on Vite-React, Next.js, Tailwind CSS, and Shadcn/UI which is fully customizable and production-ready. 项目地址&am…

2026/10/14 16:06:12 阅读更多 →
推箱子自动寻路实战:IDA*搜索与死锁检测优化

推箱子自动寻路实战:IDA*搜索与死锁检测优化

推箱子自动寻路,这东西看起来是个小游戏,真做起来才知道水有多深。网上讲这个主题的文章不少,但大多是拿BFS跑个小地图就收工,真正能处理中等规模关卡、能跑完不爆内存、不卡死的完整实现其实不多。我这边之前写过一个版本&#x…

2026/10/14 16:06:12 阅读更多 →
Godot TorusMesh 环面网格完整指南:参数详解、代码创建与实战应用

Godot TorusMesh 环面网格完整指南:参数详解、代码创建与实战应用

文档教程游戏开发 【免费下载链接】godot-docs Godot Engine official documentation 项目地址: https://gitcode.com/GitHub_Trending/go/godot-docs 点击查看 免费下载 引言:为什么需要 TorusMesh TorusMesh(环面网格,即甜甜圈…

2026/10/14 16:06:12 阅读更多 →
Kong网关7.5分SQL注入:混合模式的信任假设错了

Kong网关7.5分SQL注入:混合模式的信任假设错了

2026 年 10 月 12 日,Kong Gateway 的一个 SQL 注入漏洞公开:CVE-2026-1907,CVSS v4.0 评分 7.5(High),影响 Kong Enterprise Gateway 与开源版 Kong Gateway。漏洞的位置很具体:混合模式&#…

2026/10/14 16:06:12 阅读更多 →
腾讯云Python服务生产级部署:systemd+nginx+venv实战

腾讯云Python服务生产级部署:systemd+nginx+venv实战

简介:本资源是一份面向高校计算机专业学生与Python初学者的实战部署指南,聚焦疫情期间无法返校使用本地服务器时,如何借助腾讯云短期免费资源快速运行Python3.7PyTorch CPU版代码。文档详细覆盖从新用户微信认证领15天云服务器、CentOS/Ubunt…

2026/10/14 16:06:12 阅读更多 →
社交类iOS开发:即时通讯链路与性能优化实战地图

社交类iOS开发:即时通讯链路与性能优化实战地图

提到iOS开发,很多人第一反应是"不就是用Swift画页面嘛"。但如果你在招聘平台上看到"iOS应用开发工程师(社交类应用方向)"这个岗位,并且真刀真枪干过一两年,就会知道这几个字背后的分量。我从一线i…

2026/10/14 16:05:10 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →