Releases: gegelati/gegelati
Releases · gegelati/gegelati
v1.4.0 - Erbaba Cedrina flavor
Release version 1.4.0 - Erbaba Cedrina flavor
2024.10.29
Changes
-
Remove the nbAction parameter that was not necessary since the number of action should not be a parameter that the user can change, it is fixed by the environment
-
Update to improve the diversity of the TPGs.
- Add a new parameter
initNbRoots
to select the number of roots to initialise a TPG. - Add a new parameter
pNewProgram
to create new program during the mutation, during the training.
- Add a new parameter
-
Add two parameters to the reset method of the learning environment. These parameters are used for environments that use specific initialization.
- Parameter
iterationNumber
: an integer indicating the current iteration number when thenbIterationsPerPolicyEvaluation
parameter is greater than 1, default value = 0. - Parameter
generationNumber
: an integer indicating the current generation number, default value = 0.
- Parameter
-
CI now uses build caches for Linux and Macos runner.
- Build caches are saved from the
develop
branch and used on feature branches. main
anddevelop
branches still do full compilation.- Build caches are also used for Sonar analysis.
- Build caches are saved from the
-
Updated CI actions versions
- nick-invision/retry@v2 -> nick-fields/retry@v3
- actions/upload-artifact@v3 -> actions/upload-artifact@v4
- actions/download-artifact@v3 -> actions/download-artifact@v4
- JamesIves/github-pages-deploy-action@4.1.5 -> JamesIves/github-pages-deploy-action@4 (will used latest v4, currently 4.6.1)
- softprops/action-gh-release@v1 -> softprops/action-gh-release@v2
- actions/setup-java@v3 -> actions/setup-java@v4
- actions/cache@v3 -> actions/cache@v4
Bug fix
- Fixed a bug in mutationEdgeDestination.
- When changing the destination of an edge, if the new destination was an action, an index i between 0 and nbAction was sampled, but the new destination was the team of index i instead of the action of index i.
v1.3.1 Donanatella flavor with extra sprinkles
Release version 1.3.1 - Donanatella flavor with extra sprinkles
2023.12.14
Changes
- Add possibility to build gegelati without the documentation, using the
-DSKIP_DOXYGEN_BUILD=ON
option during CMake configuration.
Bug fix
- Build MinGW Release zip with Codegen module
v1.3.0 - Donanatella flavor
Release version 1.3.0 - Donanatella flavor
2023.12.13
New features
- Add a
Log::CycleDetectionLALogger
for detecting directed cycles in TPG graphs. Using this logger, the detection is automatically at each generation right after populating the TPG with new vertices. In case a cycle is detected, a message is printed instd::cerr
. - Make GEGELATI compatible with MinGW on windows. Adds a dedicated job in Github action. Package a pre-built library
gegelati-mingw-<version>.zip
for future releases.
Changes
- Remove support for cycles in trained TPG graphs. This change alters the deterministic outputs of trainings. As explained in Issue #106, the genetic mutation of the graph, as described by Stephen Kelly in his PhD manuscript will never introduce any cycle in the trained TPG. As a consequence, parts of the code have been simplified:
- Mutations: It is no longer mandatory to have an action referenced in each team of the TPG.
- TPG Execution (in gegelati and in generated code): When executing outgoing edges of a team, providing a mechanism to exclude already visited edges is not needed.
- Add the attribute "bestScoreLastGen" to the learning agent that records the best score achieved in each generation. This score can be obtained using the "getBestScoreLastGen" method.
- Update the generated CMake support for
find_package(GEGELATI)
. Make theGEGELATI_INCLUDE_DIRS
andGEGELATI_LIBRARIES
visible in the CMakeGui and in the whole CMake scope in case subdirectory are used. - Rename Visual Studio pre-built library
gegelati-msvc-<version>.zip
to differentiate from the new MinGWgegelati-mingw-<version>.zip
version.
Bug fix
- Fix build issue with MSVC19.
#include <ctime>
needed in timestamp.cpp. - Fix silly installation timeout for CI on Windows.
v1.2.0 - Cantutuccini flavor
Release version 1.2.0 - Cantutuccini flavor
2022.08.31
New features
- Add
Data::PointerWrapper
class to simplify interactions between GEGELATI and primitive variables (non-array) data from a learning environment. - Add
TPG::ExecutionsStats
class to analyze and export execution statistics gathered using an instrumented TPGGraph. Statistics include averages on numbers of evaluated teams, programs, program lines and instructions, execution traces and various distributions based on execution traces. The class also provides a method to export these statistics to a JSon file, which can be used by other programs and scripts. - Add a
File::TPGDotExporter::printSubgraph()
method to print only a subgraph from a TPG, starting from a specifiedTPGVertex
. This method can notably be used to export the champion TPG throughout the training process, without having to remove other roots from the TPG. - Add a new
Learn::LearningAgent::evaluateOneRoot()
method to ease the evaluation of individual policies in a trained TPG. - Add a new
Learn::LearningAgent::getEnvironment()
method for convenience.
Changes
- CodeGen TPGs (Switch and Stack modes) now match the execution behaviour of
TPGExecutionEngine
, especially regarding cycle handling. Now, a team can't be visited more than once per inference, and edges leading to an already visited team are not evaluated (their program are not executed). - Change in the
Learn::LearningAgent::makeJob()
that now takes aTPG::TPGVertex*
as an input instead of the index of a root. As a result, the method can now be used to evaluate a TPG from any vertex, including non-roots ones.
Bug fix
- Fix penalty score given to edges in cycle handling in
TPGSwitchGenerationEngine
, wasDBL_MIN
but should be-DBL_MAX
.
v1.1.0 - Babacio flavor
Release version 1.1.0 - Babacio flavor
2022.04.20
New features
- Add instrumented specializations of the
TPGVertex
andTPGEdge
classes that contain internal counters to keep track of the number of time these graph elements are visited or traversed. To exploit these counters, one must create aTPGGraph
using aTPGFactoryInstrumented
, use a new execution engine:TPGExecutionEngineInstrumented
that will update the counters. TheTPGFactoryInstrumented
also contains utility methods to reset all counter in aTPGGraph
with instrumented elements, or remove from aTPGGraph
all the vertices and edges that were never visited or traversed. - A new code generation backend is proposed. Instead of using the stack-based traversal of the TPG graph, this approach is based on a Switch system, achieving slightly faster inference. The
TPGSwitchGenerationEngine
has been made the default code generator, thus replacing theTPGStackGenerationEngine
. - Generated C code and exported Dot files are now time-stamped when generated.
Changes
- Refactor the
LearningAgent
class to access and store the trainedTPGGraph
as a shared pointer. This is needed to ensure that the trainedTPGGraph
can survive to the destruction of its parentLearningAgent
. - Refactor the
TPGGraph
class to:- Use a
TPGFactory
to create the TPGAction, TPGTeam, TPGEdge of a TPGGraph. - Store
TPGEdge
withunique_ptr
to support polymorphic operations on them.
- Use a
- In code generation:
- The
TPGGenerationEngine
becomes a pure virtual class, whose former code is transferred to theTPGStackGenerationEngine
class. - A new factory system, has been developed to switch between the two generation engine:
TPGGenerationEngineFactory
.
- The
Bug fix
- Change google test repo config. Branch name is now
main
instead ofdevelop
. - Fix determinism issue with ARM 64-bit architecture in
Data::Hash
. Determinism still not provided on non 64bit architectures (X86, ARM, or others). - Fix issue with programs returning
NaN
during a TPG execution. Comparison with aNaN
always returns false, which madeNaN
a winning bid for the first edge of a team, and a losing bid for any other edge. During TPG execution, in gegelati and generated code, anyNaN
bid is now replaced with-inf
. This change will change the deterministic results obtained with previous version of the library.
v1.0.0 - Amamaretto flavor
Release version 1.0.0 - Amamaretto version/flavor
2021.10.11
New features
- A code generation feature is added to GEGELATI. The code generation feature enables generating a stand-alone C code implementing the inference behavior of a trained Tangled Program Graph. To enable this feature, PrintableInstruction have been added to GEGELATI. Each PrintableInstruction possess its own print template which defines, with a regex-like syntax, how this instruction should be printed in the generated C code. The code generation feature can be disabled when building the library, by appending the
-DCODE_GEN=OFF
directive to the cmake command.
Changes
- Change the typedef Learn::LearningMode into an enum class to remove compilation warnings in MSVC. Because of this change, members of the enum must now be used with the class name:
TRAINING
>LearningMode::TRAINING
. - Add conditional builds without the code-generation for the continuous integration.
- Fasten the continuous integration on windows build by building the
Release
target only for builds of thedevelop
andmaster
branches. - Migrate CI to Github Actions instead of Travis.
Bug fix
- Fix memory leak when demangling type name in GNU environment.
- Fix dangling pointers warning from MSVC.
- Fix unitialized attributes in various classes.
v0.6.0
Release version 0.6.0
2021.06.02
New features
- Add
ArrayWrapper
andArrayWrapper2D
classes inheriting fromDataHandler
, in theData
namespace. These two classes act as a wrapper between a pointer tostd::vector
of data, and theDataHandler
methods. Contrary toPrimitiveTypeArray
andPrimitiveTypeArray2D
, there is no need to copy all the data into theArrayWrapper
s. Learn::LearningParameters
can now be exported into a commented JSon file using theFile::ParameterParser::writeParametersToJson()
function.- Add an assignment operator
operator=
toPrimitiveTypeArray
andPrimitiveTypeArray2D
. - Add methods to clear introns from Program and TPGGraph.
Changes
- Update
LABasicLogger
to log rewards both on training and validation sets. - Update
PrimitiveTypeArray
andPrimitiveTypeArray2D
to be child classes ofArrayWrapper
andArrayWrapper2D
, respectively.
Bug fix
- Fix travis config for OSX. Build old doxygen from source because
brew install doxygen
no longer works.
v0.5.1
v0.5.0
Release version 0.5.0
2020.10.16
New features
-
Optionally, it is now possible to force a Program to have a new behavior after being mutated.
- New methods were added for testing equality of
Program::Line
andProgram::Program
. Program equality is based on an analysis of non-intron lines of the Program. - Mutation of the Program behavior is enforced by comparing its state before and after being mutated. This comparison can be activated complementary to the legacy archiving mechanism from Kelly's PhD.
- The
tpg.forceProgramBehaviorChangeOnMutation
boolean was added to the MutationParameters.
- New methods were added for testing equality of
-
Optionally, it is now possible to use constants during the training.
- A fixed number of constants can be defined in the parameters. They can be used by instructions designed to use the Data::Constant types.
- Mutations of the program affect the values of the constants. A constant is mutated with a probability and bounds defined as MutationParameters.
Changes
- The Parameter stored within Instructions have been removed entirely. Similar behavior is now supported by newly introduced Data::Constant that belong to Program instead of Instruction.
- During eval, the main thread of ParallelLearningAgent now use the main LearningEnvironment instead of systematically cloning it. It enables sequential mode with non-copyable environment for the AdversarialLearningAgent.
- AdversarialLearningAgent now proceeds evaluations by making each root play against/with champions of the previous generation.
- New Unit Test cover the use of LambdaInstruction with non-primitive data types.
Bug fix
v0.4.0
Release version 0.4.0
2020.07.24
New features
- Fix code for building GEGELATI with clang (v7+) and added a dedicated job with travis-ci.
- Add osx job in travis-ci.
- Add adversarial training support. AdversarialLearningAgent can be declared and used with an AdversarialLearningEnvironment to train random groups of several roots together.
Changes
- Learning Agents now handle jobs instead of simple roots, allowing new concepts like adversarial learning (a job containing several roots that will train together).
- Adding
LearningAgent::forgetPreviousResults()
method to support changing LearningEnvironment where score of previous generation need to be forgotten from time to time. This is usefull when the LearningEnvironment evolves every N generations to teach new skills gradually. - Add support for 2D arrays with.
- New Data::PrimitiveTypeArray2D data handler for providing 2D data sources.
- Support in UntypedSharedPtr for fetching 2D operands for instructions. Due to C++ constraints, 2D arrays must be packaged into 1D dynamically allocated arrays.
- Support for 2D primitive C-style array in LambdaInstructions.
- New LAPolicyStatsLogger that logs the PolicyStats of the LearningAgent::bestRoot each time it is updated.
Changes
- Remove redundant typecheck in
PrimitiveTypeArray::setDataAt()
inNDEBUG
mode. A performance gain of ~25% was observed on the MNIST application (without a thorough profiling method). - tpgGraphDotImporter now has a line MAX_READ_SIZE limit of 4096 (instead of 1024), allowing to read greater tpg dot files.
- Add a caching mechanism in
Data::PrimitiveTypeArray[2D]
to avoid reexecuting thegetAddressSpace()
regular expression more than once for each data type. (This had a huge overhead on execution time.) - Logger
- Refactor the LALogger class (and daughter classes) to keep a reference to the associated LearningAgent at construction time.
- Update formatting of LABasicLogger to produce a more compact log.
- Add mutation time "T_mutat" to LABasicLogger log.
- Rename Logger files to start with a lower-case character.
Bug fix
- Adapt code for building GEGELATI with clang standard library: libc++. (see Issue #49 for mode details)
- Fix implicit template type for std::vector in ClassificationLearningAgentTest.
- Fix call to LALogger when validation is activated. LALoggers were called on training results even when validation was activated.
- Fix missing virtual destructor in the Logger class.