mirror of
https://github.com/wassname/pyrobolearn.git
synced 2026-08-30 11:29:44 +08:00
58 lines
2.3 KiB
Python
58 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
"""Demonstrate the various features (operations) you can use with the ``Reward`` class.
|
|
|
|
To illustrate the various operations we use the ``FixedReward``.
|
|
|
|
See the other examples to see how to use more complex reward functions.
|
|
"""
|
|
|
|
import numpy as np
|
|
|
|
# You can import in two ways reward functions
|
|
import pyrobolearn as prl # import PRL
|
|
from pyrobolearn.rewards import FixedReward # specify which function you want to import
|
|
|
|
# You can also import all the reward functions and the mathematical functions but I usually avoid it because
|
|
# we do not know while reading the code where the various classes and other functionalities come from
|
|
# from pyrobolearn.rewards import *
|
|
|
|
|
|
# define two fixed reward functions
|
|
r1 = prl.rewards.FixedReward(value=3)
|
|
r2 = FixedReward(value=2, range=(-2, 2))
|
|
|
|
# print their value by calling them
|
|
print("\nInitial rewards: r1 = {}, and r2 = {}".format(r1, r2))
|
|
print("Initial reward value: r1() = {}, and r2() = {}".format(r1(), r2()))
|
|
print("Initial reward range: range(r1) = {}, and range(r2) = {}".format(r1.range, r2.range))
|
|
|
|
# try to define a fixed reward function where the initial value is not in the defined range
|
|
try:
|
|
r3 = FixedReward(value=2, range=(-1, 1))
|
|
except ValueError as e:
|
|
print("\nTrying `r3=FixedReward(value=2, range=(-1,1))` results in an error: \n" + str(e) + "\n")
|
|
|
|
|
|
# perform some mathematical operations on them
|
|
r4 = 2 * prl.rewards.cos(r1) - 3 * r2
|
|
|
|
# print its value and range
|
|
print("Perform mathematical operations on r1 and r2:")
|
|
print("r4 = 2 * cos(r1) - 3 * r2 = {}".format(r4()))
|
|
print("2 * cos(3) - 3 * 2 = {}".format(2 * np.cos(3) - 3 * 2))
|
|
print("range(r4) = {}".format(r4.range))
|
|
|
|
|
|
# try to perform an operation which it not authorized
|
|
try:
|
|
r5 = r1 / r2 # the range of r2 is [-2, 2] and thus there is a chance it could be 0 at one point
|
|
except ValueError as e:
|
|
print("\nTrying `r5 = r1 / r2` results in an error: \n" + str(e) + "\n")
|
|
|
|
|
|
# The range of r2 is [-2, 2], if a reward function computes a reward value which is not in the range,
|
|
# it will automatically be clipped.
|
|
r2.value = 3 # you can only set the value for the FixedReward
|
|
print("Setting r2.value=3 while its range is [-2, 2], and computing the reward will result in: r2={}".format(r2()))
|