Beispiel #1
0
        public static bool Calc(SensorGroup gp, IList <SensorAcqResult> acqs)
        {
            var alv = gp.GetVirtualItems();

            if (alv.Any())
            {
                foreach (var groupItem in alv)
                {
                    if (groupItem.VirtualGroup.GroupType == GroupType.VirtualSensor)
                    {
                        AlgorithmFactory.CreateAlgorithm(groupItem.VirtualGroup).CalcData(acqs);

                        groupItem.Value = (from acq in acqs
                                           where acq.Sensor.SensorID == groupItem.VirtualGroup.VirtualSensor.SensorID
                                           select acq).FirstOrDefault();
                    }
                }

                return(AlgorithmFactory.CreateAlgorithm(gp).CalcData(acqs));
            }
            else
            {
                return(AlgorithmFactory.CreateAlgorithm(gp).CalcData(acqs));
            }
        }
Beispiel #2
0
 public void InitAlgorithm(string algoName, double h_trg)
 {
     //アルゴリズムをセット
     if (env != null && env.Network != null && env.Network.Nodes != null && env.Network.Nodes.Count() > 0)
     {
         //foreach (AATBasedAgentIO aat in env.Network.Nodes)
         foreach (AgentIO aat in env.Network.Nodes)
         {
             aat.Algorithm = (AlgorithmFactory.CreateAlgorithm(algoName, h_trg));
         }
     }
 }
Beispiel #3
0
        private void CheckDevices(Configuration configuration, FOI foi)
        {
            AlgorithmFactory algorithmFactory = AlgorithmFactory.GetFactory(configuration.Algorithm);
            Algorithm        algorithm        = algorithmFactory.CreateAlgorithm(foi);

            new Thread(() =>
            {
                Thread.CurrentThread.IsBackground = false;

                for (int i = 0; i < configuration.NumberOfThreadCycles; i++)
                {
                    algorithm.Run(configuration.ThreadCycleDuration ?? 1);
                }

                ShowStatistics(foi);

                Console.WriteLine("Program je završio. Pritisnite tipku za izlaz.");
                Console.ReadKey();
            }).Start();
        }
Beispiel #4
0
        /// <summary>
        /// 执行计算
        /// </summary>
        public IEnumerable <SensorAcqResult> DoCalc()
        {
            var sensordatum = new List <SensorAcqResult>();

            AlgorithmFactory.CreateAlgorithm(this._calcGroup).CalcData(sensordatum);
            if (this._calcGroup.GroupType != GroupType.VirtualSensor)
            {
                foreach (var groupItem in this._calcGroup.Items)
                {
                    if (groupItem.Paramters.ContainsKey("value"))
                    {
                        var sar = (SensorAcqResult)groupItem.Paramters["value"];
                        if (sar.IsOK)
                        {
                            sensordatum.Add(sar);
                        }
                    }
                }
            }
            _calcGroup.ClearParams();
            return(sensordatum);
        }
Beispiel #5
0
        static void DoExperiment(
            int EXP_ID,
            string algoStr,
            string netStr,
            int size,
            double h_trg,
            int expd,
            int envSeed,    //環境のシード
            int linkNum,
            double cluster, //クラスタ係数
            string dirname
            )
        {
            //ディレクトリを作成
            L.gDirectory(dirname);

            //出力するファイルを宣言
            L.gDefine("roundacc,aveacc");

            //条件を表示
            {
                L.g("all").WriteLine("");
                L.g("all").Write("envSeed: " + envSeed);
                L.g("all").Write(" EXP_ID: " + EXP_ID); //実験IDを
                L.g("all").Write(" Algo: " + algoStr);  //アルゴリズムの名前を表示
                L.g("all").Write(" agentnum: " + size);
                L.g("all").Write(" linkNum: " + linkNum);
                L.g("all").Write(" cluster: " + cluster);//クラスタ係数
                L.g("all").Write(" h_trg: " + h_trg);
                L.g("all").Write(" expd: " + expd);

                L.g("roundacc").WriteLine("");
            }


            {                                               //実験一回し
                Experiment exp = new Experiment(150, 2000); //150ラウンド,2000ステップの実験

                exp.SetEnvsetSeed(envSeed);
                exp.SetFactSeed(0);

                NetworkGenerator generator = null;
                //環境を作る
                if (netStr == "WS")
                {
                    generator = new WSmodelNetworkGenerator(size, expd, 0.12);
                }
                else if (netStr == "BA")
                {
                    generator = new BAModelNetworkGenerator(size, 4, 2);
                }
                else if (netStr == "Random")
                {
                    generator = new RandomNetworkGenerator(size, 16);
                }
                //リーダーネットワークの導入 2014_0707追加
                else if (netStr == "Leader")
                {
                    generator = new LeaderNetworkGenerator(size, expd, 0.12, linkNum);
                }


                //シェルを作る
                generator.NodeCreate += () => new AgentIO();

                //generateしてくれる。
                OSEnvironment env = new OSEnvironment(generator, (int)(size * 0.05));

                //エージェントに脳みそをいれてやる
                foreach (AgentIO agentIO in env.Network.Nodes)
                {
                    agentIO.Algorithm = (AlgorithmFactory.CreateAlgorithm(algoStr, h_trg));
                }


                //ファイルにネットワークの情報を表示
                L.g("env").WriteLine("" + env);
                L.g("env").Flush();

                exp.Environment = env;

                //実験を実行
                var expResult = exp.Run();
            }



            //ファイルに書き込み
            L.Flush();
        }