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); }
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; }
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); }
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); }
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); }
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)); }