Example #1
0
 public void InitializePlaySteps(I_Network network, I_AgentSet agent_set)
 {
     agent_set.InitBelief();
     agent_set.InitOpinion();
     agent_set.InitCounts();
     this.MyPlayOneStep.Initialize();
 }
Example #2
0
        async private void buttonRunLearning_Click(object sender, EventArgs e)
        {
            var        total_rounds = (int)this.numericUpDownAllRounds.Value;
            var        round_steps  = (int)this.numericUpDownAllSteps.Value;
            var        round_seed   = (int)this.numericUpDownLearningSeed.Value;
            I_Network  network      = this.MyOSM.MyNetwork;
            I_Algo     algo         = this.MyOSM.MyAlgo;
            I_AgentSet agent_set    = this.MyOSM.MyAgentSet;

            if (network == null || algo == null || agent_set == null)
            {
                return;
            }

            this.MyOSM.Initialize();

            this.IsLearning = true;
            await Task.Run(() =>
            {
                //var exp = new Exp_NoExperiment(total_rounds, round_steps, round_seed, this.MyOSM);
                //exp.Run();
                this.MyOSM.RunRounds(total_rounds, round_steps, round_seed);
                this.MyMF.MyAnimationForm.UpdatePictureBox();
            });

            this.IsLearning = false;
        }
Example #3
0
        public void RunOneRoundWithoutPlaySteps(I_Network network, I_AgentSet agent_set, int current_round)
        {
            foreach (var agent in agent_set.AgentList)
            {
                if (agent.IsChanged)
                {
                    agent.ChangedRoundList.Add(current_round);
                }
                if (agent.IsReceived)
                {
                    agent.ReceiveRoundList.Add(current_round);
                }
            }

            this.MyOSMLog.RecordOneRound(network, agent_set, current_round);

            this.EstAwaRates.Run(agent_set, this.CandidateSetList, current_round);
            this.SlctWeiStrategies.Run(this.CandidateSetList, agent_set, current_round);
            var weight_list = this.CandidateSetList.Select(can => can.GetCanWeight(can.SelectCanIndex)).ToList();

            agent_set.SetWeightList(weight_list);
            agent_set.InitBelief();
            agent_set.InitOpinion();
            agent_set.InitCounts();
            this.MyPlayOneStep.Initialize();
        }
        public void Run(List <I_CandidateSet> canset_list, I_AgentSet agent_set, int current_round)
        {
            foreach (var canset in canset_list)
            {
                //small -> big
                var SortCanset = canset.SingleCandidateList.OrderBy(can => can.CanWeight).ToList();
                var l          = SortCanset.IndexOf(canset.GetSelectCandidate());
                var h          = SortCanset[l].AwaRate;

                if ((l + 1 < SortCanset.Count) && h < this.TargetAwaRate)
                {
                    l = l + 1;
                }
                else if (l > 1)
                {
                    var h_pre = SortCanset[l - 1].AwaRate;
                    if (h_pre > this.TargetAwaRate)
                    {
                        l = l - 1;
                    }
                }

                var true_index = SortCanset[l].CanIndex;
                canset.SelectCanIndex = true_index;
            }
        }
Example #5
0
        public void Run(I_Network network, I_AgentSet agent_set, bool env_send, InfoEnum correct, InfoEnum incorrect)
        {
            this.SendOpinion.Run(network, agent_set, env_send, correct, incorrect);
            var send_message_queue = this.SendOpinion.SendMessageQueue;

            this.ReceiveOpinion.ReceiveMessageQueue = send_message_queue;
            this.ReceiveOpinion.Run(network, agent_set);
        }
Example #6
0
        public void RunOneRound(I_Network network, I_AgentSet agent_set, int current_round, int round_steps)
        {
            for (int i = 0; i < round_steps; i++)
            {
                this.PlayOneStep(network, agent_set, InfoEnum.Green, InfoEnum.Red);
            }

            this.RunOneRoundWithoutPlaySteps(network, agent_set, current_round);
            return;
        }
Example #7
0
        public void Run(I_Network network, I_AgentSet agent_set, bool env_send, InfoEnum correct, InfoEnum incorrect)
        {
            this.SendMessageQueue = new Queue <I_Message>();

            if (env_send)
            {
                this.SendEnvMessage(network, agent_set, correct, incorrect, this.OpinionIntroductionRate);
            }
            this.SendAgentMessage(network, agent_set);
        }
 public void Run(I_AgentSet agent_set, List <I_CandidateSet> canset_list, int current_round)
 {
     foreach (var agent in agent_set.AgentList)
     {
         var canset = canset_list[agent.NodeID];
         if (!agent.IsReceived)
         {
             continue;
         }
         this.UpdateAveAwaRates(current_round, agent, canset);
     }
 }
Example #9
0
 public void Run(I_AgentSet agent_set, List <I_CandidateSet> canset_list, int current_round)
 {
     foreach (var agent in agent_set.AgentList)
     {
         var canset = canset_list[agent.NodeID];
         int obs_u  = Math.Abs(agent.ReceiveGreenCounts - agent.ReceiveRedCounts);
         if (obs_u == 0)
         {
             continue;
         }
         this.UpdateAveAwaRates(current_round, agent, canset);
     }
 }
Example #10
0
        public List <I_CandidateSet> Generate(I_Network network, I_AgentSet agent_set)
        {
            List <I_CandidateSet> canset_list = new List <I_CandidateSet>();

            I_CandidateSet canset;

            foreach (var node in network.NodeList)
            {
                canset = new SusceptCandidateSet(node, agent_set.AgentList[node.NodeID], this.StepSize);
                canset_list.Add(canset);
            }
            return(canset_list);
        }
Example #11
0
        public SurpriseIndicatorSet(I_Network network, I_AgentSet agent_set)
        {
            this.Value = new List <I_SurpriseIndicator>();
            double init_value = 0.01;

            foreach (var node in network.NodeList)
            {
                foreach (var nei_id in node.NeighborNodeIDList)
                {
                    this.Value.Add(new SurpriseIndicator(node.NodeID, nei_id, init_value));
                }
            }
        }
Example #12
0
        public Exp_NoExperiment(int total_rounds, int round_steps, int round_seed, I_OSM osm)
        {
            this.TotalRounds = total_rounds;
            this.RoundSteps  = round_steps;
            this.RoundSeed   = round_seed;
            this.MyAlgo      = osm.MyAlgo;
            this.MyNetwork   = osm.MyNetwork;
            this.MyAgentSet  = osm.MyAgentSet;
            this.ExpName     = "NoExp";
            var dt = DateTime.Now;

            this.DataName         = dt.ToString("yyyy-MM-dd-HH-mm-ss");
            this.BasePath         = Environment.CurrentDirectory;
            this.OutputFolderPath = this.BasePath + "\\" + OutputLog.BaseLogFolderName + "\\" + this.ExpName + "\\" + this.DataName;
            OutputLog.SafeCreateDirectory(this.OutputFolderPath);
        }
Example #13
0
        /// <summary>
        /// 生成とラウンド開始時に呼び出してagentsetを初期化.
        /// </summary>
        /// <param name="network"></param>
        /// <param name="agent_set"></param>
        public void Initialize(I_Network network, I_AgentSet agent_set)
        {
            agent_set.InitBelief();
            agent_set.InitOpinion();
            agent_set.InitCounts();
            agent_set.InitRoundInfo();
            this.SurpriseIndicatorSet.Initialize();

            this.MyPlayOneStep.Initialize();
            this.CandidateSetList = GeneCanWeights.Generate(network, agent_set);

            this.SurpriseIndicatorSet.SetWeightDicList(this.CandidateSetList, network);
            var wei_dic_list = this.SurpriseIndicatorSet.WeightDic;

            agent_set.SetInitWeightDicList(wei_dic_list);
        }
Example #14
0
        void SendAgentMessage(I_Network network, I_AgentSet agent_set)
        {
            foreach (var agent in agent_set.AgentList)
            {
                if (agent.SendReadyMessageQueue.Count == 0)
                {
                    continue;
                }

                while (agent.SendReadyMessageQueue.Count > 0)
                {
                    var message = agent.SendReadyMessageQueue.Dequeue();
                    this.SendMessageQueue.Enqueue(message);
                }
            }
        }
Example #15
0
        Matrix GetBaseMatrix(I_Network network, I_AgentSet agent_set)
        {
            this.SetAgentViewList(network);
            this.SetEdgeViewList(network, agent_set);

            var CentralX = this.pictureBoxAnimation.ClientSize.Width / 2;
            var CentralY = this.pictureBoxAnimation.ClientSize.Height / 2;

            this.ViewX += CentralX;
            this.ViewY += CentralY;

            var base_matrix = new Matrix();

            base_matrix.Scale(this.ViewScale, this.ViewScale);
            base_matrix.Translate(this.ViewX, this.ViewY);
            return(base_matrix);
        }
Example #16
0
        public void Initialize(I_Network network, I_AgentSet agent_set)
        {
            agent_set.InitBelief();
            agent_set.InitOpinion();
            agent_set.InitCounts();
            agent_set.InitRoundInfo();


            this.MyPlayOneStep.Initialize();

            this.CandidateSetList = GeneCanWeights.Generate(network, agent_set);
            var weight_list = this.CandidateSetList.Select(can => can.GetCanWeight(can.InitSelectCanIndex)).ToList();

            //weight_list = weight_list.Select(w => 0.8).ToList();

            agent_set.SetInitWeightList(weight_list);
        }
Example #17
0
        internal void SetEdgeViewList(I_Network network, I_AgentSet agent_set)
        {
            this.EdgeViewList = new List <EdgeView>();

            foreach (var edge in network.EdgeList)
            {
                Point s_point = new Point((int)this.AgentViewList[edge.SourceNodeID].X, (int)this.AgentViewList[edge.SourceNodeID].Y);
                Point t_point = new Point((int)this.AgentViewList[edge.TargetNodeID].X, (int)this.AgentViewList[edge.TargetNodeID].Y);
                Dictionary <int, double> s_wei_dic = null;
                Dictionary <int, double> t_wei_dic = null;
                if (agent_set != null)
                {
                    s_wei_dic = agent_set.AgentList.First(agent => agent.NodeID == edge.SourceNodeID).WeightDic;
                    t_wei_dic = agent_set.AgentList.First(agent => agent.NodeID == edge.TargetNodeID).WeightDic;
                }
                this.EdgeViewList.Add(new EdgeView(s_point, edge.SourceNodeID, t_point, edge.TargetNodeID, edge.EdgeID, s_wei_dic, t_wei_dic));
            }
        }
Example #18
0
        public void RecordOneRound(I_Network network, I_AgentSet agent_set, int current_round)
        {
            int green_count   = 0;
            int red_count     = 0;
            int undeter_count = 0;

            foreach (var agent in agent_set.AgentList)
            {
                switch (agent.Opinion)
                {
                case InfoEnum.Undeter:
                    undeter_count++;
                    break;

                case InfoEnum.Green:
                    green_count++;
                    break;

                case InfoEnum.Red:
                    red_count++;
                    break;

                default:
                    break;
                }
            }

            double all_count = green_count + red_count + undeter_count;
            var    list      = new List <double>();

            list.Add(green_count / all_count);
            list.Add(red_count / all_count);
            list.Add(undeter_count / all_count);
            this.RoundResults.Rows.Add(current_round, list[0], list[1], list[2]);

            Console.WriteLine($"round: {current_round,3} green: {list[0]:f3}  red: {list[1]:f3} undeter: {list[2]:f3}");

            if (!this.IsRecordingRounds)
            {
                return;
            }

            OutputLog.OutputLogCSV(this.RoundResults, this.OutputRoundFilePath);
        }
Example #19
0
        void SendEnvMessage(I_Network network, I_AgentSet agent_set, InfoEnum correct, InfoEnum incorrect, double op_intro_rate)
        {
            this.OpinionIntroCounts++;
            if (this.OpinionIntroCounts < this.OpinionIntroductionDuration)
            {
                return;
            }

            this.OpinionIntroCounts = 0;
            this.EnvOpinionCounts++;

            var correct_opinion   = correct;
            var incorrect_opinion = incorrect;

            foreach (var agent in agent_set.AgentList)
            {
                if (!(agent.IsSensor))
                {
                    continue;
                }
                if (RandomPool.Get(SeedEnum.PlayStepSeed).NextDouble() > op_intro_rate)
                {
                    continue;
                }

                var env_info = InfoEnum.Undeter;
                if (RandomPool.Get(SeedEnum.PlayStepSeed).NextDouble() < agent.SensorAccuracy)
                {
                    env_info = correct_opinion;
                }
                else
                {
                    env_info = incorrect_opinion;
                }

                this.SendMessageQueue.Enqueue(new Message(-1, agent.NodeID, env_info));
            }
        }
Example #20
0
 public void PlayOneStep(I_Network network, I_AgentSet agent_set, InfoEnum correct, InfoEnum incorrect)
 {
     this.MyPlayOneStep.Run(network, agent_set, true, correct, incorrect);
 }
Example #21
0
 public void InitializeRunRounds(I_Network network, I_AgentSet agent_set)
 {
     this.Initialize(network, agent_set);
 }
Example #22
0
        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);
                    }
                }
            }
        }
        public void Run(List <I_CandidateSet> canset_list, I_AgentSet agent_set, int current_round)
        {
            int node_id = 0;

            foreach (var canset in canset_list)
            {
                //queue
                var agent_queue = this.ChangedQueueList[node_id];

                if (agent_queue.Count >= this.QueueRange)
                {
                    agent_queue.Dequeue();
                    //agent_queue = new Queue<bool>();
                }
                agent_queue.Enqueue(agent_set.AgentList[node_id].IsChanged);

                var changed_count   = agent_queue.Count(q => q == true);
                var unchanged_count = agent_queue.Count(q => q == false);


                //small -> big
                var SortCanset = canset.SingleCandidateList.OrderBy(can => can.CanWeight).ToList();
                var l          = SortCanset.IndexOf(canset.GetSelectCandidate());
                var h          = SortCanset[l].AwaRate;


                if (l + 1 < SortCanset.Count)
                {
                    if (h < this.TargetAwaRate)
                    {
                        if (unchanged_count >= changed_count)
                        {
                            l = l + 1;
                        }
                    }
                }
                else if (l > 1)
                {
                    var h_pre = SortCanset[l - 1].AwaRate;
                    if (h_pre > this.TargetAwaRate)
                    {
                        if (changed_count > unchanged_count)
                        {
                            l = l - 1;
                        }
                    }
                }

                //if (l + 1 < SortCanset.Count)
                //{
                //    if (h < this.TargetAwaRate || unchanged_count >= changed_count)
                //    {

                //        l = l + 1;
                //    }
                //}
                //else if (l > 1)
                //{
                //    var h_pre = SortCanset[l - 1].AwaRate;
                //    if (h_pre > this.TargetAwaRate || changed_count > unchanged_count)
                //    {
                //        l = l - 1;
                //    }
                //}

                var true_index = SortCanset[l].CanIndex;
                canset.SelectCanIndex = true_index;

                node_id++;
            }
        }