# AdaptiveAgent **Repository Path**: electricsoul/adaptive-agent ## Basic Information - **Project Name**: AdaptiveAgent - **Description**: THBI Adaptive Agent - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-02-11 - **Last Updated**: 2025-09-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Adaptive Agent Testbed ![](./docs/5.png) ---- ## 环境配置 1. 创建新的 conda 环境,并启动 ```bash conda create -n cogmap conda activate cogmap ``` 2. 配置 JAX 1. 安装 JAX ```bash pip install --upgrade "jax[cuda]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html conda install cuda -c nvidia conda activate cogmap # re-activate conda env pip install flax pip install optax ``` 2. 设置环境变量 第1种方式:通过 conda 设置虚拟环境变量 ```bash conda env config vars set XLA_FLAGS=--xla_gpu_force_compilation_parallelism=1 conda activate cogmap # re-activate conda env ``` 第2种方式:直接在命令行环境中设置(需要每次运行之前都做一次),仅限于第一种方法无效的情况下 ```bash export XLA_FLAGS=--xla_gpu_force_compilation_parallelism=1 ``` 3. 其他必要依赖库的安装 ```bash pip install numpy pip install opencv-python pip install -U tensorflow-gpu pip install scikit-learn pip install matplotlib pip install argparse ``` **若遇到运行时的版本问题,请参考本文件末尾的完整 conda 环境包列表。** 4. 重启 conda 环境 ```bash conda deactivate conda activate cogmap ``` ## 目录说明 * task/adaptive_trajectory_optimization 路径优化任务的代码 * model 模型存放目录 **在 adaptive_trajectory_optimization/vanilla 目录下,具有多个不同尺寸的 vanilla 网络模型(按照隐层神经元数量分为 32、48、56、64、128)** * logs 运行时的数据输出暂存目录,此目录内容不更新到 git * data 任务数据的存放目录,例如地图、起点终点的位置 ## 运行在线学习任务 1. 在命令行中进入项目的根目录,启动 conda 环境 ```bash cd adaptive-agent conda activate cogmap ``` 2. 路径优化任务的代码是位于 ./task/adaptive_trajectory_optimization 中,以 run_* 为开头的三个示例程序 3. 示例程序运行的命令格式如下: ```bash python python task/adaptive_trajectory_optimization/run_*.py [--arg_name=value] ``` 其中,arg_names 有以下几个选项 1. --model_pth : RNN模型路径 2. --task_pth : 地图以及任务 json 文件路径 3. --log_pth : 数据输出目录(例如视频) 4. --nn_size : 网络隐层神经元数量 5. --nn_type : 网络类型,目前有 vanilla 和 gru 两种可选 6. --visualization : 是否显示可视化界面 7. --video_output : 是否将界面显示内容录制为视频 8. --life_duration : 每一次 agent 运行的生命周期长度 **这些参数的默认值(value)都可以在 task/adaptive_trajectory_optimization/replay_config.py 中找到** ### 程序1:逐步演示 **run_repeat_task.py** 此程序为基础模式,在加载模型之后逐步运行,每一步的运动过程都会在界面上进行可视化。 此程序将会以 --life_duration 为一次的运行时长,每次运行完成之后会重新生成新的随机环境以及任务。 1. 默认模式运行 ```bash python task/adaptive_trajectory_optimization/run_repeat_task.py --task_pth=none ``` 2. 运行,并且将整个过程录制到视频(默认存储到 log_pth) ```bash python task/adaptive_trajectory_optimization/run_repeat_task.py --video_output=True --task_pth=none ``` 3. 使用指定模型运行(需要同时指定模型位置以及模型尺寸) ```bash python task/adaptive_trajectory_optimization/run_repeat_task.py --task_pth=none --model_pth=./model/adaptive_trajectory_optimization/vanilla/32/rnn_model --nn_size=32 ``` 4. 运行指定环境和任务 ```bash python task/adaptive_trajectory_optimization/run_repeat_task.py --task_pth=./data/adaptive_trajectory_optimization/task10.json ``` 5. 不进行可视化,仅录制视频(对于无法可视化的环境,例如没有桌面的远程服务器) ```bash python task/adaptive_trajectory_optimization/run_repeat_task.py --task_pth=none --visualization=False --video_output=True ``` 视频保存位置默认为 logs 文件夹。 ### 程序2:任务分析 **run_repeat_task_analyse.py** 此程序将显示每一次 agent 的完整移动路径的演变过程,不再逐步显示 agent 的运动过程。 在每个 agent 的移动步数达到某些条件后,程序会将 RNN temporal state 以瀑布图的方式显示出来: ![](./docs/1.png) 在瀑布图界面上按下任意按键,进入 neural trajectory 的预览模式: ![](./docs/2.png) 此时关闭 neural trajectory 界面,程序将保存当前的任务到 ./logs/task.json 文件中,以便后续重新回放当前任务。 ![](./docs/3.png) 在 neural trajectory 界面关闭之后,程序会**随机生成新的任务**,进入下一次循环。 1. 默认模式运行 ```bash python task/adaptive_trajectory_optimization/run_repeat_task_analyse.py ``` 2. 使用指定模型运行(使用GRU模型时,需要指定网络类型) ```bash python task/adaptive_trajectory_optimization/run_repeat_task_analyse.py --model_pth=./model/adaptive_trajectory_optimization/gru/128/rnn_model --nn_type=gru ``` ### 程序3:任务回放 此程序会读入 json 文件中的任务地形、起点终点位置,在单一固定的 task 中运行指定的网络模型。此时 agent 的行为是确定性的。 在回放过程中,程序仍然会输出瀑布图以及 neural trajectory 界面,交互方式和 程序2 一致。 1. 默认模式运行 ```bash python task/adaptive_trajectory_optimization/run_repeat_task_replay.py ``` 此时程序会读入 logs/task.json 文件 2. 使用指定 task 运行 ```bash python task/adaptive_trajectory_optimization/run_repeat_task_replay.py --task_pth=./data/adaptive_trajectory_optimization/task10.json ``` 3. 使用 --show_kf 参数,将每一次任务路径优化的过程拼接成大图显示出来 ```bash python task/adaptive_trajectory_optimization/run_repeat_task_replay.py --task_pth=./data/adaptive_trajectory_optimization/task10.json --show_kf=True ``` ![](./docs/4.png) **在程序运行的过程中,请按照命令行提示进行交互操作** --- 附:示例 conda 环境的各个包版本 ```bash Package Version ---------------------------- ---------------------- absl-py 1.3.0 ale-py 0.7.4 astunparse 1.6.3 AutoROM 0.4.2 AutoROM.accept-rom-license 0.4.2 brotlipy 0.7.0 cachetools 5.2.0 certifi 2022.9.24 cffi 1.15.1 charset-normalizer 2.1.1 chex 0.1.5 click 8.1.3 cloudpickle 2.2.0 commonmark 0.9.1 contourpy 1.0.5 cryptography 38.0.2 cycler 0.11.0 dm-tree 0.1.7 etils 0.8.0 flatbuffers 22.12.6 flax 0.6.1 fonttools 4.37.4 gast 0.4.0 google-auth 2.14.1 google-auth-oauthlib 0.4.6 google-pasta 0.2.0 grpcio 1.50.0 gym 0.21.0 h5py 3.7.0 idna 3.4 importlib-metadata 4.13.0 importlib-resources 5.10.0 jax 0.3.23 jaxlib 0.3.22+cuda11.cudnn805 joblib 1.2.0 keras 2.11.0 kiwisolver 1.4.4 libclang 14.0.6 Markdown 3.4.1 MarkupSafe 2.1.1 matplotlib 3.6.1 mkl-fft 1.3.1 mkl-random 1.2.2 mkl-service 2.4.0 msgpack 1.0.4 numpy 1.23.3 oauthlib 3.2.2 opencv-python 4.6.0.66 opt-einsum 3.3.0 optax 0.1.3 packaging 21.3 pandas 1.5.2 Pillow 9.2.0 pip 22.3 protobuf 3.19.6 psutil 5.9.4 pyasn1 0.4.8 pyasn1-modules 0.2.8 pycparser 2.21 Pygments 2.13.0 pyOpenSSL 22.1.0 pyparsing 3.0.9 PySocks 1.7.1 python-dateutil 2.8.2 pytz 2022.6 PyYAML 6.0 requests 2.28.1 requests-oauthlib 1.3.1 rich 12.6.0 rsa 4.9 scikit-learn 1.2.1 scipy 1.9.3 setuptools 65.5.0 six 1.16.0 stable-baselines3 1.6.2 tensorboard 2.11.0 tensorboard-data-server 0.6.1 tensorboard-plugin-wit 1.8.1 tensorflow-estimator 2.11.0 tensorflow-gpu 2.11.0 tensorflow-io-gcs-filesystem 0.28.0 termcolor 2.1.1 threadpoolctl 3.1.0 toolz 0.12.0 torch 1.12.1 torchaudio 0.12.1 torchvision 0.13.1 tqdm 4.64.1 typing_extensions 4.4.0 urllib3 1.26.11 Werkzeug 2.2.2 wheel 0.37.1 wrapt 1.14.1 zipp 3.10.0 ``` ---- ## 更新日志 * 2.14 * analyse 和 replay 程序中加入 --view_3d 选项,如果不需要显示PCA界面可以将此参数设置成 False,程序会将 rnn_state 以 json 格式保存在 logs 文件夹中,以便后续分析 ```bash python task/adaptive_trajectory_optimization/run_repeat_task_replay.py --task_pth=./data/adaptive_trajectory_optimization/task4.json --view_3d=False ``` * 新增 reload_rnn_state.py 示例程序,作为导入 rnn_states.json 的操作示例 * 2.16 * 在 run_repeat_task.py 中增加了网络完整状态预览界面 ![](./docs/6.png) * 在 run_repeat_task_replay.py 程序中,将 2.14 更新功能 “保存 rnn_state” 扩展成为保存所有状态,现在保存的log文件中包含 * states = data["data"] vanilla神经元输出记录 * landscape = data["landscape"] 当前地形 * start = data["state"] 当前任务的起点 * goal = data["goal"] 当前任务终点 * trajectory = data["trajectory"] 生命周期内的运动轨迹 * 将原先的 reload_rnn_state.py 程序改为 reload_full_report.py ,示例完整记录的导入 * 2.26 * 新增 task_editor.py 程序 * 作用:针对任意特定的 task 文件进行修改,包括修改障碍物、起点终点位置 * 使用方法: * 打开程序(必须带 --task_pth 命令行参数) ```bash python task/adaptive_trajectory_optimization/task_editor.py --task_pth=./data/adaptive_trajectory_optimization/task9.json ``` * 鼠标移到任意位置,滑动鼠标滚轮,以切换 freespace/障碍物 状态 ![](./docs/7.png) * 此时程序会自动检测“所有可行区域是否连通”,如果发现出现独立的小连通域则会提示地图不合规 ![](./docs/8.png) 此时可以按键盘 r 重置原始状态,或者继续编辑至合规状态即可。 * 单击鼠标左键,设置起始点位置 * 单击鼠标右键,设置终点位置 * 按键盘 s 保存当前 task (默认保存路径为 ./logs/test.json) * 按键盘 r 重置原始状态 * 按键盘 q 退出程序 * 2.27 **在 run_repeat_task.py 程序中新增两项功能** 1. 手动控制模式 1. 按下键盘 t 键,在“正常模式”和“手动模式”之间切换,例如正常运行时,按下 t 进入手动模式,反之亦然 2. 进入手动模式后,可以通过 W/S/A/D 控制 agent的前后左右运动,此时 agent 运动不再受RNN控制而是听从用户操作 3. 此时的 RNN 仍然正常逐步运行 2. 运行时地图编辑模式 1. 提供了在运行的过程中暂停并且任意修改地图的功能 2. 在运行时,按下键盘 e 键,立刻进入编辑模式,鼠标操作沿用了 task_editor 程序的操作,区别是这里不能设置agent起点终点位置(agent位置和goal位置仍然由运行上下文决定) 2. 在编辑界面,如果想要重置编辑之前的状态可以按 r 键 2. 完成编辑后,按下键盘 q 键退出编辑界面,回到运行界面 3. 运行效果 ![](./docs/1.gif) * 4.1 新增两个程序: 1. run_multitask.py 1. 这个程序是使用 GPU 进行标准的 JAX 多环境运行:在指定的环境中程序会产生 m*(m-1) 个“任务对”,其中 m 为指定环境的空白区域像素个数。程序会默认将所有环境使用指定模型运行1000步,然后保存在这过程中产生的所有数据,包括所有环境中 agent 的轨迹、神经网络 hidden_state 轨迹以及环境、任务数据 2. 在一个安装好GPU版本 JAX 的电脑上运行: ```bash python task/adaptive_trajectory_optimization/run_multitask.py --task_pth=./data/adaptive_trajectory_optimization/aba1/task_41_a.json ``` 3. 运行后会在logs文件夹下生成以下三个文件,其中XXXXXXX为程序自动生成的时间戳 1. rnn_state_waterfallXXXXXXX.npy 所有神经网络历史数据的集合 2. lifetime_trajectoryXXXXXXX.npy 所有环境中agent的空间轨迹的集合 3. parallel_taskXXXXXXX.npy 环境地形、以及所有task的起点和终点 2. reload_multitask_data.py 1. 这个程序是读取上面三个文件的示例,其中演示了如何载入已保存的数据文件、得到一个特定 task 的终点坐标、得到一个特定 task 的物理轨迹、以及在这个轨迹中查询所有到达终点的时间 2. **这个程序只需要在 CPU 版本的 JAX 环境中运行即可** ```bash python task/adaptive_trajectory_optimization/reload_multitask_data.py ``` 3. 其中需要注意的是,在程序的开始处,需要指定正确的数据集时间戳,例如: ```python # the timestamp of the dataset dataset_id = 1680366946 ``` * 4.2 新增事件的因果关系图 * https://o7s94ch08h.feishu.cn/docx/A9Cid8cZdoESKdxNue9cnJE3nbf