95-140-040-源码-transform-简介

838 篇文章 843 订阅 ¥99.90 ¥99.00

1.视界

在这里插入图片描述

2.前文回顾

Flink程序的sourcesink就差transformation了。今天我们就来解读一下Flink的transformation。它们三者的关系如下图:
在这里插入图片描述

​ 当然这还是从Flink编程API的角度来看的(编程视角)。所谓的transformation,用于转换一个或多个DataStream从而形成一个新的DataStream对象。Flink提供编程接口,允许你组合这些transformation从而形成非常灵活的拓扑结构。

3.概述

算子转换大纲

在这里插入图片描述

Transformation是所有transformation的抽象类,提供了实现transformation的基础功能。每一个DataStream都有一个与之对应的Transformation。</

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是Pendulum-v0的源码实现,你可以直接在Gym官方GitHub仓库中查看完整的代码实现:https://github.com/openai/gym/blob/master/gym/envs/classic_control/pendulum.py ```python import gym from gym import spaces from gym.utils import seeding import numpy as np from os import path class PendulumEnv(gym.Env): metadata = { 'render.modes': ['human', 'rgb_array'], 'video.frames_per_second': 30 } def __init__(self, g=10.0): self.max_speed = 8 self.max_torque = 2. self.dt = .05 self.g = g self.m = 1. self.l = 1. self.viewer = None high = np.array([1., 1., self.max_speed], dtype=np.float32) self.action_space = spaces.Box( low=-self.max_torque, high=self.max_torque, shape=(1,), dtype=np.float32) self.observation_space = spaces.Box( low=-high, high=high, dtype=np.float32) self.seed() self.state = None def seed(self, seed=None): self.np_random, seed = seeding.np_random(seed) return [seed] def step(self, u): th, thdot = self.state # th := theta g = self.g m = self.m l = self.l dt = self.dt u = np.clip(u, -self.max_torque, self.max_torque)[0] self.last_u = u # for rendering costs = angle_normalize(th) ** 2 + .1 * thdot ** 2 + .001 * (u ** 2) newthdot = thdot + (-3 * g / (2 * l) * np.sin(th + np.pi) + 3. / (m * l ** 2) * u) * dt newth = th + newthdot * dt newthdot = np.clip(newthdot, -self.max_speed, self.max_speed) # pylint: disable=E1111 self.state = np.array([newth, newthdot]) return self._get_obs(), -costs, False, {} def reset(self): high = np.array([np.pi, 1]) self.state = self.np_random.uniform(low=-high, high=high) self.last_u = None return self._get_obs() def _get_obs(self): theta, theta_dot = self.state return np.array([np.cos(theta), np.sin(theta), theta_dot], dtype=np.float32) def render(self, mode='human'): from gym.envs.classic_control import rendering if self.viewer is None: self.viewer = rendering.Viewer(500, 500) self.viewer.set_bounds(-2.2, 2.2, -2.2, 2.2) rod = rendering.make_capsule(1, .2) rod.set_color(.8, .3, .3) self.pole_transform = rendering.Transform() rod.add_attr(self.pole_transform) self.viewer.add_geom(rod) axle = rendering.make_circle(.05) axle.set_color(0, 0, 0) self.viewer.add_geom(axle) fname = path.join(path.dirname(__file__), "assets/clockwise.png") self.img = rendering.Image(fname, 1., 1.) self.imgtrans = rendering.Transform() self.img.add_attr(self.imgtrans) self.viewer.add_onetime(self.img) self.pole_transform.set_rotation(self.state[0] + np.pi / 2) if self.last_u: self.imgtrans.scale = (-self.last_u / 2, np.abs(self.last_u) / 2) return self.viewer.render(return_rgb_array=mode == 'rgb_array') def close(self): if self.viewer: self.viewer.close() self.viewer = None def angle_normalize(x): return (((x+np.pi) % (2*np.pi)) - np.pi)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

九师兄

你的鼓励是我做大写作的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值