diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/ConnectionRef.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/ConnectionRef.scala index 5000ac944e6fed30faeb6e04d2b25b28126bba5b..e3c724473c6e9a3cd1dd76a1b6a8f0d2db184e0e 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/ConnectionRef.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/ConnectionRef.scala @@ -1,6 +1,6 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{ConnectionSet, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{ConnectionSet, ConnectionPolicy} /** * Models a connection between two neuron groups. @@ -8,7 +8,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connecti * @param to [[NeuronGroupRef]] destination of the connection * @param connectionType the kind of connection used */ -class ConnectionRef(from: NeuronGroupRef, to: NeuronGroupRef, connectionType: ExternalConnectionPolicy) { +class ConnectionRef(from: NeuronGroupRef, to: NeuronGroupRef, connectionType: ConnectionPolicy) { var deployed = false def isDeployed = this.deployed diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala index 47604935000c5fa8081df0dbeffb249fb40e78d3..1e679e5f9d6b278df6236560dc42ecec32ce51fa 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronGroupRef.scala @@ -3,7 +3,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder import fr.univ_lille.cristal.emeraude.n2s3.core.Neuron.SetSynchronizer import fr.univ_lille.cristal.emeraude.n2s3.core._ import fr.univ_lille.cristal.emeraude.n2s3.core.actors.NetworkEntityActor -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.ExternalConnectionPolicy +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.ConnectionPolicy import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types.FullConnection import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape import fr.univ_lille.cristal.emeraude.n2s3.models.qbg.FixedParameter @@ -91,11 +91,11 @@ class NeuronGroupRef(n2s3: N2S3) extends NetworkEntityRef { this } - def connectToItselfUsing(connectionType: ExternalConnectionPolicy = new FullConnection) : ConnectionRef = { + def connectToItselfUsing(connectionType: ConnectionPolicy = new FullConnection) : ConnectionRef = { this.connectTo(this, connectionType) } - def connectTo(layer: NeuronGroupRef, connectionType: ExternalConnectionPolicy = new FullConnection) : ConnectionRef = { + def connectTo(layer: NeuronGroupRef, connectionType: ConnectionPolicy = new FullConnection) : ConnectionRef = { val ref = new ConnectionRef(this, layer, connectionType) this.connections += ref ref diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronLayer.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronLayer.scala index be583efb0b0fbb6601a09c0165683915cb0068e6..d2594311de0b37833a9697e08bcfda1d1b950f27 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronLayer.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/NeuronLayer.scala @@ -1,7 +1,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder import fr.univ_lille.cristal.emeraude.n2s3.core.{NetworkEntityPath, NeuronConnection} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{ConnectionSet, ExternalConnectionPolicy, InternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{ConnectionSet, ConnectionPolicy, InternalConnectionPolicy} import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape import fr.univ_lille.cristal.emeraude.n2s3.features.learning.{BackPropagationMethod, DefaultBackPropagationMethod} diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/ConnectionPolicy.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/AbstractConnectionPolicy.scala similarity index 78% rename from n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/ConnectionPolicy.scala rename to n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/AbstractConnectionPolicy.scala index 434c58f51c7cf3eca04ca1af8153d0838da8d6f3..e6fde115cd8dac787441907950bc8a4fe9a9e1cd 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/ConnectionPolicy.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/AbstractConnectionPolicy.scala @@ -22,7 +22,7 @@ class ConnectionSet(list : Traversable[(NetworkEntityPath, NetworkEntityPath)]) def size = list.size } -trait ConnectionPolicy { +trait AbstractConnectionPolicy { var defaultConnectionConstructor : Option[() => NeuronConnection] = None @@ -45,7 +45,7 @@ trait ConnectionPolicy { } } -trait ExternalConnectionPolicy extends ConnectionPolicy { +trait ConnectionPolicy extends AbstractConnectionPolicy { final def create(from : NeuronGroupRef, to : NeuronGroupRef) : ConnectionSet = { construct(generate(from, to)) @@ -65,7 +65,8 @@ trait ExternalConnectionPolicy extends ConnectionPolicy { def connects(aNeuron: NeuronRef, anotherNeuron: NeuronRef): Boolean } -trait InternalConnectionPolicy extends ConnectionPolicy { +@deprecated("Use [[ExternalConnectionPolicyInstead]]", "4/8/2016") +trait InternalConnectionPolicy extends AbstractConnectionPolicy { final def create(layer : NeuronGroupRef) : ConnectionSet = { construct(generate(layer)) } @@ -76,16 +77,4 @@ trait InternalConnectionPolicy extends ConnectionPolicy { def generate(layer : NeuronGroupRef) : Traversable[Connection] def generate(layer : NeuronIterable) : Traversable[Connection] -} - -object NoConnection extends ExternalConnectionPolicy { - def generate(from : NeuronIterable, to : NeuronIterable) = None - - override def generate(from: NeuronGroupRef, to: NeuronGroupRef): Traversable[Connection] = None - - /******************************************************************************************************************** - * Testing - ******************************************************************************************************************/ - - override def connects(aNeuron: NeuronRef, anotherNeuron: NeuronRef): Boolean = false } \ No newline at end of file diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala index 850e9bc4e77ec2bfe58f9ed2ff7463afdda6fef1..20e99285b6318ea4a3fb024b49144ad7686024e9 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ConvolutionalConnection.scala @@ -2,7 +2,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.core.models.convolutional.SharedNeuronConnection import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} import fr.univ_lille.cristal.emeraude.n2s3.features.builder.convolutional.Filter2D import scala.collection.mutable @@ -10,7 +10,7 @@ import scala.collection.mutable /** * Created by falezp on 23/05/16. */ -class ConvolutionalConnection[A](filters : Traversable[Filter2D], connectionConstructor : A => SharedNeuronConnection[A], sharedObjConstructor : () => A) extends ExternalConnectionPolicy { +class ConvolutionalConnection[A](filters : Traversable[Filter2D], connectionConstructor : A => SharedNeuronConnection[A], sharedObjConstructor : () => A) extends ConnectionPolicy { def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = { assert(from.shape.dimensionNumber == 2 && to.shape.dimensionNumber == 3) diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala index 97dcad50488390d4856debc21a4045ff85d0f54f..45eae4916d1bb11f22e1512e6a9b2dbd5574eb1e 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullConnection.scala @@ -2,12 +2,12 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.core.NeuronConnection import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} /** * Created by falezp on 23/05/16. */ -class FullConnection(neuronConnectionConstructor : Option[() => NeuronConnection]) extends ExternalConnectionPolicy { +class FullConnection(neuronConnectionConstructor : Option[() => NeuronConnection]) extends ConnectionPolicy { def this(){ this(None) diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullExceptSelfConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullExceptSelfConnection.scala index e6acebc66b17a382ea5adda2d78530a6b7182403..97ef7f9b914898a8485289bf30f9497f7245c976 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullExceptSelfConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/FullExceptSelfConnection.scala @@ -1,12 +1,12 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} /** * Created by falezp on 23/05/16. */ -class FullExceptSelfConnection extends ExternalConnectionPolicy { +class FullExceptSelfConnection extends ConnectionPolicy { def generate(from : NeuronIterable, to : NeuronIterable) = { assert(from.size == to.size) diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala index bde2c0b225995eec0fc76ec2fe315014dbddb287..39060307b1a7b18c052dd2853c05d93dd3905d4e 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/ManualConnection.scala @@ -2,12 +2,12 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.core.NeuronConnection import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{InternalConnectionPolicy, Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{InternalConnectionPolicy, Connection, ConnectionPolicy} /** * Created by falezp on 14/10/16. */ -class ManualConnection(connections : Traversable[(Int, Int, Option[NeuronConnection])]) extends ExternalConnectionPolicy { +class ManualConnection(connections : Traversable[(Int, Int, Option[NeuronConnection])]) extends ConnectionPolicy { def generate(from : NeuronIterable, to : NeuronIterable) = { throw new UnsupportedOperationException diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala index 8460715db1a287b09f32817c62dbf4cf550f7784..9b8104045f31b73896be15ffded057439dd6a496 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/MaxPoolingConnection.scala @@ -1,13 +1,13 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape /** * Created by falezp on 27/05/16. */ -class MaxPoolingConnection(reduceFactors : Int*) extends ExternalConnectionPolicy { +class MaxPoolingConnection(reduceFactors : Int*) extends ConnectionPolicy { def generate(from : NeuronIterable, to : NeuronIterable) : Traversable[Connection] = { assert(from.shape.dimensionNumber == to.shape.dimensionNumber && to.shape.dimensions.zip(reduceFactors).map(e => e._1*e._2) == from.shape) diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala index 4d2e7b07925098118f0623011783cfc5e0889968..7fce1516c05f2437b0ffef7a617d89e4dfcda4bc 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/OneToOneConnection.scala @@ -5,9 +5,9 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} -class OneToOneConnection extends ExternalConnectionPolicy { +class OneToOneConnection extends ConnectionPolicy { def generate(from : NeuronIterable, to : NeuronIterable) = { assert(from.size == to.size) from.toSeq.zip(to.toSeq).map{ case (in, out) => Connection(in, out)} diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala index 8c4026a005961d8353a872364e589f16dfc06cf1..695ce76f589f9639220bd210e468c5dbfb293259 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/RandomConnection.scala @@ -2,14 +2,14 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.core.NeuronConnection import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} import scala.util.Random /** * Created by falezp on 07/07/16. */ -class RandomConnection(connectionRate : Float, connectionConstructor : () => NeuronConnection) extends ExternalConnectionPolicy { +class RandomConnection(connectionRate : Float, connectionConstructor : () => NeuronConnection) extends ConnectionPolicy { def generate(from : NeuronIterable, to : NeuronIterable) = { for { in <- from diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala index a1143e9e66214f450b8b9d357906d30ec61f437a..121d7789185810658ae8f7fd11d9bdd32bb5bd72 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/connection/types/WinnerTakeAllConnection.scala @@ -2,12 +2,12 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types import fr.univ_lille.cristal.emeraude.n2s3.core.NeuronConnection import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} /** * Created by falezp on 23/05/16. */ -class WinnerTakeAllConnection(inhibitoryConnection : () => NeuronConnection) extends ExternalConnectionPolicy { +class WinnerTakeAllConnection(inhibitoryConnection : () => NeuronConnection) extends ConnectionPolicy { def generate(from : NeuronIterable, to : NeuronIterable) = { new OneToOneConnection().generate(from, to)++ diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/convolutional/LayerBuilder.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/convolutional/LayerBuilder.scala index a9aa54560558987aac30d0c228729d00a61bc771..762d680b8af56001a7b87a7713b8befe8e6dac5f 100644 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/convolutional/LayerBuilder.scala +++ b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/builder/convolutional/LayerBuilder.scala @@ -3,7 +3,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.convolutional import fr.univ_lille.cristal.emeraude.n2s3.core._ import fr.univ_lille.cristal.emeraude.n2s3.features.builder._ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types.FullConnection -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{ExternalConnectionPolicy, InternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{ConnectionPolicy, InternalConnectionPolicy} import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape import fr.univ_lille.cristal.emeraude.n2s3.features.learning.{BackPropagationMethod, DefaultBackPropagationMethod} @@ -27,8 +27,8 @@ abstract class LayerBuilder extends NetworkBuilder { var flatHierarchy = false var shape = Shape() - var connectionPolicy : Option[ExternalConnectionPolicy] = None - var layerConnectionPolicy : Option[ExternalConnectionPolicy] = None + var connectionPolicy : Option[ConnectionPolicy] = None + var layerConnectionPolicy : Option[ConnectionPolicy] = None var layerRootConstructor : () => NetworkContainer = defaultContainerConstructor val internalConnections = mutable.ArrayBuffer[InternalConnectionPolicy]() @@ -106,12 +106,12 @@ abstract class LayerBuilder extends NetworkBuilder { this } - def setConnectionPolicy(connectionPolicy : ExternalConnectionPolicy) : this.type = { + def setConnectionPolicy(connectionPolicy : ConnectionPolicy) : this.type = { this.connectionPolicy = Some(connectionPolicy) this } - protected def setDefaultLayerConnectionPolicy(connectionPolicy : ExternalConnectionPolicy) : this.type = { + protected def setDefaultLayerConnectionPolicy(connectionPolicy : ConnectionPolicy) : this.type = { this.layerConnectionPolicy = Some(connectionPolicy) this } diff --git a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/combinatorial/GeneticAlgorithm.scala b/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/combinatorial/GeneticAlgorithm.scala deleted file mode 100644 index 3f2efe3ebd71111fd541d83810e014773f3aa332..0000000000000000000000000000000000000000 --- a/n2s3/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/features/combinatorial/GeneticAlgorithm.scala +++ /dev/null @@ -1,66 +0,0 @@ -package fr.univ_lille.cristal.emeraude.n2s3.features.combinatorial - -import scala.annotation.tailrec -import scala.util.Random - -/** - * Created by falezp on 12/04/16. - */ -trait Candidate { - - def evaluate() : Int - -} - -class GeneticAlgorithm[CandidateType <: Candidate](populationSize : Int, generationNumber : Int, crossOverNumber : Int, mutationNumber : Int, - crossOverFunction : (CandidateType, CandidateType) => CandidateType, mutationFunction : CandidateType => CandidateType, maximize : Boolean = true) { - - val unknownScore = -1 - - def execute(initialPopulation : Seq[CandidateType]) : (CandidateType, Int) = { - - val rand = Random - - @tailrec - def innerExecute(population : Map[CandidateType, Int], generation : Int) : (CandidateType, Int) = { - if(generation < generationNumber) { - println("[Genetic Algorithm] Generation " + (generation + 1)) - - val populationCrossOver = scala.collection.mutable.ArrayBuffer[CandidateType]() - for (crossOver <- 0 until crossOverNumber) { - val parentIndex1 = rand.nextInt(population.size) - - val parentIndex2Raw = rand.nextInt(population.size - 1) - val parentIndex2 = if (parentIndex2Raw < parentIndex1) parentIndex2Raw else parentIndex2Raw + 1 - - populationCrossOver += crossOverFunction(population.toList(parentIndex1)._1, population.toList(parentIndex2)._1) - } - - val populationMutation = scala.collection.mutable.ArrayBuffer[CandidateType]() - for (mutation <- 0 until mutationNumber) { - populationMutation += mutationFunction(population.toList(rand.nextInt(population.size))._1) - } - - val populationFinal = population ++ populationCrossOver.map(candidate => (candidate, unknownScore)) ++ populationMutation.map(candidate => (candidate, unknownScore)) - - val sortedPopulation = populationFinal.map { case (candidate, score) => - (candidate, if (score == unknownScore) candidate.evaluate() else score) - }.toSeq.sortBy(_._2) - - println("### Score Generation "+generation+" ###") - sortedPopulation.zipWithIndex.foreach{ case(entry, index) => println("#"+index+" : "+entry._2) } - - val best = if(maximize) sortedPopulation.maxBy(_._2) else sortedPopulation.minBy(_._2) - println("Best Solution : "+best._2) - println(best._1.toString) - - innerExecute(if(maximize) sortedPopulation.reverse.take(populationSize).toMap else sortedPopulation.take(populationSize).toMap, generation+1) - } - else { - if(maximize) population.maxBy(_._2) else population.minBy(_._2) - } - } - innerExecute(Map(initialPopulation.map(candidate => (candidate, unknownScore)):_*), 0) - } - -} diff --git a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala index 90872cb52df9584648045d126ccc6de5c93e865c..5b6020661ee50ad4fdfcb5961c34a75fcf2deb09 100644 --- a/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala +++ b/n2s3/src/test/scala/fr/univ_lille/cristal/emeraude/n2s3/integration/TestIntegrationN2S3.scala @@ -4,7 +4,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.UnitSpec import fr.univ_lille.cristal.emeraude.n2s3.core.MockNeuron import fr.univ_lille.cristal.emeraude.n2s3.core.exceptions.N2S3Exception import fr.univ_lille.cristal.emeraude.n2s3.features.builder._ -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} import fr.univ_lille.cristal.emeraude.n2s3.features.io.input._ import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._ import fr.univ_lille.cristal.emeraude.n2s3.support.actors.{ActorPerNeuronGroupPolicy, LocalActorDeploymentStrategy} @@ -96,7 +96,7 @@ class TestIntegrationN2S3 extends UnitSpec { .setNeuronModel(MockNeuron) var called = 0 - inputLayer.connectTo(rbmLayer, new ExternalConnectionPolicy{ + inputLayer.connectTo(rbmLayer, new ConnectionPolicy{ override def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = { called = called + 1 List() diff --git a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala index 01de0dd680621e4f3d9f75c96b0166ad67508042..0322e05a52caedec89b29bdaa4f02eb89cb63744 100644 --- a/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala +++ b/n2s3_examples/src/main/scala/fr/univ_lille/cristal/emeraude/n2s3/apps/bio/SupervisedXOR.scala @@ -3,7 +3,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.apps.bio import fr.univ_lille.cristal.emeraude.n2s3.core.NeuronConnection import fr.univ_lille.cristal.emeraude.n2s3.core.actors.ShapelessSpike import fr.univ_lille.cristal.emeraude.n2s3.core.models.properties.MembraneThresholdFloat -import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ExternalConnectionPolicy} +import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connection, ConnectionPolicy} import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{N2S3, NeuronGroupRef, NeuronIterable, NeuronRef} import fr.univ_lille.cristal.emeraude.n2s3.features.io.input._ import fr.univ_lille.cristal.emeraude.n2s3.features.learning.SpikeProp @@ -52,7 +52,7 @@ class XOREntry(val limit : Int) extends N2S3InputStream[InputSeq[N2S3Input]] { override def atEnd(): Boolean = cursor >= limit } -class MultipleDelayConnection(delays : Seq[Time], neuronConnectionConstructor : (Int, Int, Time) => NeuronConnection) extends ExternalConnectionPolicy { +class MultipleDelayConnection(delays : Seq[Time], neuronConnectionConstructor : (Int, Int, Time) => NeuronConnection) extends ConnectionPolicy { def generate(from : NeuronIterable, to : NeuronIterable) = { for { (in, in_index) <- from.toSeq.zipWithIndex