一根老麻花


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

  • 站点地图

  • 搜索

JPS 寻路算法

发表于 2024-08-28 | 分类于 有意思的算法
字数统计: 1.6k | 阅读时长 ≈ 5
JPS(Jump Point Search)算法是一种针对 A* 算法的优化,专为网格路径搜索设计。它通过识别路径改变方向的关键点,即跳点,来减少需要评估的节点数量。JPS 算法引入了"强迫邻居"的概念,确保搜索过程不会错过任何可能的路径选择。算法流程包括初始化 OpenList,搜索跳点,并将找到的跳点加入 OpenList,直到目标点被找到或 OpenList 为空。JPS 算法的优势在于提高搜索效率,降低内存使用,尤其适用于大规模地图的路径搜索,因为它能快速跳过可行走区域,而无需逐节点评估。
阅读全文 »

A* 算法

发表于 2024-08-27 | 分类于 有意思的算法
字数统计: 1.3k | 阅读时长 ≈ 5
A* 算法是一种高效的图搜索算法,专门用于寻找从起点到终点的最短路径。它通过结合实际代价和启发式估计代价来评估路径的总成本,其中启发式函数 h(n) 用于估计从当前节点到目标节点的代价,而 g(n) 表示从起点到当前节点的实际代价。A* 算法维护两个列表:Open 表用于存储待探索的节点,而 Close 表记录已探索的节点。算法流程包括从 Open 表中选择 f(n) 值最小的节点进行扩展,然后更新其邻居节点,并重复此过程直至找到目标或 Open 表为空。A* 算法的有效性依赖于启发式函数的设计,以及确保分支因子有限、边的代价为正且估计代价不大于真实代价。在 Golang 中,A* 算法可以通过定义点、节点和优先队列来实现,并使用启发式函数来评估节点之间的距离。
阅读全文 »

ORCA 算法整理

发表于 2024-08-25 | 分类于 有意思的算法
字数统计: 1.5k | 阅读时长 ≈ 5
ORCA(Optimal Reciprocal Collision Avoidance)算法是一种高效的多智能体避障策略,它通过将避障问题转化为线性规划问题来解决。在二维平面上,每个机器人独立选择新速度以避免碰撞,同时尽可能接近其首选速度。ORCA 算法考虑了机器人的外部状态如位置和速度,以及内部状态如最大速度和首选速度。它利用速度向量场来识别潜在的碰撞风险区域,并计算出每个机器人可以安全移动的速度空间。与 RVO 算法相比,ORCA 算法在计算效率和实际应用的可行性上具有明显优势,适用于机器人群体在复杂环境中的协调避障。
阅读全文 »

Mobile-Agent Demo 体验

发表于 2024-08-22 | 分类于 Mobile-Agent
字数统计: 742 | 阅读时长 ≈ 2

前期准备

  • 申请大模型 API: 链接
  • 下载 Android Studio:下载地址、安装教程

新建一个虚拟手机

新建一个项目

创建虚拟手机

启动虚拟手机

将 Calendar 拖到桌面

安装 Mobile-Agent 框架

1
2
3
4
# 处理大文件
git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/MobileAgent_V2_Demo_qwenVL.git
cd MobileAgent_V2_Demo_qwenVL

创建环境

1
2
conda create -n mobileagent python=3.9.19
conda activate mobileagent

安装 Mobile-Agent 框架所需依赖

1
pip install -r win_requirements.txt

运行 Mobile-Agent

修改 run.py

运行 Mobile-Agent Demo

在终端处执行 python run.py

代码分析

初始信息获取

run.py 文件

在 run.py 文件中 若程序为首轮执行,会先调用 get_perception_infos 函数,获取初始屏幕信息

get_perception_infos 函数

get_perception_infos 函数主要从截图中提取文本、图标等视觉信息

先通过 get_screenshot(adb_path) 获取 ADB 设备截图

文本提取: - 调用 ocr 函数识别截图中的文本区域,获取对应的文字信息和区域坐标 - 调用 merge_text_blocks 函数进行文本区域的合并:防止同一行的文字被识别为不同的块 - 计算文本块中心点坐标,并在图中绘制文本块的中心 - 将文本块信息存储在感知信息列表 perception_infos 中

图标提取: - 图标检测:coordinates = det(screenshot_file, "icon", groundingdino_model) - 将图标信息也添加到感知信息列表 perception_infos 中 - 根据图标的高度和面积判断是否需要添加描述。并修改感知信息列表

再次调整感知信息列表中的中心点坐标

返回感知信息列表、截图的宽度和高度

决策

prompt 的设计

prompt 的整体拼接过程在 get_action_promt 中

调用模型进行决策

1
2
3
4
5
6
# 初始化模型(You are a ...)  
chat_action = init_action_chat()
# 将chat_action prompt_action 截屏文件整合成完整的prompt
chat_action = add_response("user", prompt_action, chat_action, screenshot_file)
# 调用 LLM 进行决策
output_action = call_with_local_file(chat=chat_action, api_key=qwen_api, model='qwen-vl-plus')

反思

记录执行动作前后的信息

LLM 判断动作的执行效果

让 LLM 对该动作的执行效果进行评估:

  • A:操作动作的结果符合我对操作思路的预期操作想法
  • B:操作动作导致页面错误,我需要返回上一页
  • C:操作动作未产生任何变化

当出现 B 或 C 时,认为操作失败。而对于情况 B,可以使用 adb 来撤销上一条指令

计划

对于情况 A(当前任务执行成功),将成功的经历放入 thought_history、summary_history 以及action_history 中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if "A" in reflect:
thought_history.append(thought)
summary_history.append(summary)
action_history.append(action)

# 让 LLM 继续规划
prompt_planning = get_process_prompt(
instruction,
thought_history,
summary_history,
action_history,
completed_requirements, # 已经完成的操作,初始为""
add_info,
)

接下来,需要 LLM 判断当前任务的完成情况,最后将已完成的内容存在 completed_requirements 中

问题解决

虚拟手机无法访问 Google

- Clash for Windows 打开该按钮,此时虚拟手机也可使用宿主机的代理

4 日志
2 分类
9 标签
GitHub E-Mail
© 2024 一根老麻花 | Site words total count: 5.1k
由 Hexo 强力驱动
|
主题 — NexT.Pisces v5.1.4
0%