Skip to content

Commit

Permalink
Refactoring RandomGenerator
Browse files Browse the repository at this point in the history
  • Loading branch information
lmorisse committed Aug 27, 2020
1 parent f85ed3c commit 358cc84
Show file tree
Hide file tree
Showing 14 changed files with 56 additions and 90 deletions.
4 changes: 2 additions & 2 deletions SourceCode/Symu/Classes/Agents/CognitiveAgent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -233,12 +233,12 @@ protected override void InitializeModels()
KnowledgeModel = new KnowledgeModel(AgentId, Environment.Organization.Models.Knowledge, Cognitive,
Environment.WhitePages.MetaNetwork);
BeliefsModel = new BeliefsModel(AgentId, Environment.Organization.Models.Beliefs, Cognitive,
Environment.WhitePages.MetaNetwork);
Environment.WhitePages.MetaNetwork, Environment.Organization.Models.Generator);
LearningModel = new LearningModel(AgentId, Environment.Organization.Models,
Environment.WhitePages.MetaNetwork.Knowledge, Cognitive);
ForgettingModel = new ForgettingModel(KnowledgeModel.Expertise, Cognitive, Environment.Organization.Models);
InfluenceModel = new InfluenceModel(AgentId, Environment.Organization.Models.Influence,
Cognitive, Environment.WhitePages.MetaNetwork, BeliefsModel);
Cognitive, Environment.WhitePages.MetaNetwork, BeliefsModel, Environment.Organization.Models.Generator);
ActivityModel = new ActivityModel(AgentId, Cognitive, Environment.WhitePages.MetaNetwork);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ namespace Symu.Classes.Agents.Models.CognitiveModels
/// <remarks>From Construct Software</remarks>
public class BeliefsModel
{
private readonly RandomGenerator _model;
private readonly AgentId _agentId;
private readonly KnowledgeAndBeliefs _knowledgeAndBeliefs;
private readonly MessageContent _messageContent;
Expand All @@ -47,8 +48,9 @@ public class BeliefsModel
/// <param name="entity"></param>
/// <param name="cognitiveArchitecture"></param>
/// <param name="network"></param>
/// <param name="model"></param>
public BeliefsModel(AgentId agentId, ModelEntity entity, CognitiveArchitecture cognitiveArchitecture,
MetaNetwork network)
MetaNetwork network, RandomGenerator model)
{
if (entity is null)
{
Expand All @@ -70,6 +72,7 @@ public class BeliefsModel
_networkBeliefs = network.Beliefs;
_knowledgeAndBeliefs = cognitiveArchitecture.KnowledgeAndBeliefs;
_messageContent = cognitiveArchitecture.MessageContent;
_model = model;
}

public bool On { get; set; }
Expand Down Expand Up @@ -322,7 +325,7 @@ public void InitializeAgentBelief(AgentBelief agentBelief, bool neutral)
}

var level = neutral ? BeliefLevel.NoBelief : agentBelief.BeliefLevel;
var beliefBits = belief.InitializeBits(_networkBeliefs.Model, level);
var beliefBits = belief.InitializeBits(_model, level);
agentBelief.SetBeliefBits(beliefBits);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#region using directives

using System;
using Symu.Common;
using Symu.Common.Interfaces.Agent;
using Symu.Common.Interfaces.Entity;
using Symu.Common.Math.ProbabilityDistributions;
Expand All @@ -30,6 +31,7 @@ namespace Symu.Classes.Agents.Models.CognitiveModels
/// <remarks>From Construct Software</remarks>
public class InfluenceModel
{
private readonly RandomGenerator _model;
private readonly AgentId _agentId;
private readonly BeliefNetwork _networkBeliefs;
private readonly InfluenceNetwork _networkInfluences;
Expand All @@ -44,8 +46,9 @@ public class InfluenceModel
/// <param name="cognitiveArchitecture"></param>
/// <param name="network"></param>
/// <param name="beliefsModel"></param>
/// <param name="model"></param>
public InfluenceModel(AgentId agentId, ModelEntity entity, CognitiveArchitecture cognitiveArchitecture,
MetaNetwork network, BeliefsModel beliefsModel)
MetaNetwork network, BeliefsModel beliefsModel, RandomGenerator model)
{
if (entity is null)
{
Expand All @@ -72,6 +75,7 @@ public class InfluenceModel
_networkInfluences = network.Influences;
_networkBeliefs = network.Beliefs;
_beliefsModel = beliefsModel;
_model = model;

if (cognitiveArchitecture.InternalCharacteristics.CanInfluenceOrBeInfluence && On)
{
Expand Down Expand Up @@ -149,7 +153,7 @@ public void ReinforcementByDoing(IId beliefId, byte beliefBit, BeliefLevel belie
}
_beliefsModel.LearnNewBelief(beliefId, beliefLevel);
var agentBelief = _beliefsModel.GetAgentBelief(beliefId);
agentBelief.Learn(_networkBeliefs.Model, beliefBit);
agentBelief.Learn(_model, beliefBit);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,10 @@ public void Learn(IId knowledgeId, Bits knowledgeBits, float maxRateLearnable, u
public void Learn(IId knowledgeId, Bits knowledgeBits, float maxRateLearnable, float minimumKnowledge,
short timeToLive, ushort step)
{
if (!IsAgentOn())
{
return;
}
if (knowledgeId == null)
{
throw new ArgumentNullException(nameof(knowledgeId));
Expand Down Expand Up @@ -181,6 +185,10 @@ public void Learn(IId knowledgeId, Bits knowledgeBits, float maxRateLearnable, u
/// <param name="step"></param>
public void Learn(Bits knowledgeBits, float maxRateLearnable, AgentKnowledge agentKnowledge, ushort step)
{
if (!IsAgentOn())
{
return;
}
if (knowledgeBits is null)
{
throw new ArgumentNullException(nameof(knowledgeBits));
Expand Down Expand Up @@ -373,7 +381,7 @@ private static float LearningStandardDeviationValue(GenericLevel level)

/// <summary>
/// OnAfterLearning event is triggered if learning occurs,
/// you can subscribe to this event to treat the new learning
/// Subscribe to this event to treat the new learning
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
Expand Down
8 changes: 5 additions & 3 deletions SourceCode/Symu/Environment/SymuEnvironment.cs
Original file line number Diff line number Diff line change
Expand Up @@ -179,8 +179,8 @@ public virtual void InitializeIteration()
WhitePages.Clear();
WhitePages.MetaNetwork.Knowledge.Model =
Organization.Models.Generator;
WhitePages.MetaNetwork.Beliefs.Model =
Organization.Models.Generator;
//WhitePages.MetaNetwork.Beliefs.Model =
// Organization.Models.Generator;
IterationResult.Initialize();
// Intentionally before AddOrganizationKnowledges
AddOrganizationDatabase();
Expand Down Expand Up @@ -434,9 +434,11 @@ public virtual void AddOrganizationKnowledges()
/// </summary>
public void SetKnowledges()
{
WhitePages.MetaNetwork.Knowledge.AddKnowledges(Organization.Knowledges);
foreach (var knowledge in Organization.Knowledges)
{
WhitePages.MetaNetwork.AddKnowledge(knowledge, Organization.Models.BeliefWeightLevel);
var belief = new Belief(knowledge, knowledge.Length, Organization.Models.Generator, Organization.Models.BeliefWeightLevel);
WhitePages.MetaNetwork.Beliefs.AddBelief(belief);
}
}

Expand Down
31 changes: 0 additions & 31 deletions SourceCode/Symu/Repository/Networks/MetaNetwork.cs
Original file line number Diff line number Diff line change
Expand Up @@ -184,37 +184,6 @@ public void RemoveAgentFromGroup(IAgentId agentId, IAgentId groupId)
Activities.RemoveMember(agentId, groupId);
}

/// <summary>
/// Add a Knowledge to the repository
/// </summary>
/// <param name="knowledge"></param>
/// <param name="beliefWeightLevel"></param>
public void AddKnowledge(Knowledge knowledge, BeliefWeightLevel beliefWeightLevel)
{
if (knowledge == null)
{
throw new ArgumentNullException(nameof(knowledge));
}

Knowledge.AddKnowledge(knowledge);
var belief = new Belief(knowledge, knowledge.Length, Beliefs.Model, beliefWeightLevel);
Beliefs.AddBelief(belief);
}

/// <summary>
/// Add a set of Knowledge to the repository
/// </summary>
public void AddKnowledges(IEnumerable<IKnowledge> knowledgeCollection, BeliefWeightLevel beliefWeightLevel)
{
var knowledges = knowledgeCollection.ToList();
Knowledge.AddKnowledges(knowledges);
foreach (var knowledge in knowledges)
{
var belief = new Belief(knowledge, ((Knowledge)knowledge).Length, Beliefs.Model, beliefWeightLevel);
Beliefs.AddBelief(belief);
}
}

#endregion
}
}
6 changes: 3 additions & 3 deletions SourceCode/SymuTests/Classes/Agents/CognitiveAgentTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,10 +74,10 @@ public void Initialize()
var expertise = new AgentExpertise();
_knowledges.Add(_knowledge);
_environment.WhitePages.MetaNetwork.Knowledge.AddKnowledge(_knowledge);
var belief = new Belief(_knowledge, _knowledge.Length, _environment.WhitePages.MetaNetwork.Beliefs.Model, _environment.Organization.Models.BeliefWeightLevel);
var belief = new Belief(_knowledge, _knowledge.Length, _environment.Organization.Models.Generator, _environment.Organization.Models.BeliefWeightLevel);
_environment.WhitePages.MetaNetwork.Beliefs.AddBelief(belief);
_environment.WhitePages.MetaNetwork.Knowledge.AddKnowledge(_knowledge2);
var belief2 = new Belief(_knowledge2, _knowledge2.Length, _environment.WhitePages.MetaNetwork.Beliefs.Model, _environment.Organization.Models.BeliefWeightLevel);
var belief2 = new Belief(_knowledge2, _knowledge2.Length, _environment.Organization.Models.Generator, _environment.Organization.Models.BeliefWeightLevel);
_environment.WhitePages.MetaNetwork.Beliefs.AddBelief(belief2);
_agentKnowledge = new AgentKnowledge(_knowledge.Id, new float[] {1}, 0, -1, 0);
expertise.Add(_agentKnowledge);
Expand Down Expand Up @@ -1135,7 +1135,7 @@ public void RecoverBlockerBeliefByGuessingTest()
{
_organizationEntity.Murphies.IncompleteBelief.On = true;
_organizationEntity.Murphies.IncompleteBelief.RateOfIncorrectGuess = 1;
_environment.WhitePages.MetaNetwork.Beliefs.Model = RandomGenerator.RandomUniform;
_environment.Organization.Models.Generator = RandomGenerator.RandomUniform;
var task = new SymuTask(0) {Weight = 1};
task.SetKnowledgesBits(_agent.Cognitive.TasksAndPerformance.TaskModel, _knowledges,
MurphyTask.FullRequiredBits);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,10 @@ public void Initialize()
InternalCharacteristics = {CanLearn = true, CanForget = true, CanInfluenceOrBeInfluence = true}
};
var modelEntity = new ModelEntity();
_beliefsModel = new BeliefsModel(_agentId, modelEntity, _cognitiveArchitecture, _network) {On = true};
_beliefsModel = new BeliefsModel(_agentId, modelEntity, _cognitiveArchitecture, _network, models.Generator) {On = true};
_belief = new Belief(1, "1", 1, RandomGenerator.RandomUniform, BeliefWeightLevel.RandomWeight);
_beliefBitsNonNeutral = _belief.InitializeBits(_network.Beliefs.Model, BeliefLevel.NeitherAgreeNorDisagree);
_beliefBitsNeutral = _belief.InitializeBits(_network.Beliefs.Model, BeliefLevel.NoBelief);
_beliefBitsNonNeutral = _belief.InitializeBits(models.Generator, BeliefLevel.NeitherAgreeNorDisagree);
_beliefBitsNeutral = _belief.InitializeBits(models.Generator, BeliefLevel.NoBelief);

_network.Beliefs.AddBelief(_belief);
_agentBelief = new AgentBelief(_belief.Id, BeliefLevel.NeitherAgreeNorDisagree);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,8 +39,8 @@ public class InfluenceModelTests
public void Initialize()
{
_network = new MetaNetwork(_models.InteractionSphere);
_beliefsModel = new BeliefsModel(_agentId, _models.Beliefs, _cognitiveArchitecture, _network);
_influenceModel = new InfluenceModel(_agentId, _models.Influence, _cognitiveArchitecture, _network, _beliefsModel);
_beliefsModel = new BeliefsModel(_agentId, _models.Beliefs, _cognitiveArchitecture, _network, _models.Generator);
_influenceModel = new InfluenceModel(_agentId, _models.Influence, _cognitiveArchitecture, _network, _beliefsModel, _models.Generator);
}

/// <summary>
Expand All @@ -50,8 +50,7 @@ public void Initialize()
public void LearnByDoingTest()
{
_influenceModel.On = false;
_network.Beliefs.Model = RandomGenerator.RandomUniform;
var belief = new Belief(1, "1", 1, _network.Beliefs.Model, BeliefWeightLevel.RandomWeight);
var belief = new Belief(1, "1", 1, RandomGenerator.RandomUniform, BeliefWeightLevel.RandomWeight);
_network.Beliefs.AddBelief(belief);
_influenceModel.ReinforcementByDoing(belief.Id, 0, BeliefLevel.NoBelief);
Assert.IsFalse(_network.Beliefs.Exists(_agentId, belief.Id));
Expand All @@ -65,10 +64,9 @@ public void LearnByDoingTest1()
{
_influenceModel.On = true;
_cognitiveArchitecture.KnowledgeAndBeliefs.HasBelief = true;
_influenceModel = new InfluenceModel(_agentId, _models.Influence, _cognitiveArchitecture, _network, _beliefsModel);
_influenceModel = new InfluenceModel(_agentId, _models.Influence, _cognitiveArchitecture, _network, _beliefsModel, _models.Generator);

_network.Beliefs.Model = RandomGenerator.RandomUniform;
var belief = new Belief(1, "1", 1, _network.Beliefs.Model, BeliefWeightLevel.RandomWeight);
var belief = new Belief(1, "1", 1, RandomGenerator.RandomUniform, BeliefWeightLevel.RandomWeight);
_network.Beliefs.AddBelief(belief);
Assert.IsFalse(_network.Beliefs.Exists(_agentId, belief.Id));
_influenceModel.ReinforcementByDoing(belief.Id, 0, BeliefLevel.NoBelief);
Expand All @@ -85,8 +83,7 @@ public void LearnByDoingTest1()
public void LearnByDoingTest2()
{
_influenceModel.On = true;
_network.Beliefs.Model = RandomGenerator.RandomUniform;
var belief = new Belief(1, "1", 1, _network.Beliefs.Model, BeliefWeightLevel.RandomWeight);
var belief = new Belief(1, "1", 1, RandomGenerator.RandomUniform, BeliefWeightLevel.RandomWeight);
_network.Beliefs.AddBelief(belief);
_influenceModel.ReinforcementByDoing(belief.Id, 0, BeliefLevel.NoBelief);
Assert.IsFalse(_network.Beliefs.Exists(_agentId, belief.Id));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ public void InitializeAgentKnowledgeTest()
public void InitializeExpertiseTest1()
{
_cognitiveArchitecture.KnowledgeAndBeliefs.HasInitialKnowledge = true;
_network.AddKnowledge(_knowledge, BeliefWeightLevel.NoWeight);
_network.Knowledge.AddKnowledge(_knowledge);
var agentKnowledge = new AgentKnowledge(_knowledge.Id, new float[] {0}, 0, -1, 0);
_expertise.Add(agentKnowledge);
_knowledgeModel.AddExpertise(_expertise);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public class MurphyIncompleteBeliefTests
[TestInitialize]
public void Initialize()
{
var models = new OrganizationModels();
var models = new OrganizationModels {Generator = RandomGenerator.RandomUniform};
_network = new MetaNetwork(models.InteractionSphere);
_cognitiveArchitecture = new CognitiveArchitecture
{
Expand All @@ -51,8 +51,8 @@ public void Initialize()
InternalCharacteristics = {CanLearn = true, CanForget = true, CanInfluenceOrBeInfluence = true}
};
var modelEntity = new ModelEntity();
_beliefsModel = new BeliefsModel(_agentId, modelEntity, _cognitiveArchitecture, _network) {On = true};
_belief = new Belief(1, "1", 1, RandomGenerator.RandomUniform, BeliefWeightLevel.RandomWeight);
_beliefsModel = new BeliefsModel(_agentId, modelEntity, _cognitiveArchitecture, _network, models.Generator) {On = true};
_belief = new Belief(1, "1", 1, models.Generator, BeliefWeightLevel.RandomWeight);

_network.Beliefs.AddBelief(_belief);
var agentBelief = new AgentBelief(_belief.Id, BeliefLevel.NeitherAgreeNorDisagree);
Expand Down
30 changes: 5 additions & 25 deletions SourceCode/SymuTests/Repository/Networks/NetworkTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,9 @@ public void ClearTest()
_network.Groups.AddGroup(_teamId);
_network.Roles.Add(_testAgentRole);
_network.Resources.Add(_component);
_network.AddKnowledge(_knowledge, BeliefWeightLevel.NoWeight);
_network.Knowledge.AddKnowledge(_knowledge);
_network.Knowledge.Add(_teammateId, _agentKnowledge);
_network.Beliefs.AddBelief(_belief);
var agentBelief = new AgentBelief(_belief.Id, BeliefLevel.NeitherAgreeNorDisagree);
_network.Beliefs.Add(_teammateId, agentBelief);
_network.Activities.AddActivities(_teammateId, _teamId, new List<IAgentActivity> { new AgentActivity(_teammateId, _activity) });
Expand Down Expand Up @@ -159,8 +160,9 @@ public void RemoveAgentTest()
_network.Groups.AddAgent(_agentGroup1, _teamId);
_network.Roles.Add(_testAgentRole);
_network.Resources.Add(_teammateId, _agentResource);
_network.AddKnowledge(_knowledge, BeliefWeightLevel.NoWeight);
_network.Knowledge.AddKnowledge(_knowledge);
_network.Knowledge.Add(_teammateId, _agentKnowledge);
_network.Beliefs.AddBelief(_belief);
_network.Activities.AddActivities(_teammateId, _teamId, new List<IAgentActivity> {new AgentActivity(_teammateId, _activity)});
_network.RemoveAgent(_teammateId);
//Assert.IsFalse(network.AgentIdExists(teammateId));
Expand All @@ -169,6 +171,7 @@ public void RemoveAgentTest()
Assert.IsFalse(_network.Roles.IsMember(_teammateId, _teamId.ClassId));
Assert.IsFalse(_network.Resources.HasResource(_teammateId, _component.Id, new ResourceUsage(IsWorkingOn)));
Assert.IsFalse(_network.Knowledge.Any());
Assert.IsFalse(_network.Beliefs.Any());
Assert.IsFalse(_network.Activities.AgentHasActivitiesOn(_teammateId, _teamId));
}

Expand All @@ -184,28 +187,5 @@ public void GetMainGroupTest()
_network.AddAgentToGroup(_agentGroup1, _teamId2);
Assert.AreEqual(_teamId, _network.Groups.GetMainGroupOrDefault(_teammateId, _teamId.ClassId));
}

#region Knowledge

[TestMethod]
public void AddKnowledgeTest()
{
var knowledge = new Knowledge(1, "1", 1);
_network.AddKnowledge(knowledge, BeliefWeightLevel.NoWeight);
Assert.IsNotNull(_network.Knowledge.GetKnowledge(knowledge.Id));
Assert.IsNotNull(_network.Beliefs.GetBelief(knowledge.Id));
}

[TestMethod]
public void AddKnowledgesTest()
{
var knowledge = new Knowledge(1, "1", 1);
var knowledges = new List<Knowledge> {knowledge};
_network.AddKnowledges(knowledges, BeliefWeightLevel.NoWeight);
Assert.IsNotNull(_network.Knowledge.GetKnowledge(knowledge.Id));
Assert.IsNotNull(_network.Beliefs.GetBelief(knowledge.Id));
}

#endregion
}
}

0 comments on commit 358cc84

Please sign in to comment.