Exemple #1
0
        public void LoadData()
        {
            var  ret       = Data;
            bool firstTime = false;

            if (ret == null)
            {
                Data      = ret = ZoneSystemHelper.CreatePDTwinArray <float>(Root.ZoneSystem.ZoneArray);
                firstTime = true;
            }
            var data = ret.GetFlatData();

            // initialize the data
            if (data.Length > 0)
            {
                if (firstTime)
                {
                    for (int i = 0; i < data.Length; i++)
                    {
                        var row = data[i];
                        for (int j = 0; j < row.Length; j++)
                        {
                            row[j] = 1.0f;
                        }
                    }
                }
                // now load in our kfactors
                for (int i = 0; i < Factors.Length; i++)
                {
                    data[ret.GetFlatIndex(Factors[i].OriginPD)][ret.GetFlatIndex(Factors[i].DestinationPD)] = Factors[i].Factor;
                }
            }
            Loaded = true;
        }
Exemple #2
0
        public void Start()
        {
            if (FirstTime || LoadTruthEveryTime)
            {
                ZoneSystem.LoadData();
                foreach (var network in NetworkData)
                {
                    network.LoadData();
                }
                truth = TruthData.AcquireResource <SparseTwinIndex <float> >().GetFlatData();
                TruthData.ReleaseResource();
            }
            var model = ModelData.AcquireResource <SparseTriIndex <float> >().GetFlatData();
            var zones = ZoneSystem.ZoneArray.GetFlatData();

            // sum up the truth
            if (FirstTime || LoadTruthEveryTime)
            {
                // we only need to do this once
                TruthRows = (from row in truth
                             select row.Sum()).ToArray();

                InverseOfTotalTrips = 1.0f / TruthRows.Sum();
                if (AggregateToPlanningDistricts)
                {
                    PDError          = ZoneSystemHelper.CreatePDTwinArray <float>(ZoneSystem.ZoneArray);
                    ZoneToPDIndexMap = (from zone in zones
                                        select PDError.GetFlatIndex(zone.PlanningDistrict)).ToArray();
                    // transform the truth to be PD based
                    truth = AggregateResults((new float[][][] { truth }), zones)
                            .Select(row => row.Select(element => element).ToArray()).ToArray();
                }
                FirstTime = false;
            }
            var aggregated = AggregateResults(model, zones);
            // calculate the error
            float error = ComputeError(truth, aggregated);

            // set the value in the root
            Root.RetrieveValue = () => error;
            if (ModelSaveFile != null)
            {
                SaveData.SaveMatrix(zones, AggregateResults(model, zones), ModelSaveFile);
            }

            if (this.DistanceHistogram != null)
            {
                var distances = ZoneSystem.Distances.GetFlatData();
                this.DistanceHistogram.Export(distances, model);
            }


            ModelData.ReleaseResource();
            for (int i = 0; i < PostRun.Length; i++)
            {
                PostRun[i].Start();
            }
        }