Skip to content
Snippets Groups Projects
Commit 8406b312 authored by POLITO Guillermo Andres's avatar POLITO Guillermo Andres
Browse files

Renamed ExternalConnectionPolicy into ConnectionPolicy

parent 1a1992eb
Branches
No related tags found
No related merge requests found
Showing
with 35 additions and 112 deletions
package fr.univ_lille.cristal.emeraude.n2s3.features.builder 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. * Models a connection between two neuron groups.
...@@ -8,7 +8,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connecti ...@@ -8,7 +8,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.{Connecti
* @param to [[NeuronGroupRef]] destination of the connection * @param to [[NeuronGroupRef]] destination of the connection
* @param connectionType the kind of connection used * @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 var deployed = false
def isDeployed = this.deployed def isDeployed = this.deployed
......
...@@ -3,7 +3,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder ...@@ -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.Neuron.SetSynchronizer
import fr.univ_lille.cristal.emeraude.n2s3.core._ 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.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.builder.connection.types.FullConnection
import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape
import fr.univ_lille.cristal.emeraude.n2s3.models.qbg.FixedParameter import fr.univ_lille.cristal.emeraude.n2s3.models.qbg.FixedParameter
...@@ -91,11 +91,11 @@ class NeuronGroupRef(n2s3: N2S3) extends NetworkEntityRef { ...@@ -91,11 +91,11 @@ class NeuronGroupRef(n2s3: N2S3) extends NetworkEntityRef {
this this
} }
def connectToItselfUsing(connectionType: ExternalConnectionPolicy = new FullConnection) : ConnectionRef = { def connectToItselfUsing(connectionType: ConnectionPolicy = new FullConnection) : ConnectionRef = {
this.connectTo(this, connectionType) 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) val ref = new ConnectionRef(this, layer, connectionType)
this.connections += ref this.connections += ref
ref ref
......
package fr.univ_lille.cristal.emeraude.n2s3.features.builder 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.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.io.input.Shape
import fr.univ_lille.cristal.emeraude.n2s3.features.learning.{BackPropagationMethod, DefaultBackPropagationMethod} import fr.univ_lille.cristal.emeraude.n2s3.features.learning.{BackPropagationMethod, DefaultBackPropagationMethod}
......
...@@ -22,7 +22,7 @@ class ConnectionSet(list : Traversable[(NetworkEntityPath, NetworkEntityPath)]) ...@@ -22,7 +22,7 @@ class ConnectionSet(list : Traversable[(NetworkEntityPath, NetworkEntityPath)])
def size = list.size def size = list.size
} }
trait ConnectionPolicy { trait AbstractConnectionPolicy {
var defaultConnectionConstructor : Option[() => NeuronConnection] = None var defaultConnectionConstructor : Option[() => NeuronConnection] = None
...@@ -45,7 +45,7 @@ trait ConnectionPolicy { ...@@ -45,7 +45,7 @@ trait ConnectionPolicy {
} }
} }
trait ExternalConnectionPolicy extends ConnectionPolicy { trait ConnectionPolicy extends AbstractConnectionPolicy {
final def create(from : NeuronGroupRef, to : NeuronGroupRef) : ConnectionSet = { final def create(from : NeuronGroupRef, to : NeuronGroupRef) : ConnectionSet = {
construct(generate(from, to)) construct(generate(from, to))
...@@ -65,7 +65,8 @@ trait ExternalConnectionPolicy extends ConnectionPolicy { ...@@ -65,7 +65,8 @@ trait ExternalConnectionPolicy extends ConnectionPolicy {
def connects(aNeuron: NeuronRef, anotherNeuron: NeuronRef): Boolean 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 = { final def create(layer : NeuronGroupRef) : ConnectionSet = {
construct(generate(layer)) construct(generate(layer))
} }
...@@ -77,15 +78,3 @@ trait InternalConnectionPolicy extends ConnectionPolicy { ...@@ -77,15 +78,3 @@ trait InternalConnectionPolicy extends ConnectionPolicy {
def generate(layer : NeuronGroupRef) : Traversable[Connection] def generate(layer : NeuronGroupRef) : Traversable[Connection]
def generate(layer : NeuronIterable) : Traversable[Connection] def generate(layer : NeuronIterable) : Traversable[Connection]
} }
\ No newline at end of file
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
...@@ -2,7 +2,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types ...@@ -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.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.{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 fr.univ_lille.cristal.emeraude.n2s3.features.builder.convolutional.Filter2D
import scala.collection.mutable import scala.collection.mutable
...@@ -10,7 +10,7 @@ import scala.collection.mutable ...@@ -10,7 +10,7 @@ import scala.collection.mutable
/** /**
* Created by falezp on 23/05/16. * 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] = { def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = {
assert(from.shape.dimensionNumber == 2 && to.shape.dimensionNumber == 3) assert(from.shape.dimensionNumber == 2 && to.shape.dimensionNumber == 3)
......
...@@ -2,12 +2,12 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types ...@@ -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.core.NeuronConnection
import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} 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. * Created by falezp on 23/05/16.
*/ */
class FullConnection(neuronConnectionConstructor : Option[() => NeuronConnection]) extends ExternalConnectionPolicy { class FullConnection(neuronConnectionConstructor : Option[() => NeuronConnection]) extends ConnectionPolicy {
def this(){ def this(){
this(None) this(None)
......
package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types 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.{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. * Created by falezp on 23/05/16.
*/ */
class FullExceptSelfConnection extends ExternalConnectionPolicy { class FullExceptSelfConnection extends ConnectionPolicy {
def generate(from : NeuronIterable, to : NeuronIterable) = { def generate(from : NeuronIterable, to : NeuronIterable) = {
assert(from.size == to.size) assert(from.size == to.size)
......
...@@ -2,12 +2,12 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types ...@@ -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.core.NeuronConnection
import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} 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. * 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) = { def generate(from : NeuronIterable, to : NeuronIterable) = {
throw new UnsupportedOperationException throw new UnsupportedOperationException
......
package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types 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.{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 import fr.univ_lille.cristal.emeraude.n2s3.features.io.input.Shape
/** /**
* Created by falezp on 27/05/16. * 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] = { 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) assert(from.shape.dimensionNumber == to.shape.dimensionNumber && to.shape.dimensions.zip(reduceFactors).map(e => e._1*e._2) == from.shape)
......
...@@ -5,9 +5,9 @@ ...@@ -5,9 +5,9 @@
package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types 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.{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) = { def generate(from : NeuronIterable, to : NeuronIterable) = {
assert(from.size == to.size) assert(from.size == to.size)
from.toSeq.zip(to.toSeq).map{ case (in, out) => Connection(in, out)} from.toSeq.zip(to.toSeq).map{ case (in, out) => Connection(in, out)}
......
...@@ -2,14 +2,14 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types ...@@ -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.core.NeuronConnection
import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} 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 import scala.util.Random
/** /**
* Created by falezp on 07/07/16. * 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) = { def generate(from : NeuronIterable, to : NeuronIterable) = {
for { for {
in <- from in <- from
......
...@@ -2,12 +2,12 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.connection.types ...@@ -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.core.NeuronConnection
import fr.univ_lille.cristal.emeraude.n2s3.features.builder.{NeuronGroupRef, NeuronIterable, NeuronRef} 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. * 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) = { def generate(from : NeuronIterable, to : NeuronIterable) = {
new OneToOneConnection().generate(from, to)++ new OneToOneConnection().generate(from, to)++
......
...@@ -3,7 +3,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.features.builder.convolutional ...@@ -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.core._
import fr.univ_lille.cristal.emeraude.n2s3.features.builder._ 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.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.io.input.Shape
import fr.univ_lille.cristal.emeraude.n2s3.features.learning.{BackPropagationMethod, DefaultBackPropagationMethod} import fr.univ_lille.cristal.emeraude.n2s3.features.learning.{BackPropagationMethod, DefaultBackPropagationMethod}
...@@ -27,8 +27,8 @@ abstract class LayerBuilder extends NetworkBuilder { ...@@ -27,8 +27,8 @@ abstract class LayerBuilder extends NetworkBuilder {
var flatHierarchy = false var flatHierarchy = false
var shape = Shape() var shape = Shape()
var connectionPolicy : Option[ExternalConnectionPolicy] = None var connectionPolicy : Option[ConnectionPolicy] = None
var layerConnectionPolicy : Option[ExternalConnectionPolicy] = None var layerConnectionPolicy : Option[ConnectionPolicy] = None
var layerRootConstructor : () => NetworkContainer = defaultContainerConstructor var layerRootConstructor : () => NetworkContainer = defaultContainerConstructor
val internalConnections = mutable.ArrayBuffer[InternalConnectionPolicy]() val internalConnections = mutable.ArrayBuffer[InternalConnectionPolicy]()
...@@ -106,12 +106,12 @@ abstract class LayerBuilder extends NetworkBuilder { ...@@ -106,12 +106,12 @@ abstract class LayerBuilder extends NetworkBuilder {
this this
} }
def setConnectionPolicy(connectionPolicy : ExternalConnectionPolicy) : this.type = { def setConnectionPolicy(connectionPolicy : ConnectionPolicy) : this.type = {
this.connectionPolicy = Some(connectionPolicy) this.connectionPolicy = Some(connectionPolicy)
this this
} }
protected def setDefaultLayerConnectionPolicy(connectionPolicy : ExternalConnectionPolicy) : this.type = { protected def setDefaultLayerConnectionPolicy(connectionPolicy : ConnectionPolicy) : this.type = {
this.layerConnectionPolicy = Some(connectionPolicy) this.layerConnectionPolicy = Some(connectionPolicy)
this this
} }
......
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)
}
}
...@@ -4,7 +4,7 @@ import fr.univ_lille.cristal.emeraude.n2s3.UnitSpec ...@@ -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.MockNeuron
import fr.univ_lille.cristal.emeraude.n2s3.core.exceptions.N2S3Exception 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._
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.features.io.input._
import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._ import fr.univ_lille.cristal.emeraude.n2s3.support.UnitCast._
import fr.univ_lille.cristal.emeraude.n2s3.support.actors.{ActorPerNeuronGroupPolicy, LocalActorDeploymentStrategy} import fr.univ_lille.cristal.emeraude.n2s3.support.actors.{ActorPerNeuronGroupPolicy, LocalActorDeploymentStrategy}
...@@ -96,7 +96,7 @@ class TestIntegrationN2S3 extends UnitSpec { ...@@ -96,7 +96,7 @@ class TestIntegrationN2S3 extends UnitSpec {
.setNeuronModel(MockNeuron) .setNeuronModel(MockNeuron)
var called = 0 var called = 0
inputLayer.connectTo(rbmLayer, new ExternalConnectionPolicy{ inputLayer.connectTo(rbmLayer, new ConnectionPolicy{
override def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = { override def generate(from: NeuronIterable, to: NeuronIterable): Traversable[Connection] = {
called = called + 1 called = called + 1
List() List()
......
...@@ -3,7 +3,7 @@ package fr.univ_lille.cristal.emeraude.n2s3.apps.bio ...@@ -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.NeuronConnection
import fr.univ_lille.cristal.emeraude.n2s3.core.actors.ShapelessSpike 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.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.builder.{N2S3, NeuronGroupRef, NeuronIterable, NeuronRef}
import fr.univ_lille.cristal.emeraude.n2s3.features.io.input._ import fr.univ_lille.cristal.emeraude.n2s3.features.io.input._
import fr.univ_lille.cristal.emeraude.n2s3.features.learning.SpikeProp import fr.univ_lille.cristal.emeraude.n2s3.features.learning.SpikeProp
...@@ -52,7 +52,7 @@ class XOREntry(val limit : Int) extends N2S3InputStream[InputSeq[N2S3Input]] { ...@@ -52,7 +52,7 @@ class XOREntry(val limit : Int) extends N2S3InputStream[InputSeq[N2S3Input]] {
override def atEnd(): Boolean = cursor >= limit 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) = { def generate(from : NeuronIterable, to : NeuronIterable) = {
for { for {
(in, in_index) <- from.toSeq.zipWithIndex (in, in_index) <- from.toSeq.zipWithIndex
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment