Skip to content

Commit

Permalink
Refactoring KnowledgeModel
Browse files Browse the repository at this point in the history
  • Loading branch information
lmorisse committed Aug 19, 2020
1 parent a868f26 commit dd206fd
Show file tree
Hide file tree
Showing 11 changed files with 154 additions and 133 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#region using directives

using System;
using System.Linq;
using Symu.Classes.Organization;
using Symu.Classes.Task;
using Symu.Common;
Expand Down Expand Up @@ -47,7 +48,7 @@ public float PercentageForgetting
{
float percentage = 0;
var sum = CumulativeForgetting;
var sumKnowledge = Expertise.GetKnowledgeSum();
var sumKnowledge = GetKnowledgeSum();
if (sumKnowledge > Tolerance)
{
percentage = 100 * sum / sumKnowledge;
Expand All @@ -56,6 +57,14 @@ public float PercentageForgetting
return percentage;
}
}
/// <summary>
/// Get the sum of all the knowledge
/// </summary>
/// <returns></returns>
public float GetKnowledgeSum()
{
return Expertise.List.Sum(l => l.GetKnowledgeSum());
}

public ForgettingModel(ModelEntity entity, bool knowledgeModelOn, CognitiveArchitecture cognitive,
byte randomLevel) :
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#region using directives

using System;
using System.Linq;
using Symu.Common.Math.ProbabilityDistributions;
using Symu.Messaging.Templates;
using Symu.Repository.Networks;
Expand Down Expand Up @@ -87,7 +88,54 @@ public class KnowledgeModel
/// <summary>
/// Get the Agent Expertise
/// </summary>
public AgentExpertise Expertise { get; }
public AgentExpertise Expertise { get; }

#region Knowledge Analyze

/// <summary>
/// Get the sum of all the knowledge
/// </summary>
/// <returns></returns>
public float GetKnowledgeSum()
{
return Expertise.List.Sum(l => l.GetKnowledgeSum());
}

/// <summary>
/// Get the maximum potential knowledge
/// </summary>
/// <returns></returns>
public float GetKnowledgePotential()
{
return Expertise.List.Sum(l => l.GetKnowledgePotential());
}
/// <summary>
/// Percentage of all Knowledge of the agent for all knowledge during the simulation
/// </summary>
public float PercentageKnowledge
{
get
{
float percentage = 0;
var sum = GetKnowledgeSum();
var potential = GetKnowledgePotential();
if (potential > Tolerance)
{
percentage = 100 * sum / potential;
}

return percentage;
}
}

/// <summary>
/// Average of all the knowledge obsolescence : 1 - LastTouched.Average()/LastStep
/// </summary>
public float Obsolescence(float step)
{
return Expertise.List.Any() ? Expertise.List.Average(t => t.KnowledgeBits.Obsolescence(step)) : 0;
}
#endregion

/// <summary>
/// Initialize the expertise of the agent based on the knowledge network
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#region using directives

using System;
using System.Linq;
using Symu.Classes.Organization;
using Symu.Common;
using Symu.Common.Math.ProbabilityDistributions;
Expand Down Expand Up @@ -45,7 +46,7 @@ public float PercentageLearning
{
float percentage = 0;
var sum = CumulativeLearning;
var potential = Expertise.GetKnowledgePotential();
var potential = GetKnowledgePotential();
if (potential > Tolerance)
{
percentage = 100 * sum / potential;
Expand All @@ -54,6 +55,14 @@ public float PercentageLearning
return percentage;
}
}
/// <summary>
/// Get the maximum potential knowledge
/// </summary>
/// <returns></returns>
public float GetKnowledgePotential()
{
return Expertise.List.Sum(l => l.GetKnowledgePotential());
}

public LearningModel(AgentId agentId, OrganizationModels models, NetworkKnowledges networkKnowledges,
CognitiveArchitecture cognitiveArchitecture)
Expand All @@ -63,6 +72,11 @@ public float PercentageLearning
throw new ArgumentNullException(nameof(models));
}

if (networkKnowledges == null)
{
throw new ArgumentNullException(nameof(networkKnowledges));
}

if (cognitiveArchitecture == null)
{
throw new ArgumentNullException(nameof(cognitiveArchitecture));
Expand All @@ -79,24 +93,26 @@ public float PercentageLearning
// Agent is not concerned by this model
On = false;
}

Expertise = _networkKnowledges.Exists(_id) ? _networkKnowledges.GetAgentExpertise(_id): null;
}

public TasksAndPerformance TasksAndPerformance { get; set; }

private AgentExpertise Expertise
{
get
{
if (!_networkKnowledges.Exists(_id))
{
return null;
}

var expertise = _networkKnowledges.GetAgentExpertise(_id);
expertise.OnAfterLearning += AfterLearning;
return expertise;
}
}
private AgentExpertise Expertise { get; }
//{
// get
// {
// if (!_networkKnowledges.Exists(_id))
// {
// return null;
// }

// var expertise = _networkKnowledges.GetAgentExpertise(_id);
// expertise.OnAfterLearning += AfterLearning;
// return expertise;
// }
//}

/// <summary>
/// EventHandler triggered after learning a new information
Expand Down
3 changes: 2 additions & 1 deletion SourceCode/Symu/Repository/Networks/Databases/Database.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
#region using directives

using System;
using System.Linq;
using Symu.Classes.Agents;
using Symu.Classes.Agents.Models.CognitiveModels;
using Symu.Classes.Organization;
Expand Down Expand Up @@ -146,7 +147,7 @@ public bool SearchKnowledge(ushort knowledgeId, byte knowledgeBit, float minKnow
/// </summary>
public float GetKnowledgesSum()
{
return _database.GetKnowledgeSum();
return _database.List.Sum(l => l.GetKnowledgeSum());
}

/// <summary>
Expand Down
55 changes: 4 additions & 51 deletions SourceCode/Symu/Repository/Networks/Knowledges/AgentExpertise.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
using Symu.Classes.Agents.Models.CognitiveModels;
using static Symu.Common.Constants;

#endregion

Expand All @@ -31,58 +29,13 @@ public class AgentExpertise
/// </summary>
public List<AgentKnowledge> List { get; } = new List<AgentKnowledge>();


/// <summary>
/// Percentage of all Knowledge of the agent for all knowledge during the simulation
/// </summary>
public float PercentageKnowledge
{
get
{
float percentage = 0;
var sum = GetKnowledgeSum();
var potential = GetKnowledgePotential();
if (potential > Tolerance)
{
percentage = 100 * sum / potential;
}

return percentage;
}
}

public int Count => List.Count;

/// <summary>
/// Average of all the knowledge obsolescence : 1 - LastTouched.Average()/LastStep
/// </summary>
public float Obsolescence(float step)
{
return List.Any() ? List.Average(t => t.Obsolescence(step)) : 0;
}

/// <summary>
/// EventHandler triggered after learning a new information
/// </summary>
public event EventHandler<LearningEventArgs> OnAfterLearning;

/// <summary>
/// Get the sum of all the knowledge
/// </summary>
/// <returns></returns>
public float GetKnowledgeSum()
{
return List.Sum(l => l.GetKnowledgeSum());
}
///// <summary>
///// EventHandler triggered after learning a new information
///// </summary>
//public event EventHandler<LearningEventArgs> OnAfterLearning;

/// <summary>
/// Get the maximum potential knowledge
/// </summary>
/// <returns></returns>
public float GetKnowledgePotential()
{
return List.Sum(l => l.GetKnowledgePotential());
}

public bool Any()
{
Expand Down
14 changes: 0 additions & 14 deletions SourceCode/Symu/Repository/Networks/Knowledges/AgentKnowledge.cs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,6 @@

#endregion

#region using directives

using System;

#endregion

namespace Symu.Repository.Networks.Knowledges
{
/// <summary>
Expand Down Expand Up @@ -96,14 +90,6 @@ public AgentKnowledge(ushort idKnowledge, KnowledgeLevel level, float minimumKno

public byte Length => KnowledgeBits?.Length ?? 0;

/// <summary>
/// The knowledge obsolescence : 1 - LastTouched.Average()/LastStep
/// </summary>
public float Obsolescence(float step)
{
return KnowledgeBits.Obsolescence(step);
}

/// <summary>
/// Initialize KnowledgeBits with a array filled of 0
/// </summary>
Expand Down
24 changes: 12 additions & 12 deletions SourceCode/Symu/Results/Organization/KnowledgeAndBeliefResults.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,8 +81,8 @@ public void HandleLearning()
var sum = Environment.WhitePages.AllCognitiveAgents()
.Select(e => e.LearningModel.CumulativeLearning)
.ToList();
var potentialKnowledge = Environment.WhitePages.MetaNetwork.Knowledge.AgentsRepository.Values
.Sum(expertise => expertise.GetKnowledgePotential());
var potentialKnowledge = Environment.WhitePages.AllCognitiveAgents()
.Sum(e => e.KnowledgeModel.GetKnowledgePotential());
var learning = StatisticalResultStruct.SetStruct(Environment.Schedule.Step, sum, potentialKnowledge);
Learning.Add(learning);
}
Expand All @@ -91,28 +91,28 @@ public void HandleForgetting()
{
var sum = Environment.WhitePages.AllCognitiveAgents()
.Select(e => e.ForgettingModel.CumulativeForgetting).ToList();
var sumKnowledge = Environment.WhitePages.MetaNetwork.Knowledge.AgentsRepository.Values
.Sum(expertise => expertise.GetKnowledgeSum());
var sumKnowledge = Environment.WhitePages.AllCognitiveAgents()
.Sum(e => e.KnowledgeModel.GetKnowledgeSum());
var forgetting = StatisticalResultStruct.SetStruct(Environment.Schedule.Step, sum, sumKnowledge);
Forgetting.Add(forgetting);
}

public void HandleKnowledgeObsolescence()
{
var sum = Environment.WhitePages.MetaNetwork.Knowledge.AgentsRepository.Values
.Select(e => e.Obsolescence(Environment.Schedule.Step)).ToList();
var potentialKnowledge = Environment.WhitePages.MetaNetwork.Knowledge.AgentsRepository.Values
.Sum(expertise => expertise.GetKnowledgePotential());
var sum = Environment.WhitePages.AllCognitiveAgents()
.Select(e => e.KnowledgeModel.Obsolescence(Environment.Schedule.Step)).ToList();
var potentialKnowledge = Environment.WhitePages.AllCognitiveAgents()
.Sum(e => e.KnowledgeModel.GetKnowledgePotential());
var obsolescence = StatisticalResultStruct.SetStruct(Environment.Schedule.Step, sum, potentialKnowledge);
KnowledgeObsolescence.Add(obsolescence);
}

public void HandleKnowledge()
{
var sum = Environment.WhitePages.MetaNetwork.Knowledge.AgentsRepository.Values
.Select(expertise => expertise.GetKnowledgeSum()).ToList();
var potential = Environment.WhitePages.MetaNetwork.Knowledge.AgentsRepository.Values
.Sum(expertise => expertise.GetKnowledgePotential());
var sum = Environment.WhitePages.AllCognitiveAgents()
.Select(e=> e.KnowledgeModel.GetKnowledgeSum()).ToList();
var potential = Environment.WhitePages.AllCognitiveAgents()
.Sum(e => e.KnowledgeModel.GetKnowledgePotential());
var knowledge = StatisticalResultStruct.SetStruct(Environment.Schedule.Step, sum, potential);
Knowledge.Add(knowledge);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,6 @@ public void AddTest1()
_network.Add(_agentId, agentExpertise);
agentExpertise = _network.GetAgentExpertise(_agentId);
Assert.IsNotNull(agentExpertise);
Assert.AreEqual(1, agentExpertise.GetKnowledgeSum());
}

[TestMethod]
Expand Down

0 comments on commit dd206fd

Please sign in to comment.