Ejemplo n.º 1
0
            public void Add(SparseTwinIndex <float> data)
            {
                var flatData = data.GetFlatData();

                if (RaiseToE)
                {
                    foreach (var entry in DataSource.Read())
                    {
                        var o = data.GetFlatIndex(entry.O);
                        var d = data.GetFlatIndex(entry.D);
                        if (o >= 0 & d >= 0)
                        {
                            flatData[o][d] += (float)Math.Exp(entry.Data);
                        }
                    }
                }
                else
                {
                    foreach (var entry in DataSource.Read())
                    {
                        var o = data.GetFlatIndex(entry.O);
                        var d = data.GetFlatIndex(entry.D);
                        if (o >= 0 & d >= 0)
                        {
                            flatData[o][d] += entry.Data;
                        }
                    }
                }
            }
Ejemplo n.º 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();
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Gets the row of data from the probabilities for the given household
        /// </summary>
        /// <param name="householdZone">The sparse space to retrieve</param>
        /// <param name="probabilities">The probability table</param>
        /// <returns>The row of data, null if it doesn't exist</returns>
        private float[] GetHouseholdRow(int householdZone, SparseTwinIndex <float> probabilities)
        {
            var index = probabilities.GetFlatIndex(householdZone);

            if (index < 0)
            {
                throw new XTMFRuntimeException(this, "In '" + Name + "' we were unable to find any data for a zone numbered '" + householdZone
                                               + "'.  Please make sure that this zone actually exists.");
            }
            return(probabilities.GetFlatData()[index]);
        }
Ejemplo n.º 4
0
 public void Add(SparseTwinIndex<float> data)
 {
     var flatData = data.GetFlatData();
     if ( this.RaiseToE )
     {
         foreach ( var entry in this.DataSource.Read() )
         {
             var o = data.GetFlatIndex( entry.O );
             var d = data.GetFlatIndex( entry.D );
             if ( o >= 0 & d >= 0 )
             {
                 flatData[o][d] += (float)Math.Exp( entry.Data );
             }
         }
     }
     else
     {
         foreach ( var entry in this.DataSource.Read() )
         {
             var o = data.GetFlatIndex( entry.O );
             var d = data.GetFlatIndex( entry.D );
             if ( o >= 0 & d >= 0 )
             {
                 flatData[o][d] += (float)entry.Data;
             }
         }
     }
 }
Ejemplo n.º 5
0
        public void Start()
        {
            if(FirstTime || LoadTruthEveryTime)
            {
                ZoneSystem.LoadData();
                foreach(var network in NetworkData)
                {
                    network.LoadData();
                }
                truth = TruthData.AquireResource<SparseTwinIndex<float>>().GetFlatData();
                TruthData.ReleaseResource();
            }
            var model = ModelData.AquireResource<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();
            }
        }