0.3.0
New
Vectorized gym support: Added a new problem class, evotorch.neuroevolution.VecGymNE
, to solve vectorized gym environments. This new problem class can work with brax environments and can exploit GPU acceleration (#20).
PicklingLogger: Added a new logger, evotorch.logging.PicklingLogger
, which periodically pickles and saves the current solution to the disk (#20).
Python 3.7 support: The Python dependency was lowered from 3.8 to 3.7. Therefore, EvoTorch can now be imported from within a Google Colab notebook (#16).
API Changes
@pass_info decorator: When working with GymNE
(or with the newly introduced VecGymNE
), if one uses a manual policy class and wishes to receive environment-related information via keyword arguments, that manual policy now needs to be decorated via @pass_info
, as follows: (#27)
from torch import nn
from evotorch.decorators import pass_info
@pass_info
class CustomPolicy(nn.Module):
def __init__(self, **kwargs):
...
Recurrent policies: When defining a manual recurrent policy (as a subclass of torch.nn.Module
) for GymNE
or for VecGymNE
, the user is now required to define the forward method of the module according to the following signature:
def forward(self, x: torch.Tensor, h: Any = None) -> Tuple[torch.Tensor, Any]:
...
Note: The optional argument h
is the current state of the network, and the second value of the output tuple is the updated state of the network. A reset()
method is not required anymore, and it will be ignored (#20).
Fixes
Fixed a performance issue caused by the undesired cloning of the entire storages of tensor slices (#21).
Fixed the signature and the docstrings of the overridable method _do_cross_over(...)
of the class evotorch.operators.CrossOver
(#30).
Docs
Added more example scripts and updated the related README file (#19).
Updated the documentation related to GPU usage with ray (#28).