aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java')
-rw-r--r--framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java90
1 files changed, 0 insertions, 90 deletions
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java
deleted file mode 100644
index c5fa9b45..00000000
--- a/framework/src/onos/utils/misc/src/main/java/org/onlab/graph/GAPopulation.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright 2015 Open Networking Laboratory
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.onlab.graph;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-
-/**
- * Represents a population of GAOrganisms. This class can be used
- * to run a genetic algorithm on the population and return the fittest solutions.
- */
-class GAPopulation<Organism extends GAOrganism> extends ArrayList<Organism> {
- Random r = new Random();
-
- /**
- * Steps the population through one generation. The 75% least fit
- * organisms are killed off and replaced with the children of the
- * 25% (as well as some "random" newcomers).
- */
- void step() {
- Collections.sort(this, (org1, org2) -> {
- double d = org1.fitness() - org2.fitness();
- if (d < 0) {
- return -1;
- } else if (d == 0) {
- return 0;
- }
- return 1;
- });
- int maxSize = size();
- for (int i = size() - 1; i > maxSize / 4; i--) {
- remove(i);
- }
- for (Organism org: this) {
- if (r.nextBoolean()) {
- org.mutate();
- }
- }
- while (size() < maxSize * 4 / 5) {
- Organism org1 = get(r.nextInt(size()));
- Organism org2 = get(r.nextInt(size()));
- add((Organism) org1.crossWith(org2));
- }
-
- while (size() < maxSize) {
- Organism org1 = get(r.nextInt(size()));
- add((Organism) org1.random());
- }
- }
-
- /**
- * Runs GA for the specified number of iterations, and returns
- * a sample of the resulting population of solutions.
- *
- * @param generations Number of generations to run GA for
- * @param populationSize Population size of GA
- * @param sample Number of solutions to ask for
- * @param template Template GAOrganism to seed the population with
- * @return ArrayList containing sample number of organisms
- */
- List<Organism> runGA(int generations, int populationSize, int sample, Organism template) {
- for (int i = 0; i < populationSize; i++) {
- add((Organism) template.random());
- }
-
- for (int i = 0; i < generations; i++) {
- step();
- }
- for (int i = size() - 1; i >= sample; i--) {
- remove(i);
- }
- return new ArrayList<>(this);
- }
-}
-