Python-DQN代码阅读(10)

目录

1.代码

1.1 代码阅读

1.2 代码分解

1.2.1 f = open("experiments/" + str(env.spec.id) + "/performance.txt", "a+")

1.2.2 f.write(str(ep) + " " + str(time_steps) + " " + str(episode_rewards) + " " + str(total_t) + " " + str( epsilon) + '\n')

1.2.3 f.close()

1.2.4 env.spec.id

1.2.5 a+


1.代码

1.1 代码阅读

python">if done:  # 如果游戏结束
    # print("done: ", done)
    break

state = next_state  # 更新当前状态为下一状态
total_t += 1  # 总步数加一

if train_or_test == 'train':  # 如果是训练阶段
    print('\n Eisode: ', ep, '| time steps: ', time_steps, '| total episode reward: ', episode_rewards, '| total_t: ', total_t, '| epsilon: ', epsilon, '| replay mem size: ', len(replay_memory))
elif train_or_test == 'test':  # 如果是测试阶段
    print('\n Eisode: ', ep, '| time steps: ', time_steps, '| total episode reward: ', episode_rewards, '| total_t: ', total_t, '| epsilon: ', epsilon)

if train_or_test == 'train':  # 如果是训练阶段
    f = open("experiments/" + str(env.spec.id) + "/performance.txt", "a+")
    f.write(str(ep) + " " + str(time_steps) + " " + str(episode_rewards) + " " + str(total_t) + " " + str(
        epsilon) + '\n')  # 将训练结果写入文件
    f.close()

这段代码是一个强化学习训练或测试的循环。在每一次训练或测试的 episode 中,通过循环在环境中与环境交互,并根据环境的反馈进行相应的处理。

具体而言,循环中的每一步包括以下步骤:

  1. 检查当前 episode 是否结束,如果结束则跳出循环。
  2. 如果当前 episode 没有结束,则更新当前状态为下一个状态。
  3. 更新总步数 total_t 的计数。
  4. 如果是训练模式,输出当前 episode 的信息,包括 episode 编号、时间步数、总回报、总步数、当前的 epsilon 值和 replay memory 的大小,并将这些信息写入到文件中。
  5. 如果是测试模式,输出当前 episode 的信息,包括 episode 编号、时间步数、总回报、总步数、当前的 epsilon 值。
  6. 继续下一步循环,与环境进行交互,直到当前 episode 结束。

这段代码主要负责控制训练或测试过程的循环和输出相应的信息,具体的训练或测试逻辑可能在循环内的其他代码段中实现。例如,前面提到的更新 Q 网络的代码就可能在这个循环内的某个位置执行。

1.2 代码分解

1.2.1 f = open("experiments/" + str(env.spec.id) + "/performance.txt", "a+")

python">f = open("experiments/" + str(env.spec.id) + "/performance.txt", "a+")

这段代码打开一个文件,文件路径是根据env.spec.id生成的,并在文件末尾以追加模式("a+")打开。这意味着如果文件不存在,则会创建一个新文件;如果文件已存在,则会将写入的内容追加到文件末尾。

这段代码用于将训练结果写入到一个名为"performance.txt"的文件中,文件位于名为"experiments"的目录下,该目录的路径是根据env.spec.id生成的。文件中写入的内容包括回合数(ep)、步数(time_steps)、总回合奖励(episode_rewards)、总步数(total_t)和当前的epsilon值(epsilon)等信息,用空格分隔。每次写入后会自动换行(\n)。

1.2.2 f.write(str(ep) + " " + str(time_steps) + " " + str(episode_rewards) + " " + str(total_t) + " " + str( epsilon) + '\n')

python">f.write(str(ep) + " " + str(time_steps) + " " + str(episode_rewards) + " " + str(total_t) + " " + str(
        epsilon) + '\n')

这段代码将回合数 (ep)、步数 (time_steps)、总回合奖励 (episode_rewards)、总步数 (total_t) 和当前的 epsilon 值 (epsilon) 转换成字符串并拼接在一起,中间用空格分隔。然后将这个字符串写入到文件中。末尾的 '\n' 是换行符,用于在写入完一行后换行,使得每一行的记录都单独占据一行。这样,每次写入后都会换到下一行,保证了每一次记录都独立显示在文件中的一行。

1.2.3 f.close()

python">f.close() 

关闭文件,确保写入的数据被保存到文件中,并释放文件对象的资源

1.2.4 env.spec.id

python">env.spec.id

env.spec.id 是一个用于获取 OpenAI Gym 环境的唯一标识符的属性。在强化学习任务中,环境通常由一个环境类表示,而 env.spec.id 则是该环境类的唯一标识符。

env.spec 是一个属性,它包含了环境的规格信息,包括环境的名称、版本号、唯一标识符等。env.spec.id 是其中的一个属性,表示环境的唯一标识符。这个唯一标识符通常由环境的名称和版本号组成,用于在多个环境中进行区分。

在上面提到的代码中,env.spec.id 被用作文件路径的一部分,以创建一个特定于环境的文件,用于记录训练或测试过程中的性能指标。这样可以确保每个环境的性能指标都被记录到不同的文件中,方便后续的数据分析和评估。

1.2.5 a+

python">a+

a+ 是 Python 文件打开模式之一,用于以追加(append)和读取(read)的方式打开文件。

具体而言,a+ 模式表示以追加方式打开文件,并允许读取文件。如果文件不存在,则会创建一个新文件。当使用 a+ 模式打开文件时,文件指针会定位到文件末尾,这意味着新的写入操作会从文件末尾开始,而读取操作会从文件开头开始。

a+ 模式通常用于在已有文件的末尾添加新的内容,并且需要在后续操作中读取文件内容,例如记录训练或测试过程中的性能指标到文件中,并在训练或测试结束后读取这些指标进行分析或展示。


http://www.niftyadmin.cn/n/225007.html

相关文章

Html5钢琴块游戏制作与分享(音游可玩)

当年一款手机节奏音游,相信不少人都玩过或见过。最近也是将其做了出来分享给大家。 游戏的基本玩法:点击下落的黑色方块,弹奏音乐。(下落的速度会越来越快) 可以进行试玩,手机玩起来效果会更好些。 点击…

企业的数据中台到底指的是什么?_光点科技

随着数据技术的不断发展和企业数据应用的广泛应用,越来越多的企业开始将数据中台作为数字化转型的核心战略之一。那么,企业的数据中台到底指的是什么呢? 数据中台是一种以数据为核心的企业数字化转型架构,旨在通过数据的汇聚、整合…

【SQL 初阶教程】一文轻松玩转 SQL

目录 一、SQL 通用语法 二、SQL 语句的分类 三、DDL语句 DDL——数据库操作 查询所有数据库 语句: SHOW DATABASES;(大小写均可,建议大写) 创建数据库HSK 语句:CREATE DATABASE HSK; 删除数据库HSK 语句 &#…

【SpringSecurity】学习笔记(一)

学习笔记一、SpringSecurity 简介二、创建测试项目2.1、引入依赖2.2、测试三、SpringSecurity基本原理3.1、过滤器链3.1.1、FilterSecurityInterceptor3.1.2、ExceptionTranslationFilter3.1.3、UsernamePasswordAuthenticationFilter3.2、过滤器加载过程3.3、两个重要的接口3.…

$\Beta$分布推导与可视化

$\Gamma$函数 $\Gamma$函数(Gamma函数)是阶乘函数在实数和复数域的扩展。对于正整数$n$,阶乘函数表示为$n! 1 \times 2 \times ... \times n$。然而,这个定义仅适用于正整数。Gamma函数的目的是将阶乘扩展到实数和复数域,从而计算实数和复数…

UDP/TCP的相关性你知道几个?

TCP/IP网络原理——主要围绕UDP/TCP进行讲解 文章目录TCP/IP网络原理——主要围绕UDP/TCP进行讲解应用层传输层UDP/TCPTCP丢包总结应用层 网络协议的五层协议分别是应用层,传输层,网络层,数据链路层,物理层,这五层构成…

记录-Vue.js模板编译过程揭秘:从模板字符串到渲染函数

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 Vue.js是一个基于组件化和响应式数据流的前端框架。当我们在Vue中编写模板代码时,它会被Vue编译器处理并转换为可被浏览器解析的JavaScript代码。Vue中的模板实际上是HTML标记和Vue指令的组…

k8s部署流水账

久仰大名k8s,业余选手一直望而却步。最近终于初步炮制成功。知道了大概的流程。本篇为部署备忘录。 经过的大环节有:修改树莓派/boot/cmdline.txt甚至/cmd/config.txt里面的集群相关设置,把cgroup驱动enable好。swap关掉。这些都是所有集群内…