{"id":33179795,"url":"https://github.com/ericmedvet/jgea","last_synced_at":"2026-01-14T02:02:04.385Z","repository":{"id":39705110,"uuid":"117291060","full_name":"ericmedvet/jgea","owner":"ericmedvet","description":"Java General Evolutionary Algorithm (jgea) is a modular Java framework for experimenting with Evolutionary Computation.","archived":false,"fork":false,"pushed_at":"2025-12-20T16:37:18.000Z","size":35618,"stargazers_count":22,"open_issues_count":4,"forks_count":16,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-22T18:39:35.927Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ericmedvet.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-01-12T21:48:09.000Z","updated_at":"2025-12-22T14:33:00.000Z","dependencies_parsed_at":"2023-02-01T07:00:37.640Z","dependency_job_id":"3f6dd077-0d30-4a7f-975e-fda6e60b5626","html_url":"https://github.com/ericmedvet/jgea","commit_stats":null,"previous_names":[],"tags_count":72,"template":false,"template_full_name":null,"purl":"pkg:github/ericmedvet/jgea","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmedvet%2Fjgea","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmedvet%2Fjgea/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmedvet%2Fjgea/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmedvet%2Fjgea/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ericmedvet","download_url":"https://codeload.github.com/ericmedvet/jgea/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ericmedvet%2Fjgea/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28258096,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2026-01-10T02:00:06.867Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-11-16T03:00:36.842Z","updated_at":"2026-01-14T02:02:04.378Z","avatar_url":"https://github.com/ericmedvet.png","language":"Java","funding_links":[],"categories":["人工智能"],"sub_categories":[],"readme":"# JGEA\n\nJava General Evolutionary Algorithm (jgea) is a modular Java framework for experimenting with [Evolutionary Computation](https://en.wikipedia.org/wiki/Evolutionary_computation).\n\nJGEA aims at providing a general interface to potentially *all* evolutionary algorithms (EA).\nTo do so, it provides an interface to problems that can be solved with an EA and components of an EA (e.g., genetic operators, selection criteria, ...).\n\nMoreover, a few EAs are actually implemented in JGEA: Map-Elites, NSGA-II, OpenAI-ES, CMA-ES, Differential Evolution, Graphea, GA, GP, and some variants of Grammar-guided GP. \n\nSeveral research papers have been published in which the experimental evaluation is based on JGEA or its previous version [evolved-ge](https://github.com/ericmedvet/evolved-ge).\nSee a partial [list](#research-papers-based-on-jgea) below.\n\nIf you use JGEA _please cite_ [our paper](https://medvet.inginf.units.it/publications/2022-c-mnm-jgea/):\n\n```\n@inproceedings{medvet2022jgea,\n  title={JGEA: a Modular Java Framework for Experimenting with Evolutionary Computation},\n  author={Medvet, Eric and Nadizar, Giorgia and Manzoni, Luca},\n  booktitle={Proceedings of the genetic and evolutionary computation conference companion},\n  year={2022}\n}\n```\n\n## Usage\n\n### JGEA inside your Java project\n\nAdd (at least) this to your `pom.xml`:\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.ericmedvet\u003c/groupId\u003e\n    \u003cartifactId\u003ejgea.core\u003c/artifactId\u003e\n    \u003cversion\u003e2.8.1\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### Standalone (through the Experimenter)\n\nFirst, get the code:\n```shell\ngit clone https://github.com/ericmedvet/jgea.git\ncd jgea\nmvn clean package\n```\n\nThen run an example experiment\n```shell\njava -jar io.github.ericmedvet.jgea.experimenter/target/jgea.experimenter-2.8.1-jar-with-dependencies.jar -e sr-comparison\n```\n\n## Main components\n\nTypical usage of JGEA consists in trying to solve a **problem** using an **EA**.\n\n### Problem\n\nThe problem is described by a class implementing the `Problem` interface. A problem simply defines the *solution space*, by using a generics `S`, and a way to compare two solutions, by extending the `PartialComparator\u003cS\u003e` interface.\n\n```java\npublic interface Problem\u003cS\u003e extends PartialComparator\u003cS\u003e {}\n```\n\nMost problems actually define also a space for the quality of the solutions and a way to compute the quality given a solution, on the assumption that solutions are compared by comparing the fitness. This kind of problems is described by classes implementing the `QualityBasedProblem` interface.\n\n```java\npublic interface QualityBasedProblem\u003cS, Q\u003e extends Problem\u003cS\u003e {\n  PartialComparator\u003cQ\u003e qualityComparator();\n\n  Function\u003cS, Q\u003e qualityFunction();\n}\n```\n\nHere, `Q` represents the *quality space* (or *fitness space*).\n\nJGEA includes many realization of this abstract definition, i.e., other interfaces that extend `QualityBasedProblem` and implementations (possibly `abstract`) of these interfaces.\n\nFor example, there is a class representing the OneMax problem:\n\n```java\npublic class OneMax implements ComparableQualityBasedProblem\u003cBitString, Double\u003e {\n  /* ... */\n}\n```\n\nwhere the solution space is the one of `BitString`s and the quality space is the one of `Double`s.\n\nThere are other interfaces extending `QualityBasedProblem` that model more specific classes of problems. For example, there is a class representing, in general, a classification problem:\n\n```java\npublic class ClassificationProblem\u003cO, L extends Enum\u003cL\u003e\u003e implements ProblemWithValidation\u003cClassifier\u003cO, L\u003e,\n    List\u003cDouble\u003e\u003e {\n  /* ... */\n}\n```\n\nwhere `O` is the space of observations (or instances, or data points, in supervised learning jargon), `L` is the space of labels (or responses, or outputs), and `Classifier\u003cO, L\u003e` is the space of solutions. Here, the quality space is given by `List\u003cDouble\u003e` because we model the quality of a classifier with potentially more than one indexes (i.e., not necessarily only the accuracy).\n\n### Solver\n\nA problem can be solved by a `Solver`:\n\n```java\npublic interface Solver\u003cP extends Problem\u003cS\u003e, S\u003e {\n  Collection\u003cS\u003e solve(\n      P problem, RandomGenerator random, Executor executor\n  ) throws SolverException;\n}\n```\n\nThe unique ability of a `Solver` is to solve a problem `P`. The return value of `solve()` is a collection of solutions: depending on the solver and on the problem, this collection might be composed of a single solution, i.e., the best solution, or of multiple solutions.\n\nIn general, an implementation of a solver might be able to solve only a subset of the possible problems, i.e., only problems of a given type, here representated by `P`, e.g., `QualityBasedProblem\u003cS, Double\u003e`.\n\nThe `solve()` method takes, besides the problem, a `RandomGenerator` and an `Executor`, because a solver can be, in general, non-deterministic and capable of exploiting concurrency.\n\n- The `RandomGenerator` instance is used for all the random choices, hence allowing for repeatability of the experimentation.\n  **Note**: reproducibility, i.e., obtaining the same results in the same conditions, is not a direct consequence of repeatability if some conditions are not satisfied. JGEA attempts to meet all of these conditions: however, executing an evolutionary run with some parallelism leads in general to not meeting one condition.\n- The `Executor` instance is used for distributing computation (usually, of the fitness of candidate solutions) across different workers of the executor.\n\nMost of the solvers are iterative, i.e., the build solutions based on an iterative process.\n\n```java\npublic interface IterativeSolver\u003cT extends Copyable, P extends Problem\u003cS\u003e, S\u003e extends Solver\u003cP, S\u003e {\n  /* ... */\n  default Collection\u003cS\u003e solve(\n      P problem, RandomGenerator random, Executor executor, Listener\u003c? super T\u003e listener\n  ) throws SolverException {\n    /* ... */\n  }\n}\n```\n\nIntuitively, an `IterativeSolver` evolves a state `T` across iterations starting from an initial value. In the practical case of **evolutionary algorithms** (EAs) the state usually contains also the *population of individuals*. The trajectory of the state during the solution of problems can be monitored by a `Listener`, that has to be passed to `solve()`.\n\n#### Listeners\n\nListeners are a key component of JGEA. Their main use is to monitor the evolution by extracting some information and printing it somewhere. Typical information of interest is, at each iteration of the EA:\n\n- the size of the population\n- the diversity in the population\n- the quality (a `Q`) of the best individual\n- the best individual (a `S`)\n- some function of the best individual\n\nIn the example below, it is shown how to use listener to print on the standard output how this kind of information changes during the evolution. JGEA contains classes for printing on stdout as well as on files, with proper formats.\n\n#### Implemented EAs\n\nJGEA contains a few significative EAs, i.e., classes implementing `IterativeSolver`.\n\nOne, that is at the same time pretty standard and a template that can be realized in many ways depending on the parameters, is `StanderdEvolver`, that corresponds to a *\u0026mu; + \u0026lambda;* (or *\u0026mu;, \u0026lambda;*, depending on the parameter `overlapping`) *generational model* (see [[1]](#references)).\n`StandardEvolver` parameters are set using the only class constructor: names of the parameters indicate the corresponding meaning.\n\n```java\npublic class StandardEvolver\u003cG, S, Q\u003e\n    extends AbstractStandardEvolver\u003c\n    POCPopulationState\u003cIndividual\u003cG, S, Q\u003e, G, S, Q\u003e,\n    QualityBasedProblem\u003cS, Q\u003e,\n    Individual\u003cG, S, Q\u003e,\n    G,\n    S,\n    Q\u003e {\n  public StandardEvolver(\n      Function\u003c? super G, ? extends S\u003e solutionMapper,\n      Factory\u003c? extends G\u003e genotypeFactory,\n      int populationSize,\n      Predicate\u003c? super POCPopulationState\u003cIndividual\u003cG, S, Q\u003e, G, S, Q\u003e\u003e stopCondition,\n      Map\u003cGeneticOperator\u003cG\u003e, Double\u003e operators,\n      Selector\u003c? super Individual\u003cG, S, Q\u003e\u003e parentSelector,\n      Selector\u003c? super Individual\u003cG, S, Q\u003e\u003e unsurvivalSelector,\n      int offspringSize,\n      boolean overlapping,\n      boolean remap) {\n    /* ... */\n  }\n}\n```\n\n`StandardEvolver` automatically exploits parallelism using the `Executor` parameter of `solve()`.\n\n`POCPopulationState` is a state that includes the population, in the form of a partially ordered set ([poset](https://en.wikipedia.org/wiki/Partially_ordered_set)).\n\n```java\npublic interface POCPopulationState\u003cI extends Individual\u003cG, S, Q\u003e, G, S, Q\u003e extends State {\n  long nOfBirths();\n  long nOfFitnessEvaluations();\n  PartiallyOrderedCollection\u003cI\u003e pocPopulation();\n}\n```\n\n`Selector` represents a selection criterion: it is a functional interface with a method `select()` that takes a poset and returns, possibly stochastically, an element.\n\n```java\npublic interface Selector\u003cT\u003e {\n  \u003cK extends T\u003e K select(POCPopulationState\u003cK\u003e ks, RandomGenerator random);\n}\n\n```\n\nJGEA uses `PartialComparator` and `PartiallyOrderedCollection` instead of the standard JDK interfaces `Comparator` and `Collection` because the latter represent a total ordering, whereas there are many cases where the EA does not assume a total ordering among candidate solutions.\n\n## Example\n\nIn this example, JGEA is used for solving the *parity problem* with the standard EA and solution encoded as derivation trees of a provided grammar, that is, with a form of G3P. Here a solution is a `List\u003cTree\u003cElement\u003e\u003e`, because the general form of a bits-to-bits set function is list of trees, each tree encoding a bits-to-bit function.\n\n```java\npublic class Example {\n\n  public static void main(String[] args) {\n    Executor executor =\n            Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() - 1);\n    @SuppressWarnings({\"unchecked\", \"rawtypes\"})\n    ListenerFactory\u003cPOCPopulationState\u003c?, ?, NamedUnivariateRealFunction, Double\u003e, Void\u003e\n            listenerFactory = new TabularPrinter\u003c\u003e(\n            (List) List.of(\n                    nOfIterations(),\n                    elapsedSeconds(),\n                    nOfBirths(),\n                    all().then(size()),\n                    firsts().then(size()),\n                    lasts().then(size()),\n                    all().then(each(genotype())).then(uniqueness()),\n                    all().then(each(solution())).then(uniqueness()),\n                    all().then(each(quality())).then(uniqueness()),\n                    best().then(genotype()).then(size()),\n                    best().then(solution()).then(size()),\n                    best().then(fitnessMappingIteration()),\n                    NamedFunctions.\u003cIndividual\u003cObject, Object, Double\u003e, Object, Object, Double\u003ebest()\n                            .then(quality())\n                            .reformat(\"%5.3f\"),\n                    NamedFunctions.\u003cIndividual\u003cObject, Object, Double\u003e, Object, Object, Double\u003eall()\n                            .then(each(quality()))\n                            .then(hist(8)),\n                    best().then(solution()).reformat(\"%20.20s\")\n            ),\n            List.of()\n    );\n    Random r = new Random(1);\n    SyntheticUnivariateRegressionProblem p = new Nguyen7(UnivariateRegressionFitness.Metric.MSE, 1);\n    List\u003cElement.Variable\u003e variables = p.qualityFunction()\n            .getDataset()\n            .xVarNames()\n            .stream()\n            .map(Element.Variable::new)\n            .toList();\n    List\u003cElement.Constant\u003e constantElements = Stream.of(0.1, 1d, 10d).map(Element.Constant::new)\n            .toList();\n    IndependentFactory\u003cElement\u003e terminalFactory = IndependentFactory.oneOf(\n            IndependentFactory.picker(variables), IndependentFactory.picker(constantElements));\n    IndependentFactory\u003cElement\u003e nonTerminalFactory = IndependentFactory.picker(List.of(\n            Element.Operator.ADDITION,\n            Element.Operator.SUBTRACTION,\n            Element.Operator.MULTIPLICATION,\n            Element.Operator.PROT_DIVISION\n    ));\n    TreeBuilder\u003cElement\u003e treeBuilder = new GrowTreeBuilder\u003c\u003e(x -\u003e 2, nonTerminalFactory,\n            terminalFactory);\n    // operators\n    Map\u003cGeneticOperator\u003cTree\u003cElement\u003e\u003e, Double\u003e geneticOperators = Map.ofEntries(\n            Map.entry(new SubtreeCrossover\u003c\u003e(10), 0.80),\n            Map.entry(new SubtreeMutation\u003c\u003e(10, treeBuilder), 0.20)\n    );\n    StandardEvolver\u003cTree\u003cElement\u003e, NamedUnivariateRealFunction, Double\u003e solver = new StandardEvolver\u003c\u003e(\n            t -\u003e new TreeBasedUnivariateRealFunction(\n                    t,\n                    p.qualityFunction().getDataset().xVarNames(),\n                    p.qualityFunction().getDataset().yVarNames().get(0)\n            ),\n            new RampedHalfAndHalf\u003c\u003e(4, 10, x -\u003e 2, nonTerminalFactory, terminalFactory),\n            100,\n            StopConditions.nOfFitnessEvaluations(10000),\n            geneticOperators,\n            new Tournament(5),\n            new Last(),\n            100,\n            true,\n            false\n    );\n    Collection\u003cNamedUnivariateRealFunction\u003e solutions = solver.solve(p, r, executor,\n            listenerFactory.build(null));\n    System.out.printf(\"Found %d solutions%n\", solutions.size());\n    ((ExecutorService)executor).shutdown();\n  }\n}\n```\n\nMethods inside the constructor of `TabularPrinter` are static methods of the class `NamedFunctions` that return functions that take an evolution `State` and return an object that will be printed as a table cell.\n\n## Research papers based on JGEA\n\nThe list includes paper published from 2018 on.\n\n- Nadizar, Medvet, Nichele, Pontes-Filho; [An Experimental Comparison of Evolved Neural Network Models for Controlling Simulated Modular Soft Robots](https://medvet.inginf.units.it/publications/2023-j-nmnp-experimental/); Applied Soft Computing (ASOC), Q1; 2023\n- Medvet, Nadizar; [GP for Continuous Control: Teacher or Learner? The Case of Simulated Modular Soft Robots](https://medvet.inginf.units.it/publications/2023-c-mn-gp/); XX Genetic Programming Theory \u0026 Practice (GPTP); 2023\n- Nadizar, Medvet, Walker, Risi; [Neural Cellular Automata Enable Self-Discovery of Physical Configuration in Modular Robots Driven by Collective Intelligence](https://medvet.inginf.units.it/publications/2023-c-nmwr-neural/); The Distributed Ghost Workshop (DistributedGhost@Alife); 2023\n- Medvet, Pozzi, Manzoni; [A General Purpose Representation and Adaptive EA for Evolving Graphs](https://medvet.inginf.units.it/publications/2023-c-mpm-general/); ACM Genetic and Evolutionary Computation Conference (GECCO); 2023\n- Nadizar, Medvet, Walker, Risi; [A Fully-distributed Shape-aware Neural Controller for Modular Robots](https://medvet.inginf.units.it/publications/2023-c-nmwr-fully/); ACM Genetic and Evolutionary Computation Conference (GECCO); 2023\n- Pigozzi, Medvet, Bartoli, Rochelli; [Factors Impacting Diversity and Effectiveness of Evolved Modular Robots](https://medvet.inginf.units.it/publications/2023-j-pmbr-factors/); ACM Transactions on Evolutionary Learning and Optimization (TELO); 2023\n- Nadizar, Medvet; [On the Effects of Collaborators Selection and Aggregation in Cooperative Coevolution: an Experimental Analysis](https://medvet.inginf.units.it/publications/2023-c-nm-effects/); 26th European Conference on Genetic Programming (EuroGP); 2023\n- Ferigo, Iacca, Medvet, Pigozzi; [Evolving Hebbian Learning Rules in Voxel-based Soft Robot](https://medvet.inginf.units.it/publications/2022-j-fimp-evolving/); IEEE Transactions on Cognitive and Developmental Systems (TCDS); 2022\n- Medvet, Rusin; [Impact of Morphology Variations on Evolved Neural Controllers for Modular Robots](https://medvet.inginf.units.it/publications/2022-c-mr-impact/); XVI International Workshop on Artificial Life and Evolutionary Computation (WIVACE); 2022\n- Medvet, Nadizar, Manzoni; [JGEA: a Modular Java Framework for Experimenting with Evolutionary Computation](https://medvet.inginf.units.it/publications/2022-c-mnm-jgea/); Workshop Evolutionary Computation Software Systems (EvoSoft@GECCO); 2022\n- Medvet, Nadizar, Pigozzi; [On the Impact of Body Material Properties on Neuroevolution for Embodied Agents: the Case of Voxel-based Soft Robots](https://medvet.inginf.units.it/publications/2022-c-mnp-impact/); Workshop on Neuroevolution at Work (NEWK@GECCO); 2022\n- Ferigo, Soros, Medvet, Iacca; [On the Entanglement between Evolvability and Fitness: an Experimental Study on Voxel-based Soft Robots](https://medvet.inginf.units.it/publications/2022-c-fsmi-entanglement/); Annual Conference on Artificial Life (Alife); 2022\n- Nadizar, Medvet, Nichele, Pontes-Filho; [Collective control of modular soft robots via embodied Spiking Neural Cellular Automata](https://medvet.inginf.units.it/publications/2022-c-nmnp-collective/); Workshop on From Cells to Societies: Collective Learning across Scales (Cells2Societies@ICLR); 2022\n- Pigozzi, Tang, Medvet, Ha; [Evolving Modular Soft Robots without Explicit Inter-Module Communication using Local Self-Attention](https://medvet.inginf.units.it/publications/2022-c-ptmh-evolving/); ACM Genetic and Evolutionary Computation Conference (GECCO); 2022\n- Pigozzi, Medvet; [Evolving Modularity in Soft Robots through an Embodied and Self-Organizing Neural Controller](https://medvet.inginf.units.it/publications/2022-j-pm-evolving/); Artificial Life, Q3; 2022\n- Nadizar, Medvet, Miras; [On the Schedule for Morphological Development of Evolved Modular Soft Robots](https://medvet.inginf.units.it/publications/2022-c-nmm-schedule/); 25th European Conference on Genetic Programming (EuroGP); 2022\n- Indri, Bartoli, Medvet, Nenzi; [One-Shot Learning of Ensembles of Temporal Logic Formulas for Anomaly Detection in Cyber-Physical Systems](https://medvet.inginf.units.it/publications/2022-c-ibmn-one/); 25th European Conference on Genetic Programming (EuroGP); 2022\n- Ferigo, Iacca, Medvet, Pigozzi; [Evolving Hebbian Learning Rules in Voxel-based Soft Robots](https://medvet.inginf.units.it/publications/2021-p-fimp-evolving/); IEEE TechRxiv; 2021\n- Ferigo, Medvet, Iacca; [Optimizing the Sensory Apparatus of Voxel-based Soft Robots through Evolution and Babbling](https://medvet.inginf.units.it/publications/2021-j-fmi-optimizing/); Springer Nature Computer Science; 2021\n- Nadizar, Medvet, Nichele, Huse Ramstad, Pellegrino, Zullich; [Merging Pruning and Neuroevolution: towards Robust and Efficient Controllers for Modular Soft Robots](https://medvet.inginf.units.it/publications/2021-j-nmnhpz-merging/); Knowledge Engineering Review (KER); 2021\n- Pigozzi, Medvet, Nenzi; [Mining Road Traffic Rules with Signal Temporal Logic and Grammar-based Genetic Programming](https://medvet.inginf.units.it/publications/2021-j-pmn-mining/); Applied Sciences; 2021\n- Nadizar, Medvet, Pellegrino, Zullich, Nichele; [On the Effects of Pruning on Evolved Neural Controllers for Soft Robots](https://medvet.inginf.units.it/publications/2021-c-nmpzn-effects/); Workshop on Neuroevolution at Work (NEWK@GECCO); 2021\n- Talamini, Medvet, Nichele; [Criticality-driven Evolution of Adaptable Morphologies of Voxel-Based Soft-Robots](https://medvet.inginf.units.it/publications/2021-j-tmn-criticality/); Frontiers in Robotics and AI; 2021\n- Medvet, Bartoli, Pigozzi, Rochelli; [Biodiversity in Evolved Voxel-based Soft Robots](https://medvet.inginf.units.it/publications/2021-c-mbpr-biodiversity/); ACM Genetic and Evolutionary Computation Conference (GECCO); 2021\n- Ferigo, Iacca, Medvet, [Beyond Body Shape and Brain: Evolving the Sensory Apparatus of Voxel-based Soft Robots](https://medvet.inginf.units.it/publications/2021-c-fim-beyond/); 24th European Conference on the Applications of Evolutionary Computation (EvoAPPS); 2021\n- Medvet, Bartoli; [Evolutionary Optimization of Graphs with GraphEA](https://medvet.inginf.units.it/publications/2020-c-mb-evolutionary/); 19th International Conference of the Italian Association for Artificial Intelligence (AIxIA); 2020\n- Medvet, Bartoli, [GraphEA: a Versatile Representation and Evolutionary Algorithm for Graphs](https://medvet.inginf.units.it/publications/2020-c-mb-graphea/), Workshop on Evolutionary and Population-based Optimization (WEPO@AIxIA), 2020\n- Medvet, Bartoli, De Lorenzo, Seriani, [Design, Validation, and Case Studies of 2D-VSR-Sim, an Optimization-friendly Simulator of 2-D Voxel-based Soft Robots](https://medvet.inginf.units.it/publications/2020-p-mbds-design/), arXiv, 2020\n- Medvet, Seriani, Bartoli, Gallina, [Evolutionary Optimization of Sliding Contact Positions in Powered Floor Systems for Mobile Robots](https://medvet.inginf.units.it/publications/2020-j-msbg-evolutionary/), at - Automatisierungstechnik, 2020\n- Medvet, Bartoli, De Lorenzo, Fidel, [Evolution of Distributed Neural Controllers for Voxel-based Soft Robots](https://medvet.inginf.units.it/publications/2020-c-mbdf-evolution/), ACM Genetic and Evolutionary Computation Conference (GECCO), 2020, Cancun (Mexico)\n- Bartoli, De Lorenzo, Medvet, Squillero, [Multi-level Diversity Promotion Strategies for Grammar-guided Genetic Programming](https://medvet.inginf.units.it/publications/2019-j-bdms-multi/), Applied Soft Computing, 2019\n- Medvet, Seriani, Bartoli, Gallina, [Design of Powered Floor Systems for Mobile Robots with Differential Evolution](https://medvet.inginf.units.it/publications/2019-c-msbg-design/), 22nd European Conference on the Applications of Evolutionary Computation (EvoApplication), 2019, Leipzig (Germany)\n- Bartoli, Castelli, Medvet, [Weighted Hierarchical Grammatical Evolution](https://medvet.inginf.units.it/publications/2018-j-bcm-weighted/), IEEE Transactions on Cybernetics, 2018\n- Medvet, Virgolin, Castelli, Bosman, Gonçalves, Tušar, [Unveiling Evolutionary Algorithm Representation with DU Maps](https://medvet.inginf.units.it/publications/2018-j-mvcbgt-unveiling/), Genetic Programming and Evolvable Machines, 2018\n- Medvet, Bartoli, De Lorenzo, Tarlao, [Designing Automatically a Representation for Grammatical Evolution](https://medvet.inginf.units.it/publications/2018-j-mbdt-designing/), Genetic Programming and Evolvable Machines, 2018\n- Medvet, Bartoli, De Lorenzo, Tarlao, [GOMGE: Gene-pool Optimal Mixing on Grammatical Evolution](https://medvet.inginf.units.it/publications/2018-c-mbdt-gomge/), 15th International Conference on Parallel Problem Solving from Nature (PPSN), 2018, Coimbra (Portugal)\n- Medvet, Bartoli, De Lorenzo, [Exploring the Application of GOMEA to Bit-string GE](https://medvet.inginf.units.it/publications/2018-c-mbd-exploring/), ACM Genetic and Evolutionary Computation Conference (GECCO), 2018, Kyoto (Japan)\n- Medvet, Bartoli, [On the Automatic Design of a Representation for Grammar-based Genetic Programming](https://medvet.inginf.units.it/publications/2018-c-mb-automatic/), 21st European Conference on Genetic Programming (EuroGP), 2018, Parma (Italy)\n- Medvet, Bartoli, Ansuini, Tarlao, [Observing the Population Dynamics in GE by means of the Intrinsic Dimension](https://medvet.inginf.units.it/publications/2018-c-mbat-observing/), Evolutionary Machine Learning workshop at International Conference on Parallel Problem Solving from Nature (EML@PPSN), 2018, Coimbra (Portugal)\n\n## References\n\n1. De Jong, Kenneth. \"Evolutionary computation: a unified approach.\" Proceedings of the 2016 on Genetic and Evolutionary Computation Conference Companion. 2016.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericmedvet%2Fjgea","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fericmedvet%2Fjgea","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fericmedvet%2Fjgea/lists"}