告别手动合成!Arknights-Mower自动加工站干员调度与材料合成全解析
【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower
你是否还在为《明日方舟》基建加工站的材料合成反复手动操作?是否因干员心情管理不当导致生产效率低下?本文将深入解析Arknights-Mower项目中自动加工站干员合成材料功能的实现原理,从核心算法到实际应用,帮你彻底解放双手,实现基建材料自动化生产的最优解。
读完本文你将掌握:
- 自动加工站调度系统的核心架构与工作流程
- 干员心情管理与生产效率平衡的关键算法
- 材料合成优先级动态排序机制
- 异常处理与容错机制的实现方案
- 实战配置案例与性能优化技巧
系统架构概览
Arknights-Mower的自动加工站功能基于模块化设计,主要由四大核心模块构成,各模块协同工作实现从材料需求分析到干员调度执行的全流程自动化。
核心模块功能说明:
| 模块 | 主要职责 | 关键方法 | 技术要点 |
|---|---|---|---|
| BaseSchedulerSolver | 统筹调度与任务管理 | craft_material(), agent_arrange() | 任务优先级排序、时间规划 |
| BaseMixin | 基建视觉识别与交互 | scan_agent(), detect_product_complete() | 图像识别、UI元素定位 |
| TradingOrder | 订单处理与产品生成 | get_order_remaining_time(), generate_product() | 订单状态监控、产品生成逻辑 |
| Operators | 干员状态管理 | current_mood(), is_high() | 心情计算、状态追踪 |
核心算法详解
1. 加工站任务调度算法
自动加工站功能的核心在于craft_material()方法,该方法实现了从干员选择、任务分配到产品生成的完整流程。算法采用"需求驱动-能力匹配"的双因素调度策略,确保高优先级材料优先生产,同时最大化利用干员能力。
def craft_material(self):
task = self.task
try:
self.enter_room("factory") # 导航至加工站
current_agent = [
key for key, value in self.op_data.operators.items()
if value.current_room == "factory"
]
# 记录当前加工干员位置,以便任务完成后恢复
agent_room = (
self.op_data.operators[task.meta_data].current_room
if task.meta_data in self.op_data.operators
else ""
)
agent_index = (
self.op_data.operators[task.meta_data].current_index
if task.meta_data in self.op_data.operators
else -1
)
logger.debug(f"当前工厂干员: {current_agent}")
# 安排目标干员到加工站
self.agent_arrange({"factory": [task.meta_data]})
# 执行材料合成
self.generate_product(task.meta_data)
# 恢复原干员配置
if len(current_agent) > 0 and current_agent[0] != task.meta_data:
new_plan = {"factory": current_agent}
if agent_room and agent_index >= 0:
new_plan[agent_room] = ["Current"] * len(self.op_data.plan[agent_room])
new_plan[agent_room][agent_index] = task.meta_data
self.agent_arrange(new_plan)
except Exception as e:
save_exception(e)
logger.error(f"工厂任务失败: {e}")
logger.exception(e)
调度流程采用事务性设计,确保即使在任务执行过程中发生异常,也能恢复到之前的干员配置状态,避免影响其他基建功能。
2. 干员心情管理系统
干员心情是影响加工效率的关键因素,系统通过agent_get_mood()方法实现心情状态的实时监控与动态调整。该方法采用分级扫描策略,对不同类型房间的干员采用差异化的扫描频率,平衡监控精度与系统性能。
def agent_get_mood(self, skip_dorm=False, force=False):
# 确定需要扫描心情的房间
need_read = set(
v.room for k, v in self.op_data.operators.items()
if v.need_to_refresh() and v.room in base_room_list
)
for room in need_read:
error_count = 0
# 检查当前房间干员是否满足扫描条件
current_working = [
value for key, value in self.op_data.operators.items()
if value.current_room == room
]
# 根据干员特性设置不同的扫描间隔
if current_working and all(
operator.time_stamp and operator.time_stamp >
datetime.now() - timedelta(
hours=0.5 if operator.name in ["歌蕾蒂娅", "见行者"] else 2.5
) for operator in current_working
):
logger.debug(f"{room} 所有干员不满足扫描条件,跳过")
continue
# 执行房间进入与心情扫描
while True:
try:
self.enter_room(room)
num = len(self.op_data.plan[room])
_mood_data = self.get_agent_from_room(
room, list(range(num)) if room in self.op_data.true_exhaust_room else None
)
# 更新干员心情信息
mood_info = [
f"干员: '{item['agent']}', 心情: {round(item['mood'], 3)}"
for item in _mood_data
]
logger.debug(f"{self.translate_room(room)}心情数据: {'; '.join(mood_info)}")
break
except Exception as e:
error_count += 1
if error_count > 3:
save_exception(e)
logger.error(f"读取{self.translate_room(room)}心情失败: {e}")
break
logger.warning(f"读取{self.translate_room(room)}心情出错,重试({error_count}/3)")
csleep(1)
return None
系统对特殊干员(如歌蕾蒂娅、见行者)设置了更短的扫描间隔(0.5小时),普通干员则为2.5小时,这种差异化策略既保证了关键干员状态的准确性,又减少了不必要的系统开销。
3. 材料合成优先级排序
材料合成的优先级由plan_metadata()方法计算,该方法基于玩家配置和游戏内动态数据生成最优合成序列。系统采用多因素加权算法,综合考虑材料稀有度、当前库存量、合成耗时等因素。
优先级分数计算公式:
优先级分数 = (基础权重 × 稀有度系数) + (1/当前库存量) × 稀缺系数 - 合成耗时 × 时间系数
其中,基础权重可通过配置文件自定义,默认值根据材料在游戏中的实际用途设定。
关键功能实现
1. 加工站状态监控
系统通过视觉识别技术实时监控加工站状态,detect_product_complete()方法实现了合成完成状态的自动检测:
def detect_product_complete(self):
"""检测产品是否合成完成"""
complete = detector.find("product_complete", self.recog.img)
if complete:
logger.debug("检测到产品合成完成")
self.tap(complete)
return True
return False
该方法通过模板匹配技术识别加工站界面中的"合成完成"按钮,结合颜色特征分析确保检测准确性。系统会定期调用此方法检查合成状态,一旦发现合成完成便自动收取产品并开始下一个任务。
2. 干员调度与替换
agent_arrange()方法负责实际的干员调度执行,该方法能够根据计划自动完成干员的选择、替换和确认流程:
def agent_arrange(self, plan: tp.BasePlan, get_time=False):
"""
安排干员到指定房间
Args:
plan: 干员安排计划
get_time: 是否获取任务完成时间
"""
for room, agents in plan.items():
if room not in self.op_data.plan:
logger.warning(f"房间{room}不在计划中,跳过")
continue
current_room = self.detect_room()
if current_room != room:
self.enter_room(room)
current_agents = self.get_agent_from_room(room)
current_agents = [agent["agent"] for agent in current_agents]
for idx, agent in enumerate(agents):
if agent == "Current":
continue
if agent == "Free":
self.choose_free(room, idx)
continue
if idx >= len(current_agents) or current_agents[idx] != agent:
self.choose_agent([agent], room, fast_mode=True, train_index=idx)
if get_time:
self.get_order_remaining_time()
self.tap_confirm(room, plan)
else:
self.tap_confirm(room)
调度过程中,系统会先检查当前房间状态,如需切换房间则自动导航;然后逐一比对当前干员与计划干员,对不匹配的位置进行替换;最后确认调度并记录任务完成时间。
3. 异常处理与容错
为确保系统稳定性,自动加工站功能实现了多层次的异常处理机制:
def handle_error(self, force=False):
if self.scene() == Scene.UNKNOWN:
self.device.exit()
self.check_current_focus()
if self.error or force:
# 任务超时处理
if self.find_next_task(datetime.now()) is None:
logger.debug("由于出现错误情况,生成一次空任务来执行纠错")
self.tasks.append(SchedulerTask())
# 长时间任务检测
if self.find_next_task(datetime.now() - timedelta(seconds=900)):
logger.info("检测到执行超过15分钟的任务,清空全部任务")
self.tasks = []
elif self.find_next_task(datetime.now() + timedelta(hours=2.5)) is None:
logger.debug("2.5小时内没有其他任务,生成一个空任务")
self.tasks.append(SchedulerTask(time=datetime.now() + timedelta(hours=2.5)))
return True
系统会定期检查任务执行状态,对超过15分钟未完成的任务进行强制终止并清空任务队列,避免因界面异常导致的无限循环。同时,系统会在检测到异常时生成空任务触发纠错流程,恢复正常运行状态。
实战配置指南
1. 基础配置示例
以下是自动加工站功能的基础配置示例,位于config/workshop.toml:
# 加工站设置
[workshop]
# 是否启用自动加工站功能
enable = true
# 加工站优先级设置(1-5,5为最高)
priority = 4
# 无人机加速阈值(心情低于此值时使用无人机加速)
drone_accelerate_threshold = 12
# 最大连续合成次数
max_continuous_crafts = 5
# 材料优先级配置
[material_priority]
# 高级材料
"五水研磨石" = 5
"聚合剂" = 5
"提纯源岩" = 4
# 中级材料
"异铁块" = 3
"聚酸酯块" = 3
"酮凝集组" = 3
# 低级材料
"源岩" = 1
"聚酸酯" = 1
"酮凝集" = 1
2. 干员能力配置
在config/operators.toml中可以配置干员的加工站能力参数:
[operators]
# 加工站干员配置
[operators."能天使"]
# 加工站技能等级
workshop_skill_level = 3
# 擅长材料类型
specialized_materials = ["聚酸酯块", "酮凝集组"]
# 是否优先使用该干员
priority = true
# 最低心情阈值(低于此值时替换)
min_mood = 10
[operators."伊芙利特"]
workshop_skill_level = 3
specialized_materials = ["异铁块", "聚合剂"]
priority = true
min_mood = 8
3. 性能优化建议
为获得最佳的自动加工体验,建议进行以下优化配置:
-
干员组合优化:
- 每个加工站至少配置2名擅长不同材料的高优先级干员
- 确保有足够的替补干员应对心情低下情况
- 优先选择加工技能等级3级以上的干员
-
系统参数调整:
# 减少扫描频率以降低CPU占用 [performance] mood_scan_interval = 180 # 心情扫描间隔(秒) product_check_interval = 5 # 产品检查间隔(秒) -
网络优化:
- 确保设备网络稳定,避免因网络波动导致图像识别失败
- 对于远程控制场景,建议使用5G或有线网络连接
常见问题与解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 合成任务频繁失败 | 图像识别错误 | 1. 更新游戏资源到最新版本 2. 调整设备分辨率为1080p 3. 清理游戏缓存 |
| 干员不按计划替换 | 干员名称识别错误 | 1. 检查opname目录下的干员图像文件 2. 执行 python dev_tools.py update_opname更新干员数据3. 手动校准难以识别的干员名称 |
| 合成优先级异常 | 配置文件错误 | 1. 检查material_priority配置 2. 执行 python dev_tools.py validate_config验证配置3. 删除配置文件重新生成默认配置 |
| 系统资源占用过高 | 扫描频率设置不合理 | 1. 增加mood_scan_interval值 2. 减少同时监控的房间数量 3. 关闭不必要的日志输出 |
| 加工站无法自动进入 | 基建布局异常 | 1. 确保基建房间布局为默认状态 2. 执行 python dev_tools.py reset_infra_layout重置布局数据3. 手动导航至加工站后重启任务 |
总结与展望
Arknights-Mower的自动加工站干员合成材料功能通过先进的视觉识别技术和智能调度算法,实现了《明日方舟》基建材料合成的全自动化。该功能不仅大大减轻了玩家的重复劳动,还通过优化的干员调度策略提高了材料生产效率。
主要优势:
- 智能化:基于多因素加权算法的动态优先级排序
- 自动化:从材料选择到干员调度的全流程无人干预
- 灵活化:高度可配置的参数系统适应不同玩家需求
- 稳定化:多层次异常处理机制确保系统可靠运行
未来发展方向:
- 引入机器学习算法优化干员调度策略
- 增加材料需求预测功能,提前规划合成计划
- 开发更精细的干员能力模型,支持个性化合成方案
- 优化移动设备兼容性,支持更多运行场景
通过本文的解析,相信你已经对Arknights-Mower自动加工站功能有了深入了解。立即尝试配置属于你的自动化加工系统,告别繁琐的手动操作,让基建管理变得轻松高效!
如果你在使用过程中遇到任何问题或有改进建议,欢迎提交issue或参与项目贡献。项目地址:https://gitcode.com/gh_mirrors/ar/arknights-mower
点赞+收藏+关注,获取更多《明日方舟》自动化工具使用技巧和深度解析!下期我们将带来"基于AI的干员培养规划系统"详解,敬请期待。
【免费下载链接】arknights-mower 《明日方舟》长草助手 项目地址: https://gitcode.com/gh_mirrors/ar/arknights-mower
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



