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; } } } }
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(); } }
/// <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]); }
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; } } } }
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(); } }