Beispiel #1
0
 public void randomNext()
 {
     double r = RandomPool.Get("fact").NextDouble();
     if(r < 0.5){
         Value = BlackWhiteSubject.White;
     }
     else{
         Value = BlackWhiteSubject.Black;
     }
 }
        //みんなに知らせる。自分の意見はこうですよと。
        protected virtual void NotifyOthers(BlackWhiteSubject?myOpinion = null)
        {
            BlackWhiteSubject opinion = checkOpinion(myOpinion);

            //ご近所さん全員に伝える
            foreach (IAgent neighbour in this.Neighbours)
            {
                SendOpinion(opinion, neighbour);
            }
        }
Beispiel #3
0
        public void randomNext()
        {
            double r = RandomPool.Get("fact").NextDouble();

            if (r < 0.5)
            {
                Value = BlackWhiteSubject.White;
            }
            else
            {
                Value = BlackWhiteSubject.Black;
            }
        }
Beispiel #4
0
 public override void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater)
 {
     //自分の意見と同じ意見が来たら
     if (sub == BlackWhiteSubject.White && Belief >= Sigma ||
         sub == BlackWhiteSubject.Black && Belief <= 1 - Sigma)
     {
         base.UpdateOpinion(sub, new BeliefUpdater( 0.5)); //重要視度0で更新する。
     }
     else
     {
         base.UpdateOpinion(sub, updater);
     }
 }
Beispiel #5
0
 public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
 {
     //自分の意見と同じ意見が来たら
     if (sub == BlackWhiteSubject.White && Belief >= Sigma ||
         sub == BlackWhiteSubject.Black && Belief <= 1 - Sigma)
     {
         base.UpdateOpinion(sub, 0.5); //重要視度0で更新する。
     }
     else
     {
         base.UpdateOpinion(sub, importanceLevel);
     }
 }
Beispiel #6
0
 public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
 {
     //自分の意見と同じ意見が来たら
     if (sub == BlackWhiteSubject.White && Belief >= Sigma ||
         sub == BlackWhiteSubject.Black && Belief <= 1 - Sigma)
     {
         base.UpdateOpinion(sub, 0.5); //重要視度0で更新する。
     }
     else
     {
         base.UpdateOpinion(sub, importanceLevel);
     }
 }
Beispiel #7
0
 public override void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater)
 {
     //自分の意見と同じ意見が来たら
     if (sub == BlackWhiteSubject.White && Belief >= Sigma ||
         sub == BlackWhiteSubject.Black && Belief <= 1 - Sigma)
     {
         base.UpdateOpinion(sub, new BeliefUpdater(0.5));  //重要視度0で更新する。
     }
     else
     {
         base.UpdateOpinion(sub, updater);
     }
 }
Beispiel #8
0
        //みんなに知らせる。自分の意見はこうですよと。
        protected override void NotifyOthers(BlackWhiteSubject? myOpinion = null)
        {
            BlackWhiteSubject opinion = checkOpinion(myOpinion);

            //ご近所さん全員に伝える
            foreach (IAgent neighbour in this.Neighbours)
            if (!messageBox.ReceivedFrom(neighbour) || //ただし、意見をくれたやつにはあげる必要ない。
                messageBox.OpinionOf(neighbour) != this.Opinion )//くれてるやつでも、違う意見もってるやつには投げる。
            {
                SendOpinion(opinion, neighbour);
            }

            messageBox = new DRMessageBox();
        }
Beispiel #9
0
        public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
        {
            BlackWhiteSubject?previousOpinion = Opinion; //値型だからできること?

            base.UpdateOpinion(sub, importanceLevel);

            BlackWhiteSubject?newOpinion = Opinion;

            //意見が変わったら
            if (previousOpinion != newOpinion)
            {
                opinionFormed++;
            }
        }
Beispiel #10
0
 public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
 {
     base.UpdateOpinion(sub, importanceLevel);
     ////Console.WriteLine("AAT: UpdateOpinion()");
     //意見を変える際に、カウント
     if (sub == BlackWhiteSubject.White)
     {
         updatedNum++;
     }
     else //if(sub == BlackWhiteSubject.Black)
     {
         updatedNum--;
     }
 }
Beispiel #11
0
        public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
        {
            BlackWhiteSubject? previousOpinion = Opinion;//値型だからできること?

            base.UpdateOpinion(sub, importanceLevel);

            BlackWhiteSubject? newOpinion = Opinion;

            //意見が変わったら
            if (previousOpinion != newOpinion)
            {
                opinionFormed++ ;
            }
        }
Beispiel #12
0
        protected virtual void NotifyOthers()
        {
            //ご近所さん全員に伝える
            foreach (Agent neighbour in this.Neighbours)
            {
                if (thought.Opinion == null)
                {
                    throw new Exception("こんなことありえない。バグだ");
                }

                BlackWhiteSubject myopinion = thought.Opinion.Value;//nullableを通常に変換

                SendOpinion(myopinion, neighbour);
            }
        }
Beispiel #13
0
        public virtual void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
        {
            double Cupd = decideCupd(sub, importanceLevel);
            double t    = importanceLevel;

            //信念を更新。この結果、意見が変わるかもしれない。
            thought.Belief = updateFunc(thought.Belief, Cupd);


            //状態の変更を通知
            if (agentChanged != null)
            {
                agentChanged(this);
            }
        }
Beispiel #14
0
        public virtual void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater)
        {
            thought.Belief = updater.updateBelief(sub, thought.Belief);


            //意見を変える際に、カウント
            if (sub == BlackWhiteSubject.White)
            {
                counter.CountUp();
            }
            else //if(sub == BlackWhiteSubject.Black)
            {
                counter.CountDown();
            }
        }
Beispiel #15
0
        //みんなに知らせる。自分の意見はこうですよと。
        protected override void NotifyOthers(BlackWhiteSubject?myOpinion = null)
        {
            BlackWhiteSubject opinion = checkOpinion(myOpinion);

            //ご近所さん全員に伝える
            foreach (IAgent neighbour in this.Neighbours)
            {
                if (!messageBox.ReceivedFrom(neighbour) ||           //ただし、意見をくれたやつにはあげる必要ない。
                    messageBox.OpinionOf(neighbour) != this.Opinion) //くれてるやつでも、違う意見もってるやつには投げる。
                {
                    SendOpinion(opinion, neighbour);
                }
            }

            messageBox = new DRMessageBox();
        }
Beispiel #16
0
        public override void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater)
        {
            //前の意見を記録
            BlackWhiteSubject? previousOpinion = Opinion;

            //ここで意見が変わるかも。
            base.UpdateOpinion(sub, updater);

            //新しい意見
            BlackWhiteSubject? newOpinion = Opinion;

            //意見が変わったら
            if (previousOpinion != newOpinion)
            {
                opinionFormed++ ;
            }
        }
Beispiel #17
0
        public override void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater)
        {
            //前の意見を記録
            BlackWhiteSubject?previousOpinion = Opinion;

            //ここで意見が変わるかも。
            base.UpdateOpinion(sub, updater);

            //新しい意見
            BlackWhiteSubject?newOpinion = Opinion;

            //意見が変わったら
            if (previousOpinion != newOpinion)
            {
                opinionFormed++;
            }
        }
Beispiel #18
0
        protected override void NotifyOthers(BlackWhiteSubject?myOpinion = null)
        {
            BlackWhiteSubject opinion = checkOpinion(myOpinion);

            //今まで溜まってきた意見の分だけ、挽回が必要なので、何回もみんなに知らせる

            /*
             * for (int i = 0; i < opinionFormed; i++)
             * {
             *  base.NotifyOthers();
             * }
             */

            if (opinionFormed >= 2)
            {
                base.NotifyOthers(opinion);
            }
            base.NotifyOthers(opinion);
        }
Beispiel #19
0
        protected override void NotifyOthers(BlackWhiteSubject? myOpinion = null)
        {
            BlackWhiteSubject opinion = checkOpinion(myOpinion);

            //今まで溜まってきた意見の分だけ、挽回が必要なので、何回もみんなに知らせる

            /*
            for (int i = 0; i < opinionFormed; i++)
            {
                base.NotifyOthers();
            }
            */

            if(opinionFormed >= 2)
            {
                base.NotifyOthers(opinion);
            }
            base.NotifyOthers(opinion);
        }
Beispiel #20
0
        protected override void NotifyOthers()
        {
            //ご近所さん全員に伝える
            foreach (Agent neighbour in this.Neighbours)
            {
                if (!messageBox.ReceivedFrom(neighbour) ||           //ただし、意見をくれたやつにはあげる必要ない。
                    messageBox.OpinionOf(neighbour) != this.Opinion) //くれてるやつでも、違う意見もってるやつには投げる。
                {                                                    //センサーが入ってるとバグるよ。なぜならば、receivedFromが成立しないから?
                    if (Opinion == null)
                    {
                        throw new Exception("こんなことありえない。バグだ");
                    }

                    BlackWhiteSubject myopinion = thought.Opinion.Value; //nullableを通常に変換

                    this.SendOpinion(myopinion, neighbour);              //送る
                }
            }

            messageBox = new DRMessageQueue();
        }
Beispiel #21
0
 //fromを自分にして、意見を送信する。
 public virtual void SendOpinion(BlackWhiteSubject opinion, IAgent to)
 {
     to.ReceiveOpinion(new BWMessage(opinion, this));
 }
        public virtual void EstimateAwarenessRate(BlackWhiteSubject? Opinion, UpdateCounter counter){

            foreach (var can in Candidates)
            {
                //この候補は意見形成できるか?
                bool formed = OpinionFormed(can,Opinion,counter);
                //↑can.EstimateAwarenessRateに入れてしまってもいいが入れられない.結構依存が大きい OpinionFormedはImportaceLevelを使う

                //推定値を更新 //意見が更新できたか
                can.EstimateAwarenessRate(formed);

            }

            OnEstimationChanged(new EstimationEventArgs(Candidates));
        }
        public virtual bool OpinionFormed(Candidate can, BlackWhiteSubject? Opinion, UpdateCounter counter)
        {
            //ImportanceLevelに依存

                //3つの条件の論理式

                //意見を決められたか
                bool determined = Opinion != null;

                //現在のより大きいか?
                bool bigger = can.ImportanceLevel >= ImportanceLevel;

                //この候補にとって十分な意見が来たか?
            /*  bool enoughUpd = counter.UpdateNum  > 0 ? //この場合わけをすべきか?
                         counter.UpdateRight >= can.JumpNumRight : //正だったらrightと比べる
                         counter.UpdateLeft  >= can.JumpNumLeft; //負だったらleftと比べる */

                bool enoughUpd =    counter.UpdateRight >= can.JumpNumRight 
                                 || counter.UpdateLeft  >= can.JumpNumLeft;//一番近いσを,超えられるか

                //意見を決められていて、候補の方が大きいか、 もしくは、十分な意見が来たか。
                return (determined && bigger) || enoughUpd;
        }
Beispiel #24
0
 //みんなに知らせる。自分の意見はこうですよと。
 protected virtual void NotifyOthers(BlackWhiteSubject? myOpinion = null)
 {
     BlackWhiteSubject opinion = checkOpinion(myOpinion);
     //ご近所さん全員に伝える
     foreach (IAgent neighbour in this.Neighbours)
     {
         SendOpinion(opinion, neighbour);
     }
 }
Beispiel #25
0
 public void setNext(BlackWhiteSubject value)
 {
     Value = value;
 }
Beispiel #26
0
 public TheFact(BlackWhiteSubject value)
 {
     Value = value;
 }
Beispiel #27
0
 public BWMessage(BlackWhiteSubject sbj, IOpinionSender a)
 {
     subject = sbj;
     from    = a;
 }
Beispiel #28
0
 protected virtual BlackWhiteSubject checkOpinion(BlackWhiteSubject? opinion)
 {
     if (opinion == null) //引数が省略されたら
     {
         if(this.Opinion == null){ //引数が省略されたのに自分の意見もなかったら、バグ
             throw new Exception("this.Opinionがnullの状態で呼び出さないで。バグです。");
         }
         else //引数が省略され、自分の意見がある場合は
         {
             opinion = this.Opinion;
         }
     }
     return opinion.Value;
 }
Beispiel #29
0
 //受け取った意見とimportancelevelからCupdを決める
 protected static double decideCupd(BlackWhiteSubject sub, double importanceLevel)
 {
     return sub == BlackWhiteSubject.White ? importanceLevel : 1 - importanceLevel;
 }
Beispiel #30
0
        public virtual void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
        {
            double Cupd = decideCupd(sub, importanceLevel);
            double t = importanceLevel;

            //信念を更新。この結果、意見が変わるかもしれない。
            thought.Belief = updateFunc(thought.Belief, Cupd);

            //状態の変更を通知
            if(agentChanged != null){
                agentChanged(this);
            }
        }
Beispiel #31
0
 public void setNext(BlackWhiteSubject value)
 {
     Value = value;
 }
Beispiel #32
0
 public void SendOpinion(BlackWhiteSubject opinion, Agent to)
 {
     to.ReceiveOpinion(new BWMessage(opinion, this));
 }
Beispiel #33
0
 //fromを自分にして、意見を送信する。
 public virtual void SendOpinion(BlackWhiteSubject opinion, IAgent to)
 {
     to.ReceiveOpinion(new BWMessage(opinion, this.body));
 }
Beispiel #34
0
 public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel)
 {
     base.UpdateOpinion(sub, importanceLevel);
     ////Console.WriteLine("AAT: UpdateOpinion()");
     //意見を変える際に、カウント
     if (sub == BlackWhiteSubject.White)
     {
         updatedNum++;
     }
     else //if(sub == BlackWhiteSubject.Black)
     {
         updatedNum--;
     }
 }
Beispiel #35
0
 public OpinionEventArgs(BlackWhiteSubject? o)
 {
     opinion = o;
 }
Beispiel #36
0
        public double updateBelief(BlackWhiteSubject sbj, double belief)
        {
            double cupd = decideCupd(sbj, ImportanceLevel);

            return updateFunc(belief, cupd);
        }
Beispiel #37
0
        public double updateBelief(BlackWhiteSubject sbj, double belief)
        {
            double cupd = decideCupd(sbj, ImportanceLevel);

            return(updateFunc(belief, cupd));
        }
Beispiel #38
0
 //受け取った意見とimportancelevelからCupdを決める
 //AAT ImportanceLevelというclassを使ってもいいかもね。
 protected static double decideCupd(BlackWhiteSubject sbj, double importanceLevel)
 {
     return(sbj == BlackWhiteSubject.White ? importanceLevel : 1 - importanceLevel);
 }
Beispiel #39
0
 public TheFact(BlackWhiteSubject value)
 {
     Value = value;
 }
Beispiel #40
0
        public virtual void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater)
        {
            thought.Belief = updater.updateBelief(sub, thought.Belief);

            ////Console.WriteLine("AAT: UpdateOpinion()");
            //意見を変える際に、カウント
            if (sub == BlackWhiteSubject.White)
            {
                counter.CountUp();
            }
            else //if(sub == BlackWhiteSubject.Black)
            {
                counter.CountDown();
            }
        }
Beispiel #41
0
 public BWMessage(BlackWhiteSubject sbj, IOpinionSender a)
 {
     subject = sbj;
     from = a;
 }