返回顶部
首页 > 资讯 > 精选 >怎么使用PyTorch实现随机搜索策略
  • 564
分享到

怎么使用PyTorch实现随机搜索策略

2023-07-02 19:07:56 564人浏览 安东尼
摘要

本篇内容主要讲解“怎么使用PyTorch实现随机搜索策略”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PyTorch实现随机搜索策略”吧!1. 随机搜索策略一种简单但有效的方法是将智能体

本篇内容主要讲解“怎么使用PyTorch实现随机搜索策略”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PyTorch实现随机搜索策略”吧!

1. 随机搜索策略

一种简单但有效的方法是将智能体对环境的观测值映射到代表两个动作的二维向量,然后我们选择值较高的动作执行。映射函数使用权重矩阵描述,权重矩阵的形状为 4 x 2,因为在CarPole环境中状态是一个 4 维向量,而动作有 2 个可能值。在每个回合中,首先随机生成权重矩阵,并用于计算此回合中每个步骤的动作,并在回合结束时计算总奖励。重复此过程,最后将能够得到最高总奖励的权重矩阵作为最终的动作选择策略。由于在每个回合中我们均会随机选择权重矩阵,因此称这种方法为随机搜索,期望通过在多个回合的测试中找到最佳权重。

2. 使用 PyTorch 实现随机搜索算法

在本节中,我们使用 PyTorch 实现随机搜索算法。

首先,导入 Gym 和 PyTorch 以及其他所需库,并创建一个 CartPole 环境实例:

import gymimport torchfrom matplotlib import pyplot as pltenv = gym.make('CartPole-v0')

获取并打印状态空间和行动空间的尺寸:

n_state = env.observation_space.shape[0]print(n_state)# 4n_action = env.action_space.nprint(n_action)# 2

当我们在之后定义权重矩阵时,将会使用这些尺寸,即权重矩阵尺寸为 (n_state, n_action) = (4 x 2)

接下来,定义函数用于使用给定输入权重模拟 CartPole 环境的一个游戏回合并返回此回合中的总奖励:

def run_episode(env, weight):    state = env.reset()    total_reward = 0    is_done = False    while not is_done:        state = torch.from_numpy(state).float()        action = torch.argmax(torch.matmul(state, weight))        state, reward, is_done, _ = env.step(action.item())        total_reward += reward    return total_reward

在以上代码中,我们首先将状态数组 state 转换为浮点型张量,然后计算状态数组和权重矩阵张量的乘积 torch.matmul(state, weight),以将状态数组进行映射映射为动作数组,使用 torch.argmax() 操作选择值较高的动作,例如值为 [0.122, 0.333],则应选择动作 1。然后使用 item() 方法获取操作结果值,因为此处的 step() 方法需要接受单元素张量,获取新的状态和奖励。重复以上过程,直到回合结束。

指定回合数,并初始化变量用于记录最佳总奖励和相应权重矩阵,并初始化数组用于记录每个回合的总奖励:

n_episode = 1000best_total_reward = 0best_weight = Nonetotal_rewards = []

接下来,我们运行 n_episode 个回合,在每个回合中,执行以下操作:

  • 构建随机权重矩阵

  • 智能体根据权重矩阵将状态映射到相应的动作

  • 回合终止并返回总奖励

  • 更新最佳总奖励和最佳权重,并记录总奖励

for e in range(n_episode):    weight = torch.rand(n_state, n_action)    total_reward = run_episode(env, weight)    print('Episode {}: {}'.fORMat(e+1, total_reward))    if total_reward > best_total_reward:        best_weight = weight        best_total_reward = total_reward    total_rewards.append(total_reward)

运行 1000 次随机搜索获得最佳策略,最佳策略由 best_weight 参数化。在测试最佳策略之前,我们可以计算通过随机搜索获得的平均总奖励:

print('Average total reward over {} episode: {}'.format(n_episode, sum(total_rewards) / n_episode))# Average total reward over 1000 episode: 46.722

可以看到,对比使用随机动作获得的结果 (22.19),使用随机搜索获取的总奖励是其两倍以上。

接下来,我们使用随机搜索得到的最佳权重矩阵,在 1000 个新的回合中测试其表现如何:

n_episode_eval = 1000total_rewards_eval = []for episode in range(n_episode_eval):    total_reward = run_episode(env, best_weight)    print('Episode {}: {}'.format(episode+1, total_reward))    total_rewards_eval.append(total_reward)print('Average total reward over {} episode: {}'.format(n_episode_eval, sum(total_rewards_eval) / n_episode_eval))# Average total reward over 1000 episode: 114.786

随机搜索算法的效果能够获取较好结果的主要原因是 CartPole 环境较为简单。它的观察状态数组仅由四个变量组成。而在 Atari Space Invaders 游戏中的观察值超过 100000 (即 210 \times 160 \times 3210×160×3)。同样 CartPole 中动作状态的维数也仅仅为 2。通常,使用简单算法可以很好地解决简单问题。

我们也可以注意到,随机搜索策略的性能优于随机选择动作。这是因为随机搜索策略将智能体对环境的当前状态考虑在内。有了关于环境的相关信息,随机搜索策略中的动作就可以比完全随机的选择动作更加智能。

我们还可以在训练和测试阶段绘制每个回合的总奖励:

plt.plot(total_rewards, label='search')plt.plot(total_rewards_eval, label='eval')plt.xlabel('episode')plt.ylabel('total_reward')plt.legend()plt.show()

怎么使用PyTorch实现随机搜索策略

可以看到,每个回合的总奖励是非常随机的,并且并没有因为回合数的增加显示出改善的趋势。在训练过程中,可以看到在实现前期有些回合的总奖励已经可以达到 200,由于智能体的策略并不会因为回合数的增加而改善,因此我们可以在回合总奖励达到 200 时结束训练:

n_episode = 1000best_total_reward = 0best_weight = Nonetotal_rewards = []for episode in range(n_episode):    weight = torch.rand(n_state, n_action)    total_reward = run_episode(env, weight)    print('Episode {}: {}'.format(episode+1, total_reward))    if total_reward > best_total_reward:        best_weight = weight        best_total_reward = total_reward    total_rewards.append(total_reward)    if best_total_reward == 200:        break

由于每回合的权重都是随机生成的,因此获取最大奖励的策略出现的回合也并不确定。要计算所需训练回合的期望,可以重复以上训练过程 1000 次,并取训练次数的平均值作为期望:

n_training = 1000n_episode_training = []for _ in range(n_training):    for episode in range(n_episode):        weight = torch.rand(n_state, n_action)        total_reward = run_episode(env, weight)        if total_reward == 200:            n_episode_training.append(episode+1)            breakprint('Expectation of training episodes needed: ', sum(n_episode_training) / n_training)# Expectation of training episodes needed:  14.26

可以看到,平均而言,我们预计大约需要 14 个回合才能找到最佳策略。

到此,相信大家对“怎么使用PyTorch实现随机搜索策略”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 怎么使用PyTorch实现随机搜索策略

本文链接: https://lsjlt.com/news/343769.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 使用PyTorch实现随机搜索策略
    目录1. 随机搜索策略2. 使用 PyTorch 实现随机搜索算法1. 随机搜索策略 在本节中,我们将学习一种比随机选择动作更复杂的策略来解决 CartPole ...
    99+
    2024-04-02
  • 怎么使用PyTorch实现随机搜索策略
    本篇内容主要讲解“怎么使用PyTorch实现随机搜索策略”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用PyTorch实现随机搜索策略”吧!1. 随机搜索策略一种简单但有效的方法是将智能体...
    99+
    2023-07-02
  • PyTorch策略梯度算法怎么使用
    这篇文章主要介绍“PyTorch策略梯度算法怎么使用”,在日常操作中,相信很多人在PyTorch策略梯度算法怎么使用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PyTorch策略梯度算法怎么使用”的疑惑有所...
    99+
    2023-07-02
  • 怎么使用Python实现搜索功能
    在Python中实现搜索功能通常使用内置的数据结构和算法来实现,以下是一个简单的例子: def search(arr, target...
    99+
    2024-03-02
    Python
  • java怎么实现搜索框搜索功能
    要实现搜索框搜索功能,可以按照以下步骤进行:1. 在前端页面上创建一个搜索框,如一个文本框和一个按钮。2. 在后端创建一个处理搜索请...
    99+
    2023-09-26
    java
  • golang怎么实现搜索
    随着互联网的飞速发展,搜索引擎成为了我们日常生活中必不可少的一部分。而搜索引擎的核心技术之一就是搜索算法。今天我们将介绍用golang语言实现搜索算法的方法和技巧。一、基本概念在开始介绍搜索算法之前,先让我们了解一些基本概念。1.搜索:在一...
    99+
    2023-05-14
  • 怎么实现php策略模式
    小编给大家分享一下怎么实现php策略模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 策略模式:就是把算法和对象分离...
    99+
    2024-04-02
  • Dubbo轮询策略怎么实现
    Dubbo提供了多种轮询策略的实现方式,可以通过在服务提供者和消费者的配置文件中进行配置。 服务提供者配置: 在服务提供者的配置文...
    99+
    2023-10-22
    Dubbo
  • Java策略模式怎么实现
    这篇文章主要介绍“Java策略模式怎么实现”,在日常操作中,相信很多人在Java策略模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java策略模式怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-02
  • 怎么用Redis实现搜索接口
    这篇文章主要为大家分析了怎么用Redis实现搜索接口的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习“怎么用Redis实现搜索接口”的知识吧。对于后端开发人员来...
    99+
    2023-06-28
  • JS数组搜索之折半搜索怎么实现
    这篇文章将为大家详细讲解有关JS数组搜索之折半搜索怎么实现,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:一. 方法原理:当从一个给定的序列数组arr中, 查找某...
    99+
    2024-04-02
  • 使用c++怎么实现简单随机数
    使用c++怎么实现简单随机数?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。c++简单随机数#include<iostream>#include<...
    99+
    2023-06-15
  • 使用JavaScript怎么实现一个二叉搜索树
    今天就跟大家聊聊有关使用JavaScript怎么实现一个二叉搜索树,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。JavaScript可以做什么1.可以使网页具有交互性,例如响应用户点...
    99+
    2023-06-07
  • 如何使用Spring实现策略模式
    本篇内容介绍了“如何使用Spring实现策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring 中 @Autowired注解,大...
    99+
    2023-06-27
  • 怎样用Javascript实现策略模式
    目录概述代码实现总结概述 策略模式是JavaScript设计模式中行为型的设计模式; 定义: 定义一系列算法,并将这些算法各自封装成策略类(方法),然后将不变的部分和变化的部分分离开...
    99+
    2024-04-02
  • JavaScript中怎么实现策略模式
    今天就跟大家聊聊有关JavaScript中怎么实现策略模式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。策略模式:定义了一系列家族算法,并对每一种算...
    99+
    2024-04-02
  • Android中怎么实现策略模式
    Android中怎么实现策略模式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。策略模式一个功能的效果,有不同的算法与策略,根据不同的选择选择不同的结果。简单来说,只要你写过...
    99+
    2023-05-30
    android
  • VuePress使用Algolia实现全文搜索
    目录引言确认眼神申请授权实施部署调试爬取总结回顾引言 Algolia 为构建者提供构建世界级体验所需的搜索和推荐服务。Algolia 是一个数据库实时搜索服务,能够提供毫秒级的数据库...
    99+
    2024-04-02
  • 怎么用html5实现语音搜索框
    本篇内容主要讲解“怎么用html5实现语音搜索框”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用html5实现语音搜索框”吧!我们先看下他们的不同显示。下面...
    99+
    2024-04-02
  • web用php怎么实现搜索功能
    PHP是一种广泛应用于Web开发中的服务器端脚本语言,它拥有强大的功能和灵活性,能够实现多种复杂的功能。其中,搜索功能无疑是用户最常用的功能之一,于是本文将介绍如何用PHP实现Web搜索功能。创建搜索表单在网站主页面上添加一个搜索表单,通常...
    99+
    2023-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作