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)
python
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:
python
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).