protected void SetLinkInfoValues(AgentNetwork agent_network) { this.LinkInfoValues = new List <LinkInfoValue>(); foreach (var agent in agent_network.Agents) //agent一つ一つに対して { foreach (var neighbor_agent in agent.GetNeighbors()) //リンクでつながる隣人一人一人(そのエージェントの持つリンク数分) { this.LinkInfoValues.Add(new LinkInfoValue(agent, neighbor_agent, this.LinkInfoValueWindowSize)); //receiver,sender,weightの順 .linkinfovalueはSWT用 } } }
public virtual void SetAgentNetwork(AgentNetwork agent_network, int opinion_share_num) //opinion_share_numはオーバーライド用 { this.MyAgentNetwork = agent_network; if (this.CommonWeightMode) { foreach (var link in this.MyAgentNetwork.AgentLinks) { link.SetInitSourceWeight(this.CommonWeight); link.SetInitTargetWeight(this.CommonWeight); } } this.SetLinkInfoValues(agent_network); //linkInfoValueを初期化 return; }
public void AddEnvironment(AgentNetwork agent_network) { this.EnvironmentAgent = new Agent(-1).SetSubject(this.EnvSubject); //環境エージェント(≒環境) var op_vector = Vector <double> .Build.Dense(this.EnvSubject.SubjectDimSize, 0.0); //意見の種類だけ要素を0で初期化 this.EnvironmentAgent.SetInitOpinion(op_vector); List <AgentLink> env_links = new List <AgentLink>(); //環境とセンサエージェントをつなぐリンク var sensors = agent_network.Agents.Where(agent => agent.IsSensor).ToList(); int link_index = -1; foreach (var sensor in sensors) { env_links.Add(new AgentLink(link_index, sensor, this.EnvironmentAgent)); link_index--; } foreach (var sensor in sensors) { sensor.AttachAgentLinks(env_links); } this.EnvironmentAgent.AttachAgentLinks(env_links); }