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); } }
public void randomNext() { double r = RandomPool.Get("fact").NextDouble(); if (r < 0.5) { Value = BlackWhiteSubject.White; } else { Value = BlackWhiteSubject.Black; } }
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); } }
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); } }
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); } }
//みんなに知らせる。自分の意見はこうですよと。 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(); }
public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel) { BlackWhiteSubject?previousOpinion = Opinion; //値型だからできること? base.UpdateOpinion(sub, importanceLevel); BlackWhiteSubject?newOpinion = Opinion; //意見が変わったら if (previousOpinion != newOpinion) { opinionFormed++; } }
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--; } }
public override void UpdateOpinion(BlackWhiteSubject sub, double importanceLevel) { BlackWhiteSubject? previousOpinion = Opinion;//値型だからできること? base.UpdateOpinion(sub, importanceLevel); BlackWhiteSubject? newOpinion = Opinion; //意見が変わったら if (previousOpinion != newOpinion) { opinionFormed++ ; } }
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); } }
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); } }
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(); } }
//みんなに知らせる。自分の意見はこうですよと。 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(); }
public override void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater) { //前の意見を記録 BlackWhiteSubject? previousOpinion = Opinion; //ここで意見が変わるかも。 base.UpdateOpinion(sub, updater); //新しい意見 BlackWhiteSubject? newOpinion = Opinion; //意見が変わったら if (previousOpinion != newOpinion) { opinionFormed++ ; } }
public override void UpdateOpinion(BlackWhiteSubject sub, BeliefUpdater updater) { //前の意見を記録 BlackWhiteSubject?previousOpinion = Opinion; //ここで意見が変わるかも。 base.UpdateOpinion(sub, updater); //新しい意見 BlackWhiteSubject?newOpinion = Opinion; //意見が変わったら if (previousOpinion != newOpinion) { opinionFormed++; } }
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); }
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); }
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(); }
//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; }
//みんなに知らせる。自分の意見はこうですよと。 protected virtual void NotifyOthers(BlackWhiteSubject? myOpinion = null) { BlackWhiteSubject opinion = checkOpinion(myOpinion); //ご近所さん全員に伝える foreach (IAgent neighbour in this.Neighbours) { SendOpinion(opinion, neighbour); } }
public void setNext(BlackWhiteSubject value) { Value = value; }
public TheFact(BlackWhiteSubject value) { Value = value; }
public BWMessage(BlackWhiteSubject sbj, IOpinionSender a) { subject = sbj; from = a; }
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; }
//受け取った意見とimportancelevelからCupdを決める protected static double decideCupd(BlackWhiteSubject sub, double importanceLevel) { return sub == BlackWhiteSubject.White ? importanceLevel : 1 - importanceLevel; }
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); } }
public void SendOpinion(BlackWhiteSubject opinion, Agent to) { to.ReceiveOpinion(new BWMessage(opinion, this)); }
//fromを自分にして、意見を送信する。 public virtual void SendOpinion(BlackWhiteSubject opinion, IAgent to) { to.ReceiveOpinion(new BWMessage(opinion, this.body)); }
public OpinionEventArgs(BlackWhiteSubject? o) { opinion = o; }
public double updateBelief(BlackWhiteSubject sbj, double belief) { double cupd = decideCupd(sbj, ImportanceLevel); return updateFunc(belief, cupd); }
public double updateBelief(BlackWhiteSubject sbj, double belief) { double cupd = decideCupd(sbj, ImportanceLevel); return(updateFunc(belief, cupd)); }
//受け取った意見とimportancelevelからCupdを決める //AAT ImportanceLevelというclassを使ってもいいかもね。 protected static double decideCupd(BlackWhiteSubject sbj, double importanceLevel) { return(sbj == BlackWhiteSubject.White ? importanceLevel : 1 - importanceLevel); }
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(); } }