예제 #1
0
 private void LoadInBaseData(SparseTwinIndex <float> ret, IReadODData <float> data)
 {
     foreach (var point in data.Read())
     {
         ret[point.O, point.D] = point.Data;
     }
 }
예제 #2
0
        private SparseTwinIndex <float> BuildOD(IReadODData <float> dataSource, int modeChoiceIndex, int demographicIndex)
        {
            // Setup the mode choice to have the right parameters
            Root.ModeParameterDatabase.ApplyParameterSet(modeChoiceIndex, demographicIndex);
            // build a matrix to store
            var ret = Root.ZoneSystem.ZoneArray.CreateSquareTwinArray <float>();

            // there is no point trying to do this in parallel since most likely everything is being streamed off of disk anyways
            foreach (var dataPoint in dataSource.Read())
            {
                // no point trying to use the flat structure since we are dealing with entries from sparse space
                ret[dataPoint.O, dataPoint.D] = dataPoint.Data;
            }
            return(ret);
        }
예제 #3
0
 private void GatherData(SparseTwinIndex <float> storage, IReadODData <float> dataSource, string taskName)
 {
     foreach (var point in dataSource.Read())
     {
         if (storage.ContainsIndex(point.O, point.D))
         {
             storage[point.O, point.D] = point.Data;
         }
         else
         {
             throw new XTMFRuntimeException(this, "In '" + Name + "' while gathering the " + taskName + " we encountered an invalid data point at " + point.O
                                            + ":" + point.D + " trying to assign a value of " + point.Data);
         }
     }
 }
예제 #4
0
            private void LoadData(float[] data, IReadODData <float> readODData, int dataTypeOffset, SparseArray <IZone> zoneArray, int timesLoaded)
            {
                if (readODData == null)
                {
                    return;
                }
                var zones          = zoneArray.GetFlatData();
                var numberOfZones  = zones.Length;
                int previousPointO = -1;
                int previousFlatO  = -1;

                if (timesLoaded == 0)
                {
                    foreach (var point in readODData.Read())
                    {
                        var o = point.O == previousPointO ? previousFlatO : zoneArray.GetFlatIndex(point.O);
                        var d = zoneArray.GetFlatIndex(point.D);
                        if (o >= 0 & d >= 0)
                        {
                            previousPointO = point.O;
                            previousFlatO  = o;
                            var index = (o * numberOfZones + d) * NumberOfDataTypes + dataTypeOffset;
                            data[index] = point.Data;
                        }
                    }
                }
                else
                {
                    var iteration        = timesLoaded + 1;
                    var previousFraction = 1.0f / 2.0f;
                    var currentFraction  = 1.0f / 2.0f;
                    foreach (var point in readODData.Read())
                    {
                        var o = point.O == previousPointO ? previousFlatO : zoneArray.GetFlatIndex(point.O);
                        var d = zoneArray.GetFlatIndex(point.D);
                        if (o >= 0 & d >= 0)
                        {
                            previousPointO = point.O;
                            previousFlatO  = o;
                            var index = (o * numberOfZones + d) * NumberOfDataTypes + dataTypeOffset;
                            data[index] = data[index] * previousFraction + point.Data * currentFraction;
                        }
                    }
                }
            }
 private void LoadInBaseData(SparseTwinIndex <float> ret, IReadODData <float> data)
 {
     try
     {
         Parallel.ForEach(data.Read(), delegate(ODData <float> point)
         {
             ret[point.O, point.D] = point.Data;
         });
     }
     catch (AggregateException e)
     {
         if (e.InnerException is XTMFRuntimeException)
         {
             throw new XTMFRuntimeException(this, e.Message);
         }
         throw new XTMFRuntimeException(this, e.Message + "\r\n" + e.StackTrace);
     }
 }
        private void LoadData(float[] data, IReadODData <float> readODData, int dataTypeOffset, bool applyTimeBlending)
        {
            if (readODData == null)
            {
                return;
            }
            var numberOfZones = Zones.Length;
            var dataTypes     = (int)DataTypes.NumberOfDataTypes;

            if (applyTimeBlending)
            {
                var iteration        = IterativeRoot.CurrentIteration;
                var previousFraction = 1.0f / (iteration + 1.0f);
                var currentFraction  = iteration / (1.0f + iteration);
                foreach (var point in readODData.Read())
                {
                    var o = ZoneArray.GetFlatIndex(point.O);
                    var d = ZoneArray.GetFlatIndex(point.D);
                    if (o >= 0 & d >= 0)
                    {
                        data[(o * numberOfZones + d) * dataTypes + dataTypeOffset] = data[(o * numberOfZones + d) * dataTypes + dataTypeOffset] * previousFraction + point.Data * currentFraction;
                    }
                }
            }
            else
            {
                foreach (var point in readODData.Read())
                {
                    var o = ZoneArray.GetFlatIndex(point.O);
                    var d = ZoneArray.GetFlatIndex(point.D);
                    if (o >= 0 & d >= 0)
                    {
                        data[(o * numberOfZones + d) * dataTypes + dataTypeOffset] = point.Data;
                    }
                }
            }
        }
 private void LoadInBaseData(SparseTwinIndex<float> ret, IReadODData<float> data)
 {
     foreach ( var point in data.Read() )
     {
         ret[point.O, point.D] = point.Data;
     }
 }
예제 #8
0
 private void LoadData(float[] data, IReadODData<float> readODData, int dataTypeOffset, SparseArray<IZone> zoneArray, int timesLoaded)
 {
     if(readODData == null)
     {
         return;
     }
     var zones = zoneArray.GetFlatData();
     var numberOfZones = zones.Length;
     var dataTypes = (int)DataTypes.NumberOfDataTypes;
     int previousPointO = -1;
     int previousFlatO = -1;
     if(timesLoaded == 0)
     {
         foreach(var point in readODData.Read())
         {
             var o = point.O == previousPointO ? previousFlatO : zoneArray.GetFlatIndex(point.O);
             var d = zoneArray.GetFlatIndex(point.D);
             if(o >= 0 & d >= 0)
             {
                 previousPointO = point.O;
                 previousFlatO = o;
                 var index = (o * numberOfZones + d) * dataTypes + dataTypeOffset;
                 data[index] = point.Data;
             }
         }
     }
     else
     {
         var iteration = timesLoaded + 1;
         var previousFraction = 1.0f / (iteration + 1.0f);
         var currentFraction = iteration / (1.0f + iteration);
         foreach(var point in readODData.Read())
         {
             var o = point.O == previousPointO ? previousFlatO : zoneArray.GetFlatIndex(point.O);
             var d = zoneArray.GetFlatIndex(point.D);
             if(o >= 0 & d >= 0)
             {
                 previousPointO = point.O;
                 previousFlatO = o;
                 var index = (o * numberOfZones + d) * dataTypes + dataTypeOffset;
                 data[index] = data[index] * previousFraction + point.Data * currentFraction;
             }
         }
     }
 }
        private void LoadData(float[] data, IReadODData<float> readODData, int dataTypeOffset, bool applyBlending)
        {
            if(readODData == null )
            {
                return;
            }
            var numberOfZones = Zones.Length;
            var dataTypes = (int)DataTypes.NumberOfDataTypes;

            if(applyBlending)
            {
                var iteration = IterativeRoot.CurrentIteration;
                var previousFraction = 1.0f/ (iteration + 1.0f);
                var currentFraction = iteration / (1.0f + iteration);
                foreach(var point in readODData.Read())
                {
                    var o = ZoneArray.GetFlatIndex(point.O);
                    var d = ZoneArray.GetFlatIndex(point.D);
                    if(o >= 0 & d >= 0)
                    {
                        data[(o * numberOfZones + d) * dataTypes + dataTypeOffset] = data[(o * numberOfZones + d) * dataTypes + dataTypeOffset] * previousFraction + point.Data * currentFraction;
                    }
                }
            }
            else
            {
                foreach(var point in readODData.Read())
                {
                    var o = ZoneArray.GetFlatIndex(point.O);
                    var d = ZoneArray.GetFlatIndex(point.D);
                    if(o >= 0 & d >= 0)
                    {
                        data[(o * numberOfZones + d) * dataTypes + dataTypeOffset] = point.Data;
                    }
                }
            }
        }
예제 #10
0
 private SparseTwinIndex<float> BuildOD(IReadODData<float> dataSource, int modeChoiceIndex, int demographicIndex)
 {
     // Setup the mode choice to have the right parameters
     this.Root.ModeParameterDatabase.ApplyParameterSet( modeChoiceIndex, demographicIndex );
     // build a matrix to store
     var ret = this.Root.ZoneSystem.ZoneArray.CreateSquareTwinArray<float>();
     // there is no point trying to do this in parallel since most likely everything is being streamed off of disk anyways
     foreach ( var dataPoint in dataSource.Read() )
     {
         // no point trying to use the flat structure since we are dealing with entries from sparse space
         ret[dataPoint.O, dataPoint.D] = dataPoint.Data;
     }
     return ret;
 }