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 main
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
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
......
......@@ -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
......
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}
......
......@@ -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))
}
......@@ -77,15 +78,3 @@ trait InternalConnectionPolicy extends ConnectionPolicy {
def generate(layer : NeuronGroupRef) : 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
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)
......
......@@ -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)
......
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)
......
......@@ -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
......
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)
......
......@@ -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)}
......
......@@ -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
......
......@@ -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)++
......
......@@ -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
}
......
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
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()
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment