XR-stb / DQN_WUKONG

基于DQN的黑神话悟空强化AI
54 stars 17 forks source link

做了些优化 #5

Closed flufy3d closed 2 months ago

flufy3d commented 2 months ago

内容如下


  1. 添加了 conda 环境配置目录
  2. 按键延迟 不在纳入主循环 提高了处理速度
  3. 增加了重击 动作
  4. 增加了 寅虎的 重启逻辑
  5. 桌面画面捕捉替换成了更高效率的 dxcam

但是我跑了一天 似乎发挥很不稳定 赢了一次 我看见过

但是感觉很随机

大佬 帮我看看

我桌面分辨率是1920x1080

游戏窗口在右上角 像这样

image

这是我的模型和日志文件

下载

XR-stb commented 2 months ago

跑了一下午看了下效果:

  1. 重击动作带来的收益太高了(boss扣血 * 连续攻击权重),AI便很少会去使用轻击,导致体力值有时候经常不够,无法闪开boss的攻击. 这里得增加掉血惩罚估计才能平衡一下. 之所以有时候能打过是因为重击的霸体和boss进行了换血,恰好好几次都比较完美,所以能赢。而我们的目标:是让AI能在保证自身血量健康的情况下,尽可能去磨boss的血。

  2. 寅虎重启逻辑似乎有点小问题,加载也有点慢(没有跳过其中一个动画)

    def yinhu_restart():
    log("已死亡,自动寻路训练开始")
    
    log('长按e 跳过动画!') 
    actions.press_E(3)
    
    # 等复活到土地庙先
    wait = 8
    for i in range(wait, 0, -1):
        keys = key_check()
        if 'B' in keys:
            return
        log('%d秒后复活' % i)
        actions.precise_sleep(1)
    
    actions.go_forward(2)
    actions.precise_sleep(3) # 必须等一会儿,不然按键会没响应
    
    # 交互
    actions.press_E(0.5)
    actions.precise_sleep(6)
    
    # 向下翻到挑战
    actions.press_down()
    actions.precise_sleep(1)
    actions.press_down()
    actions.precise_sleep(1)
    actions.press_E(0.5)
    actions.precise_sleep(2)
    
    log('长按e 跳过动画!') 
    actions.press_E(3)
    actions.precise_sleep(8)
    
    log('ready!')
    actions.run_with_direct(2, 'W')
    actions.pause()
  3. dxcam 效率确实能提升一些 image

flufy3d commented 2 months ago

寅虎 是可以重复挑战的 我们就主攻 寅虎吧 大佬 你怎么看 2 优化前我看到有些帧 耗时 尽然高达 0.6s 优化后现在 基本都是 0.1s 多一点点了

flufy3d commented 2 months ago

体力值的问题 我这里倒是没有 因为 我二周目了 体力基本都是90%+

XR-stb commented 2 months ago

寅虎 是可以重复挑战的 我们就主攻 寅虎吧 大佬 你怎么看 2 优化前我看到有些帧 耗时 尽然高达 0.6s 优化后现在 基本都是 0.1s 多一点点了

可以打寅虎,之前我觉得难度有点高,就选择了虎先锋其他的比较靠前的boss(得重新开一个周目用修改打到那里,还是挺费时间的),现在看来寅虎似乎难度也还好

  1. 之前有些帧需要0.6s是因为按键延时导致的吗,我一直以为是加了矩形区域的血条血量识别这里导致的,这里的优化还可以,就是有些地方的按键延迟需要重新计算了,这里会导致行为不在预期,不过目前没发现明显超出预期的地方
flufy3d commented 2 months ago

寅虎 是可以重复挑战的 我们就主攻 寅虎吧 大佬 你怎么看 2 优化前我看到有些帧 耗时 尽然高达 0.6s 优化后现在 基本都是 0.1s 多一点点了

可以打寅虎,之前我觉得难度有点高,就选择了虎先锋其他的比较靠前的boss(得重新开一个周目用修改打到那里,还是挺费时间的),现在看来寅虎似乎难度也还好 2. 之前有些帧需要0.6s是因为按键延时导致的吗,我一直以为是加了矩形区域的血条血量识别这里导致的,这里的优化还可以,就是有些地方的按键延迟需要重新计算了,这里会导致行为不在预期,不过目前没发现明显超出预期的地方

按键延迟 我保留了阻塞函数 你可以想以前那样调用 在restart逻辑里

flufy3d commented 2 months ago

跑了一下午看了下效果:

  1. 重击动作带来的收益太高了(boss扣血 * 连续攻击权重),AI便很少会去使用轻击,导致体力值有时候经常不够,无法闪开boss的攻击. 这里得增加掉血惩罚估计才能平衡一下. 之所以有时候能打过是因为重击的霸体和boss进行了换血,恰好好几次都比较完美,所以能赢。而我们的目标:是让AI能在保证自身血量健康的情况下,尽可能去磨boss的血。
  2. 寅虎重启逻辑似乎有点小问题,加载也有点慢(没有跳过其中一个动画)
def yinhu_restart():
    log("已死亡,自动寻路训练开始")

    log('长按e 跳过动画!') 
    actions.press_E(3)

    # 等复活到土地庙先
    wait = 8
    for i in range(wait, 0, -1):
        keys = key_check()
        if 'B' in keys:
            return
        log('%d秒后复活' % i)
        actions.precise_sleep(1)

    actions.go_forward(2)
    actions.precise_sleep(3) # 必须等一会儿,不然按键会没响应

    # 交互
    actions.press_E(0.5)
    actions.precise_sleep(6)

    # 向下翻到挑战
    actions.press_down()
    actions.precise_sleep(1)
    actions.press_down()
    actions.precise_sleep(1)
    actions.press_E(0.5)
    actions.precise_sleep(2)

    log('长按e 跳过动画!') 
    actions.press_E(3)
    actions.precise_sleep(8)

    log('ready!')
    actions.run_with_direct(2, 'W')
    actions.pause()
  1. dxcam 效率确实能提升一些 image

因为 你如果鼠标是停在挑战那按钮的话 再次向下翻 就不需要了 直接确认就可以了 所以我注释掉了