Skip to content

设计船坞满时强化素材与解装的智能决策 #14

Description

@yltx

背景

当前 AutoWSGR 在战斗检测到船坞已满时,会按配置执行舰种过滤后“快速全选解装”。掉落舰除了直接解装换取资源,也可以作为强化素材。需要在船坞满时根据固定价值模型,将可处理舰船划分为强化素材和解装对象。

游戏规则模型

每艘被强化舰有四类强化属性:

火力 / 鱼雷 / 装甲 / 对空
  • 不同舰种可强化属性集合不同,例如航母类不存在鱼雷强化。
  • 每个技能阶段都有四维当前值与上限。
  • 只有该舰所有可强化属性全部满时,才能提升技能等级。
  • 技能最高 3 级。
  • 每次技能升级会清空当前强化经验,进入下一阶段重新强化。
  • 强化允许溢出,但溢出没有收益。例如只缺 10 对空,提供 20 对空的素材只有 10 有效。

每艘可消耗舰船 s 有两组固定数据:

materialYield(s) = {
  firepower,
  torpedo,
  armor,
  antiAir,
}

dismantleYield(s) = {
  fuel,
  ammo,
  steel,
  aluminum,
}

第一版固定价值模型

“固定价值”指属性与资源权重由配置静态给定,不随库存、时间或历史使用动态学习;目标舰当前缺口仍需读取,否则无法避免强化溢出。

interface ValuationWeights {
  enhancement: {
    firepower: number;
    torpedo: number;
    armor: number;
    antiAir: number;
  };
  dismantle: {
    fuel: number;
    ammo: number;
    steel: number;
    aluminum: number;
  };
  skillCompletionBonus: number;
  overflowPenalty: number;
}

素材 s 用于目标舰 t 的有效强化量:

Effective(s, t, attr)
= min(MaterialYield(s, attr), RemainingNeed(t, attr))

溢出量:

Overflow(s, t, attr)
= max(0, MaterialYield(s, attr) - RemainingNeed(t, attr))

强化价值:

EnhanceValue(s, t)
= Σattr EnhancementWeight(attr) × Effective(s, t, attr)
- OverflowPenalty × Σattr EnhancementWeight(attr) × Overflow(s, t, attr)
+ SkillCompletionBonus, 若本次强化补满目标舰全部可强化属性

解装价值:

DismantleValue(s)
= Σresource DismantleWeight(resource) × DismantleYield(s, resource)

决策:

BestEnhanceValue(s) = max_t EnhanceValue(s, t)

若 BestEnhanceValue(s) > DismantleValue(s) + safetyMargin
  → 作为强化素材
否则
  → 解装

批量选择时不能逐船静态比较后一次性提交,因为前一艘素材会改变目标舰剩余缺口。第一版可使用顺序贪心:

  1. 扫描所有强化目标的当前四维缺口与技能等级。
  2. 对每个候选素材计算其当前最佳目标和边际强化价值。
  3. 选择边际优势最大的素材执行/加入当前批次。
  4. 更新目标舰虚拟缺口后重新计算剩余素材。
  5. 某目标全部属性满后停止向其继续投料;先完成技能升级,再进入下一强化阶段。
  6. 无正边际收益的素材进入解装集合。

安全约束

以下舰船绝不自动消耗:

  • 已锁定舰船。
  • 非 1 级舰船(第一版保守限制)。
  • 用户保护名单中的舰船。
  • 当前编队、远征、修理或其他任务占用的舰船。
  • 稀有度超过配置阈值的舰船。
  • OCR 无法可靠识别的舰船。

同名多实例必须按实例选择,不能仅按舰名批量操作。

当前实现现状

后端当前仅支持:

  • 船坞满检测:autowsgr/ops/normal_fight.py::_handle_dock_full
  • 自动解装:autowsgr/ops/destroy.py::destroy_ships_auto
  • 解装 UI:按舰种过滤后快速全选,无法按具体舰船实例选择
  • 强化页面:autowsgr/ui/intensify_page.py 目前只有页面识别、标签切换和返回
  • 掉落识别:常规战历史能记录掉落舰名;识别层本身也能返回舰种

当前缺失:

  • 舰船强化/解装静态收益数据库。
  • 船坞舰船实例扫描 API。
  • 强化目标四维当前值、上限和技能等级识别。
  • 强化页面选择目标舰与素材舰的自动化。
  • 技能升级自动化。
  • 按具体实例解装,而不是按舰种快速全选。

推荐实现阶段

阶段 1:静态价值分类与审计模式

  • 建立 ship_economy.json,记录素材四维收益和解装资源。
  • 仅根据固定权重输出“建议强化/建议解装”日志,不实际点击。
  • 记录无法识别或无数据舰船。

阶段 2:安全的精确解装

  • 扫描船坞实例。
  • 只解装明确判定、未锁定、1 级、非保护名单的舰船。
  • 移除当前舰种过滤后快速全选的危险路径。

阶段 3:强化执行

  • 读取强化目标四维缺口和技能等级。
  • 实现目标舰、素材舰精确选择和强化确认。
  • 先支持一个用户配置的强化目标队列。
  • 目标全满时执行技能升级,刷新状态后继续。

阶段 4:船坞满统一处理

船坞满时:

识别候选舰
→ 安全过滤
→ 强化素材分配
→ 执行强化/技能升级
→ 解装剩余低价值舰
→ 检查船坞空间
→ 恢复原战斗任务

验收场景

  • 目标只缺 10 对空时,20 对空素材只计 10 有效值,溢出被惩罚。
  • 航母类目标不计算鱼雷缺口,也不为鱼雷素材价值加分。
  • 能补满全部属性并触发技能升级的素材获得完成奖励。
  • 技能 3 级且强化已满的舰船不再作为强化目标。
  • 同一素材强化价值低于解装价值时进入解装集合。
  • 锁定、非 1 级、保护名单、识别不可靠舰船从不自动消耗。

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions