Ejemplo n.º 1
0
    public void MakeBrain()
    {
        var OpCodes = new List <OpCode.IOpCode>
        {
            new OpCode.Type0()
        };
        var Type0SVRule = new SVRule(OpCodes);
        var StateSVRule = new SVRule(new List <OpCode.IOpCode>
        {
            new OpCode.State()
        });
        var          Type0NeuronGene         = new NeuronGene(0, 0, 255, Type0SVRule);
        var          StateNeuronGene         = new NeuronGene(0, 0, 255, StateSVRule);
        var          DendriteDynamics        = new DendriteDynamicsGene(0, 0, 0, StateSVRule, 0, null, 0, null, null, 0);
        DendriteGene DendriteGene            = new DendriteGene(0, BrainLobeType.Drive, DendriteGene.SpreadType.Flat, 0, new Vector2Int(1, 1), new Vector2Int(255, 255), new Vector2Int(255, 255), DendriteDynamics);
        DendriteGene DendriteGeneNoDendrites = new DendriteGene(0, BrainLobeType.Perception, DendriteGene.SpreadType.Flat, 0, new Vector2Int(0, 0), new Vector2Int(1, 1), new Vector2Int(1, 1), DendriteDynamics);
        // Destination lobe
        var LobeGene1 = new LobeGene(BrainLobeID.Perception, new Vector2Int(1, 1), new Vector2Int(1, 1), DendriteGene, DendriteGene, Type0NeuronGene, 0, 0);
        // Source lobe
        var LobeGene2 = new LobeGene(BrainLobeID.Drive, new Vector2Int(1, 1), new Vector2Int(1, 1), DendriteGeneNoDendrites, DendriteGeneNoDendrites, StateNeuronGene, 0, 0);

        Brain      = new Brain();
        DestLobe   = LobeBuilder.BuildFromGene(LobeGene1, 1, 1);
        SourceLobe = LobeBuilder.BuildFromGene(LobeGene2, 1, 1);
        Brain.AddLobe(DestLobe);
        Brain.AddLobe(SourceLobe);

        DestLobe.SetUpDendrites(Brain);
    }
Ejemplo n.º 2
0
 public DendriteGene(int type, BrainLobeType sourceLobeIndex, SpreadType spread, int fanout, Vector2Int dendriteNumber, Vector2Int ltwRange, Vector2Int strengthRange, DendriteDynamicsGene dynamicsGene)
 {
     Type            = type;
     SourceLobeIndex = sourceLobeIndex;
     Spread          = spread;
     Fanout          = fanout;
     DendriteNumber  = dendriteNumber;
     LTWRange        = ltwRange;
     StrengthRange   = strengthRange;
     Dynamics        = dynamicsGene;
 }
Ejemplo n.º 3
0
    public IEnumerator LTWZeroToOne()
    {
        var          LTWGainRate  = 16;
        var          DynamicsGene = new DendriteDynamicsGene(LTWGainRate, 0, 0, null, 0, null, 0, null, null, 0);
        DendriteGene DendriteGene = new DendriteGene(0, 0, DendriteGene.SpreadType.Flat, 0, new Vector2Int(0, 0), new Vector2Int(0, 0), new Vector2Int(1, 1), DynamicsGene);
        TestDendrite Dendrite     = new TestDendrite(0, 0, DendriteGene);

        Dendrite.MockSTW(1);
        // Process assumes it is being called in FixedUpdate
        // i.e. 10 times a second
        foreach (var i in Enumerable.Range(0, 5))
        {
            Dendrite.Process(null, false, false);
        }
        Assert.AreEqual(1, Mathf.RoundToInt(Dendrite.LTW));

        yield return(null);
    }
Ejemplo n.º 4
0
    public IEnumerator GetValue()
    {
        var          DynamicsGene = new DendriteDynamicsGene(1, 0, 0, null, 0, null, 0, null, null, 0);
        DendriteGene DendriteGene = new DendriteGene(0, 0, DendriteGene.SpreadType.Flat, 0, new Vector2Int(0, 0), new Vector2Int(5, 5), new Vector2Int(1, 1), DynamicsGene);
        TestDendrite Dendrite     = new TestDendrite(0, 0, DendriteGene);
        NeuronGene   NeuronGene   = new NeuronGene(0, 0, 0, null);
        Lobe         lobe         = new Lobe(0, null, new Vector2Int(0, 0), new Vector2Int(5, 5), Enumerable.Range(0, 25).Select(n => new Neuron(n, NeuronGene)).ToList(), false, false);

        lobe.FireNeuron(0);
        Dendrite.SetSourceLobe(lobe);
        Dendrite.MockSTW(1);
        var DendriteValue = Dendrite.GetValue();

        Assert.AreEqual(1, DendriteValue);

        Dendrite.MockSTW(255);
        DendriteValue = Dendrite.GetValue();
        Assert.AreEqual(255, DendriteValue);

        yield return(null);
    }
Ejemplo n.º 5
0
    public static List <DendriteGene> Interpret(RawGene gene)
    {
        List <DendriteGene> Genes = new List <DendriteGene>();

        int[] Offsets = { 29, 116 };

        for (int i = 0; i < Offsets.Length; i++)
        {
            var                     Offset                  = Offsets[i];
            BrainLobeType           SourceLobeIndex         = (BrainLobeType)gene[Offset];
            Vector2Int              DendriteRange           = new Vector2Int(gene[Offset + 1], gene[Offset + 2]);
            DendriteGene.SpreadType Spread                  = (DendriteGene.SpreadType)gene[Offset + 3];
            int                     Fanout                  = gene[Offset + 4];
            Vector2Int              LTWRange                = new Vector2Int(gene[Offset + 5], gene[Offset + 6]);
            Vector2Int              StrengthRange           = new Vector2Int(gene[Offset + 7], gene[Offset + 8]);
            int                     LTWGainRate             = gene[Offset + 12];
            int                     STWGainRate             = gene[Offset + 11];
            int                     SusceptibilityRelaxRate = gene[Offset + 10];
            RawGene                 SusceptRule             = new RawGene(gene.GetRange(Offset + 39, 12).ToArray());
            var                     SusceptibilitySVRule    = SVRuleBuilder.Build(SVRuleInterpreter.Interpret(SusceptRule));
            var                     StrengthGain            = gene[Offset + 13];
            RawGene                 StrengthRule            = new RawGene(gene.GetRange(Offset + 14, 12).ToArray());
            var                     StrengthSVRule          = SVRuleBuilder.Build(SVRuleInterpreter.Interpret(StrengthRule));
            var                     StrengthLoss            = gene[Offset + 26];
            StrengthRule = new RawGene(gene.GetRange(Offset + 27, 12).ToArray());
            var StrengthLossSVRule  = SVRuleBuilder.Build(SVRuleInterpreter.Interpret(StrengthRule));
            var ReinforcementRule   = new RawGene(gene.GetRange(Offset + 51, 12).ToArray());
            var ReinforcementSVRule = SVRuleBuilder.Build(SVRuleInterpreter.Interpret(ReinforcementRule));
            var MigrateWhen         = gene[Offset + 9];

            var DendriteDynamics = new DendriteDynamicsGene(LTWGainRate, STWGainRate, SusceptibilityRelaxRate, SusceptibilitySVRule, StrengthGain, StrengthSVRule, StrengthLoss, StrengthLossSVRule, ReinforcementSVRule, MigrateWhen);

            Genes.Add(new DendriteGene(i, SourceLobeIndex, Spread, Fanout, DendriteRange, LTWRange, StrengthRange, DendriteDynamics));
        }

        return(Genes);
    }
Ejemplo n.º 6
0
    private DendriteGene MakeGene(int numDendrites)
    {
        var Dynamics = new DendriteDynamicsGene(1, 0, 0, null, 0, null, 0, null, null, 0);

        return(new DendriteGene(0, 0, DendriteGene.SpreadType.Flat, 0, new Vector2Int(numDendrites, numDendrites), new Vector2Int(0, 0), new Vector2Int(0, 0), Dynamics));
    }