Skip to content

Commit

Permalink
Add new models
Browse files Browse the repository at this point in the history
KnowledgeModel
BeliefsModel
ActivityModel
  • Loading branch information
lmorisse committed May 19, 2020
1 parent c3c1d02 commit f287c5c
Show file tree
Hide file tree
Showing 50 changed files with 1,841 additions and 1,456 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -115,9 +115,10 @@ private void SetKnowledge(Agent actor, IReadOnlyList<Knowledge> knowledges)
{
for (var i = 0; i < KnowledgeCount; i++)
{
actor.Cognitive.KnowledgeAndBeliefs.AddKnowledge(knowledges[i],
actor.KnowledgeModel.AddKnowledge(knowledges[i].Id,
KnowledgeLevel.FullKnowledge,
Organization.Templates.Human.Cognitive.InternalCharacteristics);
actor.BeliefsModel.AddBelief(knowledges[i].Id);

}
}
Expand Down
21 changes: 8 additions & 13 deletions Symu examples/SymuBeliefsAndInfluence/Classes/PersonAgent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
using System.Linq;
using SymuEngine.Classes.Agents;
using SymuEngine.Classes.Agents.Models.Templates;
using SymuEngine.Classes.Blockers;
using SymuEngine.Classes.Task;
using SymuEngine.Environment;
using SymuEngine.Messaging.Messages;
Expand Down Expand Up @@ -49,34 +50,28 @@ public override void GetNewTasks()
}

/// <summary>
/// True if belief are ok to do the task
///
/// </summary>
/// <param name="task"></param>
/// <param name="knowledgeId"></param>
/// <param name="mandatoryScore"></param>
/// <param name="requiredScore"></param>
/// <param name="mandatoryIndex"></param>
/// <param name="requiredIndex"></param>
/// <param name="blocker"></param>
/// <returns></returns>
protected override void CheckBlockerBelief(SymuTask task, ushort knowledgeId, float mandatoryScore, float requiredScore, byte mandatoryIndex, byte requiredIndex)
public override void TryRecoverBlockerIncompleteBelief(SymuTask task, Blocker blocker)
{
if (task is null)
{
throw new ArgumentNullException(nameof(task));
}
base.CheckBlockerBelief(task, knowledgeId, mandatoryScore, requiredScore, mandatoryIndex, requiredIndex);
if (mandatoryScore > -Cognitive.InternalCharacteristics.RiskAversionThreshold)
if (blocker is null)
{
return;
throw new ArgumentNullException(nameof(blocker));
}

// RiskAversionThreshold has been exceeded =>
// Worker don't want to do the task, the task is blocked in base method
// Ask advice from influencers
var attachments = new MessageAttachments
{
KnowledgeId = knowledgeId,
KnowledgeBit = mandatoryIndex
KnowledgeId = (ushort)blocker.Parameter,
KnowledgeBit = (byte)blocker.Parameter2
};
SendToMany(Influencers, MessageAction.Ask, SymuYellowPages.Belief, attachments, CommunicationMediums.Email);
}
Expand Down
118 changes: 89 additions & 29 deletions Symu examples/SymuBeliefsAndInfluence/Home.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

40 changes: 31 additions & 9 deletions Symu examples/SymuBeliefsAndInfluence/Home.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,18 +44,21 @@ private void LoadSettings()

OrganizationEntity.Models.Influence.On = true;
OrganizationEntity.Models.Influence.RateOfAgentsOn = 1;
InfluenceModelOn.Checked = OrganizationEntity.Models.Influence.On;
InfluenceRateOfAgentsOn.Text = OrganizationEntity.Models.Influence.RateOfAgentsOn.ToString();

InfluenceModel.Checked = OrganizationEntity.Models.Influence.On;
RateOfAgentsOn.Text = OrganizationEntity.Models.Influence.RateOfAgentsOn.ToString();

OrganizationEntity.Models.Beliefs.On = true;
OrganizationEntity.Models.Beliefs.RateOfAgentsOn = 1;
BeliefsModelOn.Checked = OrganizationEntity.Models.Beliefs.On;
BeliefsRateOfAgentsOn.Text = OrganizationEntity.Models.Beliefs.RateOfAgentsOn.ToString();

tbWorkers.Text = _environment.WorkersCount.ToString(CultureInfo.InvariantCulture);
tbInfluencers.Text = _environment.InfluencersCount.ToString(CultureInfo.InvariantCulture);
tbKnowledge.Text = _environment.KnowledgeCount.ToString(CultureInfo.InvariantCulture);

HasBeliefs.Checked = OrganizationEntity.Templates.Human.Cognitive.KnowledgeAndBeliefs.HasBelief;



#region Influencer
InfluencerBeliefLevel.Items.AddRange(BeliefLevelService.GetNames());
InfluencerBeliefLevel.SelectedItem = BeliefLevelService.GetName(OrganizationEntity.Templates.Human.Cognitive.KnowledgeAndBeliefs.DefaultBeliefLevel);
Expand Down Expand Up @@ -105,7 +108,8 @@ protected override void OnStopped()
private void Button1_Click(object sender, EventArgs e)
{

OrganizationEntity.Models.Influence.On = InfluenceModel.Checked;
OrganizationEntity.Models.Influence.On = InfluenceModelOn.Checked;
OrganizationEntity.Models.Beliefs.On = BeliefsModelOn.Checked;

#region influencer
_environment.InfluencerTemplate.Cognitive.KnowledgeAndBeliefs.HasBelief = HasBeliefs.Checked;
Expand Down Expand Up @@ -440,16 +444,16 @@ private void RateOfAgentsOn_TextChanged(object sender, EventArgs e)
{
try
{
OrganizationEntity.Models.Influence.RateOfAgentsOn = float.Parse(RateOfAgentsOn.Text);
RateOfAgentsOn.BackColor = SystemColors.Window;
OrganizationEntity.Models.Influence.RateOfAgentsOn = float.Parse(InfluenceRateOfAgentsOn.Text);
InfluenceRateOfAgentsOn.BackColor = SystemColors.Window;
}
catch (FormatException)
{
RateOfAgentsOn.BackColor = Color.Red;
InfluenceRateOfAgentsOn.BackColor = Color.Red;
}
catch (ArgumentOutOfRangeException exception)
{
RateOfAgentsOn.BackColor = Color.Red;
InfluenceRateOfAgentsOn.BackColor = Color.Red;
MessageBox.Show(exception.Message);
}
}
Expand All @@ -471,5 +475,23 @@ private void RiskAversion_TextChanged(object sender, EventArgs e)
MessageBox.Show(exception.Message);
}
}

private void BeliefsRateOfAgentsOn_TextChanged(object sender, EventArgs e)
{
try
{
OrganizationEntity.Models.Beliefs.RateOfAgentsOn = float.Parse(BeliefsRateOfAgentsOn.Text);
BeliefsRateOfAgentsOn.BackColor = SystemColors.Window;
}
catch (FormatException)
{
BeliefsRateOfAgentsOn.BackColor = Color.Red;
}
catch (ArgumentOutOfRangeException exception)
{
BeliefsRateOfAgentsOn.BackColor = Color.Red;
MessageBox.Show(exception.Message);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@ public void Initialize()
{
_organization.Models.Influence.On = true;
_organization.Models.Influence.RateOfAgentsOn = 1;
_organization.Models.Beliefs.On = true;
_organization.Models.Beliefs.RateOfAgentsOn = 1;
_environment.SetOrganization(_organization);
_simulation.SetEnvironment(_environment);
var scenario = new TimeStepScenario(_environment)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,21 +72,21 @@ private void SetKnowledge(Agent actor, IReadOnlyList<Knowledge> knowledges, int
{
case 0:
// same Knowledge for all
actor.Cognitive.KnowledgeAndBeliefs.AddKnowledge(knowledges[0],
actor.KnowledgeModel.AddKnowledge(knowledges[0].Id,
KnowledgeLevel,
Organization.Templates.Human.Cognitive.InternalCharacteristics);

break;
case 1:
// Knowledge is by group
actor.Cognitive.KnowledgeAndBeliefs.AddKnowledge(knowledges[i],
actor.KnowledgeModel.AddKnowledge(knowledges[i].Id,
KnowledgeLevel,
Organization.Templates.Human.Cognitive.InternalCharacteristics);
break;
case 2:
// Knowledge is randomly defined for agentId
var index = DiscreteUniform.Sample(0, GroupsCount - 1);
actor.Cognitive.KnowledgeAndBeliefs.AddKnowledge(knowledges[index],
actor.KnowledgeModel.AddKnowledge(knowledges[index].Id,
KnowledgeLevel,
Organization.Templates.Human.Cognitive.InternalCharacteristics);
break;
Expand Down

0 comments on commit f287c5c

Please sign in to comment.