Releases: flowersteam/autodiscjax
Release v0.4
👉 Corresponds to pypi release 0.4.1
New modules:
CustomGoalAchievementLoss
: allow users to define customloss_f
functions and pass it to the constructor
Updated modules:
L2GoalAchievementLoss
: now inherits from CustomGoalAchievementLossNearestNeighborInterventionSelector
: now has a loss_f method (given in constructor) allowing custom distance functionBaseIM
andIMFlowGoalGenerator
have been updated to also allow customdistance_fn
functionPushPerturbationGenerator
: now the push is sampled on the hyper-rectangle of side magnitude
Updated util functions:
nearest_neighbors
:- Y is now replaced by a vector called
target
- takes a loss_f function as input (allowing custom distance function)
- distance is now computed by vmaping the loss_f function over X
- Y is now replaced by a vector called
is_stable
: now check that the error |y(t)–yfinal| ≤ settling_threshold for all t in time_window (similar to matlab stepinfo function)
API changes:
- in all pipeline,
logs
is now a DictTree that is created and saved in the pipeline, similar to history (removing dependencies to exputils package)
Bug Fixes:
IMFlowGoalGenerator
IM_vals and IM_grads has been reincluded into the logsPiecewiseSetConstantIntervention
: removed hardplus when setting w and cNoisePerturbationGenerator
,PushPerturbationGenerator
,WallPerturbationGenerator
: perturbations are now scaled by trajectories_extent = jnp.nanmax(trajectories[.., 1:], -1) - jnp.nanmin(trajectories[..., 1:], -1) to avoid NaN values, don't take into account the position at t0 when scaling (often big jumps between t0 and t1), and when needed trajectories_extent is set to 1 (to avoid division by zero)
Tests: updated with the new changes
Examples: updated with the new changes
v0.3
AutoDiscJax v0.3
-
New modules:
ClampModule
: new util module to allow clamping of module outputsUniformGoalGenerator
: module to sample goals uniformly between a low and high valueRandomInterventionSelector
: module to randomly select an intervention among history of prior interventionsNullRolloutStatisticsEncoder
: module to allow users to not compute any statistics on the system outputsPushPerturbationGenerator
: new module to generate push perturbation parameters (separated from the NoisePerturbationGenerator)
-
Updated modules:
-
Module
: each autodiscjax module now returns a log_data object -
BaseGenerator
andBaseOptimizer
now inherit from theClampModule
module -
big refacto of optimizers + BaseGCInterventionOptimizer + LearningProgressIM modules to allow save of local optim runs in imgep_experiment_pipeline
-
EAOptimizer
now has a noise scheduler -
GRNRollout
: removed the vmap of grn_step (no needed anymore) -
GRNRolloutStatisticsEncoder
: added the is_converging statistic -
WallPerturbationGenerator
:- takes a
sigma
parameter allowing to tune the perpendicular vs radial repulsive forces exerted by the wall - positions wall based on distance travelled (instead of time travelled)
- takes a
-
NoisePerturbationGenerator
: added possibility to generate noise for w and c parameters -
L2GoalAchievementLoss
: added sqrt (before was squared L2) and adaptive scaling by current reached goal space extent -
NearestNeighborInterventionSelector
: added adaptive scaling by current reached goal space extent
-
-
New util functions:
create_modules.py
: bunch of util functions to instantiate autodiscjax modules from a given configappend_to_log
: util function to append the module's log_data outputs to log
-
Updated util functions:
is_converging
: now looks if the signal amplitude has decreased (when compared to a prior phase of the signal)
-
Bug Fixes:
HypercubeGoalGenerator
: fix hypercube center calculationGRNRolloutStatisticsEncoder
: stats were mixed, fixed
-
API changes:
- big refacto of optimizers + BaseGCInterventionOptimizer + LearningProgressIM modules to allow save of local optim runs in imgep_experiment_pipeline
imgep_experiment_pipeline
:- now saves local optim runs in history
rs_experiment_pipeline
: added random search experiment pipelineimgep_evaluation_pipeline
was renamed intorobustness_evaluation_pipeline
(andrun_imgep_evaluation
intorun_robustness_tests
), and was modified with:- vmap vectorization of modules
- logging
- perturbation generator now takes raw system outputs as input (instead of just ys as this is more general)
-
jit decorators where removed/added to optimize compute time
-
Tests: renamed, updated and novel tests to test the different modules
-
Examples: updated with the new modules/pipeline
-
TODOs for next release:
- docs
- pip package
SGDOptimizer
: deal with NaN valuesIMFlowGoalGenerator
bug fixes:- saving IM_vals into the logs can crash the code
- can return NaN values
AutoDiscJax v0.2
-
New modules:
BaseGoalAchievementLoss
: base module for goal-achievement lossesBaseOptimizer
: base module for optimizersOpenESOptimizer
: sgd optimizer where grad is not the exact value but estimated with ES (Salimans et al., 2017)EAOptimizer
: simple ea optimizerBaseIM
: base module for computing IM values and gradLearningProgressIM
: learning-progress IM variantIMFlowGoalGenerator
: imgep module for sampling new goals by flowing previous goals along IM gradientsBasePerturbationGenerator
: base module for generating perturbations during evaluation (dependent of experiment's system_output_library)NoisePerturbationGenerator
: submodule for generating noise perturbation params, given experiment's grn trajectoriesWallPerturbationGenerator
: submodule for generating wall perturbation params, given experiment's grn trajectoriesPiecewiseWallCollisionIntervention
: grn intervention module to apply walls
-
New util functions in
misc.py
:flat_top_gaussian
sigmoid
calc_segment_intersection
wall_sticky_collision
wall_elastic_collision
calc_perpendicular_wall_distance
calc_radial_wall_distance
wall_force_field_collision
-
Bug Fixes:
- Clamp intervention parameters in optimizers
NearestNeighborInterventionSelector
allow k>1
-
API changes:
BaseGCInterventionOptimizer
: imgep module now allows several optimizer variants (where optimizer is a BaseOptimizer object)- grn interventions
__call__()
function now takesy, y_, w, w_, c, c_, t_
as arguments - GRNRollout output pytree keys are now
ys, ws, cs, ts
instead ofy, w, c, times
imgep_experiment_pipeline
:- goal_generator now takes the
target_goal_embedding_library
as input - saving modules is optional
- goal_generator now takes the
imgep_evaluation_pipeline
:- removed the goal_embedding_encoder module from the pipeline
- perturbation_generator now takes the
experiment_system_output_library
as input - saving modules is optional
-
Tests:
- test_grn_modules
- test_imgep_modules
-
Examples:
- new example python scripts to run imgep experiment and evaluation pipelines with different possible configurations
- new jupyter notebooks to analyze the results