MADDPG-学习笔记(1)

文献链接https://arxiv.org/abs/1706.02275

"Multi-Agent Actor-Critic for Mixed Cooperative-Competitive Environments"(作者:Lowe, Ryan等人,2017年)

环境搭建https://zhuanlan.zhihu.com/p/41954025

MADDPG代码讲解博客链接https://blog.csdn.net/qq_41871826/article/details/110678626?spm=1001.2014.3001.5506

多智能体粒子环境(multiagent-particle-envs)链接
https://github.com/openai/multiagent-particle-envs

MADDPG代码链接https://github.com/openai/maddpg

注意:学习者多看相关博客文章的评论等,会有一些错误的解决方式。

注意:本文是按照https://zhuanlan.zhihu.com/p/41954025这篇文章搭建的环境,执行的是simple这个环境

python train.py --scenario simple

使用的环境:ubuntu18.04、python3.6.13、numpy1.19.5、gym0.10.5、tensorflow1.8.0

目录

1.报错

1.1 TypeError: must be str, not NoneType

1.1.1 第一种解决方式-添加条件

1.1.2 第二种解决方式-打印哪个为空

1.1.3 第三种解决方式- default=" "

1.2 Non-UTF-8 code starting with '\xcc' in file train.py

1.3 FileNotFoundError: [Errno 2] No such file or directory

1.4 InvalidArgumentError (see above for traceback)

1.5 NotFoundError (see above for traceback)

1.6 [ 4844.367517] Out of memory:

1.7 set the environment variable `SUPPRESS_MA_PROMPT=1`

2.问题

2.1 Linux中隐藏文件是如何显示的?

2.2 使用ls -a显示 . .. train.py是什么意思?

2.3 c#中\t

2.4 display和render区别和联系


1.报错

1.1 TypeError: must be str, not NoneType

正常训练的显示:

 train.py文件链接:https://github.com/openai/maddpg/blob/master/experiments/train.py

Traceback (most recent call last): File "train.py", line 193, in <module> train(arglist) File "train.py", line 182, in train rew_file_name = arglist.plots_dir + arglist.exp_name + '_rewards.pkl' TypeError: must be str, not NoneType

注意:这个错误是执行到1499975步发生的,即将结束的阶段(episodes总共60000个):

steps: 1499975, episodes: 60000, mean episode reward: -6.559353017320698, time: 10.777

其实错误发生在在往learning_curves中写入结果时报错:

parser.add_argument("--plots-dir", type=str, default="./learning_curves/", help="directory where plot data is saved")

报错对应的代码: 

           if len(episode_rewards) > arglist.num_episodes:
                rew_file_name = arglist.plots_dir + arglist.exp_name + '_rewards.pkl'
                with open(rew_file_name, 'wb') as fp:
                    pickle.dump(final_ep_rewards, fp)
                agrew_file_name = arglist.plots_dir + arglist.exp_name + '_agrewards.pkl'
                with open(agrew_file_name, 'wb') as fp:
                    pickle.dump(final_ep_ag_rewards, fp)
                print('...Finished total of {} episodes.'.format(len(episode_rewards)))
                break 

根据错误信息,问题出现在 "train.py" 文件的第 193 行,具体原因是在第 182 行中 arglist.plots_dir + arglist.exp_name + '_rewards.pkl' 的部分。错误信息表明出现了类型错误,需要的是字符串类型,而实际上得到的是 NoneType 类型。

这个错误通常表示 arglist.plots_dirarglist.exp_name 中的一个或多个值为 None。导致这种情况可能有以下几种原因:

①检查是否正确设置了 arglist.plots_dirarglist.exp_name 的值。确保它们被正确赋值为字符串类型,并且没有被设置为 None

②如果这些值是从命令行参数或配置文件中获取的,请检查输入参数或配置文件中对应的键是否正确,并确保为它们提供了有效的值。

③如果这些值是在代码中动态生成的,请确保生成路径的过程没有出现错误,并且生成的结果是预期的字符串类型。

1.1.1 第一种解决方式-添加条件

为了解决这个问题,可以添加一些检查来确保文件名的生成不会引用空值或 None 值。下面是一个示例的修改建议:

if len(episode_rewards) > arglist.num_episodes:
    rew_file_name = arglist.plots_dir + arglist.exp_name + '_rewards.pkl'
    if rew_file_name is not None:  # 添加检查,确保文件名不为 None
        with open(rew_file_name, 'wb') as fp:
            pickle.dump(final_ep_rewards, fp)
    agrew_file_name = arglist.plots_dir + arglist.exp_name + '_agrewards.pkl'
    if agrew_file_name is not None:  # 添加检查,确保文件名不为 None
        with open(agrew_file_name, 'wb') as fp:
            pickle.dump(final_ep_ag_rewards, fp)
    print('...Finished total of {} episodes.'.format(len(episode_rewards)))
    break

在上述修改中,添加了两个条件检查来确保 rew_file_nameagrew_file_name 不为 None。这样可以避免出现文件名为 None 导致的错误。

注意:我照此种方法改代码出现了同样的错误

1.1.2 第二种解决方式-打印哪个为空

可以在代码中打印相关变量的值,以便进一步调试和确定问题所在。

rew_file_nameagrew_file_name 的生成代码之前,添加以下打印语句:

print("arglist.plots_dir:", arglist.plots_dir)
print("arglist.exp_name:", arglist.exp_name)

这将显示 arglist.plots_dirarglist.exp_name 的值。检查这些值是否为空或不正确,可能是导致文件名为空的原因。

打印结果:

arglist.plots_dir: ./learning_curves/
arglist.exp_name: None

要解决这个问题,需要确保在设置 arglist.exp_name 变量时赋予它一个非空的值。检查代码中设置 arglist.exp_name 的部分,并确保为其赋予一个合适的字符串值。

例如,可以在设置 arglist.exp_name 的地方添加以下代码:

arglist.exp_name = "your_experiment_name"

代码具体的添加方法:

if len(episode_rewards) > arglist.num_episodes:
    if arglist.exp_name is None:
        arglist.exp_name = "my_experiment"
    rew_file_name = arglist.plots_dir + arglist.exp_name + '_rewards.pkl'
    with open(rew_file_name, 'wb') as fp:
        pickle.dump(final_ep_rewards, fp)
    agrew_file_name = arglist.plots_dir + arglist.exp_name + '_agrewards.pkl'
    with open(agrew_file_name, 'wb') as fp:
        pickle.dump(final_ep_ag_rewards, fp)
    print('...Finished total of {} episodes.'.format(len(episode_rewards)))
    break

注意:这种方法尝试了之后仍然出现相同的错误,具体不清楚是文件名起的不对,还是什么。

在命令行输入仍然报相同的错误:

python your_script.py --exp-name my_experiment

1.1.3 第三种解决方式- default=" "

解决方式:将default=None改为default=" "

没有了TypeError: must be str, not NoneType这个错误

    # Checkpointing
    parser.add_argument("--exp-name", type=str, default="", help="name of the experiment")

    # parser.add_argument("--exp-name", type=str, default=None, help="name of the experiment")

但出现了新的错误:

Traceback (most recent call last): File "train.py", line 196, in <module> train(arglist) File "train.py", line 186, in train with open(rew_file_name, 'wb') as fp: FileNotFoundError: [Errno 2] No such file or directory: './learning_curves/_rewards.pkl'

这个错误提示表明在打开文件'./learning_curves/_rewards.pkl'时发生了找不到文件或目录的错误。

解决方式:在当前目录(即包含train.py文件的目录)下创建learning_curves

mkdir learning_curves

1.2 Non-UTF-8 code starting with '\xcc' in file train.py

File "train.py", line 184 SyntaxError: Non-UTF-8 code starting with '\xcc' in file train.py on line 184, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

根据提供的错误信息,遇到了一个编码错误 SyntaxError: Non-UTF-8 code starting with '\xcc' in file train.py on line 184, but no encoding declared

这个错误通常发生在代码文件中存在非 UTF-8 编码的字符,而没有声明文件的编码类型。在 Python 中,为了正确地解析和处理文件中的特定字符集,需要在代码文件的开头添加编码声明。

要解决这个问题,可以在代码文件的开头添加一个编码声明行,指明文件的编码类型。

例如,如果代码文件使用的是 UTF-8 编码,可以在文件的开头添加以下行:

# -*- coding: utf-8 -*-

确保将上述行添加到代码文件的开头,并在其中指定适当的编码类型(例如 UTF-8)。

在代码文件 train.py 中的第 1 行之前添加编码声明行,然后保存文件并重新运行您的代码,这应该能够解决编码错误。

另外,如果代码文件确实包含了其他编码的字符集,并且不是 UTF-8 编码,请根据实际情况选择适当的编码类型,并在编码声明行中进行声明。

1.3 FileNotFoundError: [Errno 2] No such file or directory

2023-05-16 08:37:33.982168: I tensorflow/core/platform/cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA Traceback (most recent call last): File "train.py", line 194, in <module> train(arglist) File "train.py", line 82, in train env = make_env(arglist.scenario, arglist, arglist.benchmark) File "train.py", line 54, in make_env scenario = scenarios.load(scenario_name + ".py").Scenario() File "/home/xiaowang/multiagent-particle-envs-master/multiagent-particle-envs-master/multiagent/scenarios/__init__.py", line 7, in load return imp.load_source('', pathname) File "/home/xiaowang/anaconda3/envs/py3.6/lib/python3.6/imp.py", line 172, in load_source module = _load(spec) File "<frozen importlib._bootstrap>", line 684, in _load File "<frozen importlib._bootstrap>", line 665, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 674, in exec_module File "<frozen importlib._bootstrap_external>", line 780, in get_code File "/home/xiaowang/anaconda3/envs/py3.6/lib/python3.6/imp.py", line 158, in get_data return super().get_data(path) File "<frozen importlib._bootstrap_external>", line 832, in get_data FileNotFoundError: [Errno 2] No such file or directory: '/home/xiaowang/multiagent-particle-envs-master/multiagent-particle-envs-master/multiagent/scenarios/simple_adversary.py.py'

根据错误信息,是找不到文件 /home/xiaowang/multiagent-particle-envs-master/multiagent-particle-envs-master/multiagent/scenarios/simple_adversary.py.py

检查文件路径,确保文件存在,并且文件名没有重复的扩展名。在错误信息中,文件名的末尾似乎有一个额外的 .py 扩展名,可能是重复添加导致的。

解决方法,

删除一个.py后缀

1.4 InvalidArgumentError (see above for traceback)

InvalidArgumentError (see above for traceback): Unsuccessful TensorSliceReader constructor: Failed to get matching files on /tmp/policy/: Not found: /tmp/policy; No such file or directory [[Node: save/RestoreV2 = RestoreV2[dtypes=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, ..., DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_save/Const_0_0, save/RestoreV2/tensor_names, save/RestoreV2/shape_and_slices)]]

这个错误表明在执行 TensorFlow 模型恢复操作时,找不到指定的文件或目录。具体来说,它指示找不到 /tmp/policy/ 目录下的文件。

解决方法:

再训练一次,观察/tmp/policy/ 目录是否生成。因为只有训练时才会产生,如果是第一次训练,是没有这个路径的。

1.5 NotFoundError (see above for traceback)

Caused by op 'save/RestoreV2', defined at:
File "./experiments/train.py", line 193, in <module>
train(arglist)
File "./experiments/train.py", line 96, in train
U.load_state(arglist.load_dir)
File "d:\pytorch\maddpg-master\maddpg\common\tf_util.py", line 229, in load_state
saver = tf.train.Saver()

……
NotFoundError (see above for traceback): Key agent_1/agent_1/p_func/fully_connected/biases/Adam not found in checkpoint
[[Node: save/RestoreV2 = RestoreV2[dtypes=[DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, DT_FLOAT, ..., DT_FLOAT, DT_FLOAT, DT_FLOAT
, DT_FLOAT, DT_FLOAT], _device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_save/Const_0_0, save/RestoreV2/tensor_names, save/R
estoreV2/shape_and_slices)]]

解决方法:

1.6 [ 4844.367517] Out of memory:

在运行simple_adversary.py这个环境时报的错

[ 4844.367517] Out of memory: Kill process 2996 (python) score 424 or sacrifice child [ 4844.367530] Killed process 2996 (python) total-vm:2244352kB, anon-rss:1296896kB, file-rss:0kB, shmem-rss:0kB

这个错误表明系统内存不足,导致进程被操作系统终止。

这种情况通常发生在程序使用了过多的内存资源,而系统无法为其提供足够的内存空间。这可能是由于程序本身的内存使用量较大,或者系统上同时运行的其他进程也占用了大量的内存资源。

1.7 set the environment variable `SUPPRESS_MA_PROMPT=1`

Please read the raised warning, then press Enter to continue... (to suppress this prompt, please set the environment variable `SUPPRESS_MA_PROMPT=1`)

请阅读所提出的警告信息,然后按回车键继续...(如果要禁止此提示,请设置环境变量SUPPRESS_MA_PROMPT=1

在Linux系统中,可以通过以下方式设置环境变量:

 临时设置:在终端中执行以下命令来临时设置环境变量:

export SUPPRESS_MA_PROMPT=1

永久设置:要在系统中永久设置环境变量,可以编辑用户的配置文件。

常见的配置文件包括~/.bashrc~/.bash_profile~/.profile等。使用文本编辑器打开其中一个文件,然后在文件的末尾添加以下行:

export SUPPRESS_MA_PROMPT=1

保存文件并关闭文本编辑器。

接下来,在终端中运行以下命令以使更改生效:

source ~/.bashrc

或者,您可以注销并重新登录系统,使更改生效。

请注意,上述示例中的SUPPRESS_MA_PROMPT是一个示例环境变量名称,您可以根据需要自定义环境变量名称。同样,示例中的值为1,但您可以根据需要设置不同的值。

设置环境变量后,应该不再收到"Please read the raised warning, then press Enter to continue..."的提示

2.问题

2.1 Linux中隐藏文件是如何显示的?

在Linux系统中,文件名以点(.)开头的文件被视为隐藏文件。默认情况下,使用常规的 ls 命令是无法显示隐藏文件的,但可以通过添加命令参数来显示它们。

要显示所有文件(包括隐藏文件),您可以使用以下命令:

ls -a

或者,如果您只想查看隐藏文件,您可以使用以下命令:

ls -ld .?*

这个命令使用了通配符 .?*,它会匹配以点开头的文件和目录(隐藏文件)。命令的输出将显示隐藏文件的详细信息。

请注意,隐藏文件的名称通常是以点开头的,例如 .bashrc.gitignore。如果您在指定路径中没有看到类似的文件名,请确保目录中确实存在隐藏文件。

2.2 使用ls -a显示 . .. train.py是什么意思?

在Linux系统中,使用 ls -a 命令会显示当前目录中的所有文件和目录,包括隐藏文件和特殊目录。

  • . 代表当前目录,即命令执行的目录本身。
  • .. 代表当前目录的上级目录,即父级目录。

这两个特殊项是每个目录中的默认项。它们用于表示目录结构中的位置关系。下面是对它们的详细说明:

  1. . (点)

    • 在命令行中,. 表示当前目录
    • 在文件系统中,每个目录中都存在一个隐含的 . 条目,表示该目录本身。
    • 例如,如果你执行 ls -a 命令,你会看到以 . 开头的文件或目录,它们是当前目录下的内容。.. (点点)
      • 在命令行中,.. 表示当前目录的上级目录
      • 在文件系统中,每个目录中都存在一个隐含的 .. 条目,表示该目录的上级目录。
      • 例如,如果你执行 ls -a 命令,你会看到以 .. 开头的文件或目录,它们是当前目录的父级目录下的内容。

在您提供的示例中,ls -a 命令显示了当前目录下的所有文件和目录,其中包括隐藏文件(以 . 开头的文件或目录)以及默认的 ... 条目。

train.py 是一个普通的文件,它是当前目录中的一个Python源代码文件。

2.3 c#中\t

在C#中,\t 是一个转义序列,代表水平制表符(Tab)。当你将 \t 插入到字符串中时,它将在该位置插入一个水平制表符,从而产生一段水平对齐的空格。

下面是一个示例,演示如何在C#中使用 \t

string text = "Name:\tJohn\nAge:\t25";
Console.WriteLine(text);

输出结果将是:

Name:   John
Age:    25

注意到在字符串中的 \t 被解释为一个水平制表符,生成了一段空格来实现对齐效果。

使用 \t 可以帮助在输出文本时创建整齐对齐的格式,特别是在表格或其他需要垂直对齐的情况下。

2.4 display和render区别和联系

在强化学习中,displayrender 是用于可视化环境的两个相关概念,它们有一些区别和联系。

  • displaydisplay 通常用于指示是否在训练过程中显示环境的可视化界面,以便观察智能体与环境的交互情况。当 display 设置为 True 时,环境将在训练过程中以可视化形式呈现,允许您实时观察智能体的决策和环境的状态。这对于调试和直观理解算法的表现很有帮助。

  • renderrender 是一个环境提供的方法,用于将当前环境状态渲染成可视化图像或视频。通过调用环境的 render 方法,您可以获取当前环境状态的可视化表示。渲染通常用于演示、记录或展示智能体在环境中的表现。

联系:

  • 在某些情况下,display 参数可能会调用环境的 render 方法来显示环境的可视化界面。当 display 设置为 True 时,通常会在每个时间步骤调用环境的 render 方法来实时显示环境状态。
  • displayrender 都与环境的可视化相关,它们提供了一种观察智能体与环境交互的方式,帮助您理解和调试算法。

需要注意的是,具体的实现可能因环境库、框架或代码而有所不同。因此,在使用特定的强化学习库或框架时,最好查阅相关文档以了解准确的定义和用法。

  • 6
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Net-SNMP是一个用于实现SNMP(Simple Network Management Protocol,简单网络管理协议)的工具包。学习Net-SNMP主要包括以下几个方面: 1. 编译和安装Net-SNMP:首先需要下载和解压Net-SNMP的源代码,然后通过命令行进行编译和安装。 2. 编写MIB文件:MIB(Management Information Base,管理信息库)文件用于定义被SNMP管理的对象。你可以使用文本编辑器编写MIB文件,其中包含了对象的标识符和相关信息。 3. 转换MIB文件:将MIB文件转换成.c和.h文件,这样可以在SNMP代理中使用。可以使用工具来进行这个转换过程。 4. Agent代理工程:Agent代理是一个运行在网络设备上的软件模块,它负责收集和提供设备的管理信息给SNMP管理系统。学习Net-SNMP还需要了解如何配置和运行Agent代理工程。 5. Trap机制:Trap是SNMP的一种机制,用于报告特殊事件的发生。学习Net-SNMP时需要了解如何配置Trap机制,以便及时获得网络资源的实时监控。 总之,学习Net-SNMP主要包括编译和安装Net-SNMP,编写和转换MIB文件,配置和运行Agent代理工程,以及理解Trap机制等方面。这些知识可以帮助你实现有效的网络管理软件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SNMP网管学习笔记](https://download.csdn.net/download/qiek/6674485)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [net-snmp学习笔记<一> — 介绍](https://blog.csdn.net/prochsh/article/details/49888141)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天寒心亦热

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值