基于pybullet的5自由度机械臂仿真【1】基于keras手撸Agent

重复造轮子没啥意义,但是手打一遍还是有收获。

import tensorflow as tf
import random
from collections import namedtuple
import math
import numpy as np

def huber_loss(y_true, y_pred, clip_delta=1.0):
    '''
    Huber_loss:回归loss函数,专用于DQN算法
    :param y_true: 真实集
    :param y_pred: 预测集
    :param clip_delta: 超参数,决定平方结果随误差变化的速度
    :return: loss值
    '''
    error = y_true - y_pred
    cond = tf.keras.backend.abs(error) < clip_delta

    squared_loss = 0.5 * tf.keras.backend.square(error)
    linear_loss = clip_delta * (tf.keras.backend.abs(error) - 0.5 * clip_delta)

    return tf.where(cond, squared_loss, linear_loss)

def huber_loss_mean(y_true, y_pred, clip_delta=1.0):
  return tf.keras.backend.mean(huber_loss(y_true, y_pred, clip_delta))


class BasicPool(object):
    def __init__(self, capacity):
        '''
        基于python内置环境,开辟数据池空间。理论上更快。
        :param capacity: 数据池容量
        '''
        self.capacity = capacity
        self.memory = []
        self.position = 0
        self.Transition = namedtuple('Transition',('state', 'action', 'next_state', 'reward'))

    def push(self, *args):
        '''
        存入任意参数
        '''
        if len(self.memory) < self.capacity:
            self.memory.append(None)
        self.memory[self.position] = self.Transition(*args)
        self.positi
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值