public SingleCandidate(int can_index, I_Agent agent) { this.CanIndex = can_index; this.CanWeight = OpinionBeliefUpdater.GetWeightForScale(agent.InitBelief, agent.GreenSigma, agent.RedSigma, can_index); this.AwaCounts = 0; this.AwaCurrentRounds = 0; this.BeliefScaleList = new List <double>(); this.BeliefScaleList.Add(agent.InitBelief); var current_belief = agent.InitBelief; while (current_belief < agent.GreenSigma) { current_belief = OpinionBeliefUpdater.UpdateBelief(current_belief, CanWeight, InfoEnum.Green); this.BeliefScaleList.Add(current_belief); } current_belief = agent.InitBelief; while (current_belief > agent.RedSigma) { current_belief = OpinionBeliefUpdater.UpdateBelief(current_belief, CanWeight, InfoEnum.Red); this.BeliefScaleList.Add(current_belief); } }
public void Run(I_Network network, I_AgentSet agent_set) { if (this.ReceiveMessageQueue.Count == 0) { return; } while (this.ReceiveMessageQueue.Count > 0) { var message = this.ReceiveMessageQueue.Dequeue(); var target_agent = agent_set.AgentList.First(agent => agent.NodeID == message.TargetNodeID); var pre_opinion = target_agent.Opinion; var pre_belief = target_agent.Belief; double wei = 0; I_SurpriseIndicator sur_indi = null; if (message.SourceNodeID < 0) { wei = target_agent.SensorAccuracy; } else { sur_indi = this.SurpriseIndicatorSet.Value.Where(indi => indi.SourceNodeID == message.TargetNodeID).First(indi => indi.TargetNodeID == message.SourceNodeID); wei = target_agent.WeightDic.First(dic => dic.Key == message.SourceNodeID).Value; } var message_op = message.MessageOpinion; //belief update if (target_agent.IsSensor) { target_agent.Belief = OpinionBeliefUpdater.UpdateBelief(pre_belief, target_agent.SensorAccuracy, message_op); } else { target_agent.Belief = OpinionBeliefUpdater.UpdateBelief(pre_belief, wei, message_op); } if (message.SourceNodeID >= 0) { sur_indi.InputOpinion(message_op, target_agent.Belief); } if (message_op == InfoEnum.Green) { target_agent.ReceiveGreenCounts++; } if (message_op == InfoEnum.Red) { target_agent.ReceiveRedCounts++; } target_agent.IsReceived = (target_agent.InitBelief != target_agent.Belief) ? true : false; //opinion update target_agent.Opinion = OpinionBeliefUpdater.UpdateOpinion(pre_opinion, target_agent.Belief, target_agent.GreenSigma, target_agent.RedSigma); target_agent.IsChanged = (target_agent.InitOpinion != target_agent.Opinion) ? true : false; var op_change = (pre_opinion != target_agent.Opinion) ? true : false; //send message if (op_change) { var neighbor_id_list = network.NodeList[target_agent.NodeID].NeighborNodeIDList; foreach (var nei_id in neighbor_id_list) { var new_message = new Message(target_agent.NodeID, nei_id, target_agent.Opinion); target_agent.SendReadyMessageQueue.Enqueue(new_message); } } } }