コード例 #1
0
            private int ClassifyZone(float density)
            {
                var bin = DensityBins.IndexOf((int)density);

                if (bin < 0)
                {
                    bin = DensityBins.Count - 1;
                }
                return(bin);
            }
コード例 #2
0
        public void Execute(ITashaHousehold household, int iteration)
        {
            //Determine the worker category
            int nVehicles = household.Vehicles.Length;
            int nDrivers  = household.Persons.Count(p => p.Licence);

            int wcat;

            if (nVehicles == 0)
            {
                wcat = 0;
            }
            else
            {
                wcat = (nVehicles > nDrivers) ? 2 : 1;
            }

            foreach (var person in household.Persons)
            {
                var empStat = person.EmploymentStatus;
                if (empStat == TTSEmploymentStatus.FullTime | empStat == TTSEmploymentStatus.PartTime)
                {
                    continue;                                                                                    //Skip unemployed persons
                }
                IZone employmentZone = person.EmploymentZone;
                if (employmentZone == null)
                {
                    continue;
                }
                var distance = (int)(_ZoneDistances[household.HomeZone.ZoneNumber, employmentZone.ZoneNumber] * CoordinateFactor);
                int index    = HistogramBins.IndexOf(distance);
                if (index < 0)
                {
                    index = HistogramBins.Count;
                }
                bool taken = false;
                WriteLock.Enter(ref taken);
                _BinData[index][wcat] += person.ExpansionFactor;
                if (taken)
                {
                    WriteLock.Exit(true);
                }
            }
        }
コード例 #3
0
        public void Execute(ITashaHousehold household, int iteration)
        {
            // we only want to process this data on our last iteration
            if (iteration < TotalIterations - 1)
            {
                return;
            }
            var expansionFactor = household.ExpansionFactor;

            foreach (var person in household.Persons)
            {
                var index = AgeSets.IndexOf(person.Age);
                if (index >= 0)
                {
                    lock ( AgeSetCount )
                    {
                        AgeSetCount[index] += expansionFactor;
                    }
                }
            }
        }
コード例 #4
0
ファイル: PoRPoWMST.cs プロジェクト: lunaxi7/XTMF
            internal void Export(float[][] distances, float[][][] model)
            {
                //var odMatrixData = model[this.WorkerCategory];

                float[][] binData = new float[1 + HistogramBins.Count][]; //Extra bin for outside of the array
                for (int i = 0; i < binData.Length; i++)
                {
                    binData[i] = new float[model.Length];
                }

                for (int wcat = 0; wcat < model.Length; wcat++)
                {
                    var odMatrixData = model[wcat];

                    Parallel.For(0, odMatrixData.Length, i =>
                    {
                        var row         = odMatrixData[i];
                        var distanceRow = distances[i];

                        for (int j = 0; j < row.Length; j++)
                        {
                            var distance = (int)(distanceRow[j] * CoordinateFactor);

                            int index = HistogramBins.IndexOf(distance);

                            if (index < 0)
                            {
                                index = HistogramBins.Count; //The last index
                            }

                            // ReSharper disable once AccessToModifiedClosure
                            binData[index][wcat] += row[j];
                        }
                    });
                }



                using (var writer = new StreamWriter(SaveFile.GetFilePath()))
                {
                    var header = "Distance";
                    foreach (var wcat in model)
                    {
                        header += ",WCAT " + wcat;
                    }
                    writer.WriteLine(header);

                    for (int i = 0; i < HistogramBins.Count; i++)
                    {
                        var range  = HistogramBins[i];
                        var binrow = binData[i];

                        var line = range.ToString();
                        foreach (var count in binrow)
                        {
                            line += "," + count;
                        }

                        writer.WriteLine(line);
                    }

                    var lastline = HistogramBins[HistogramBins.Count - 1].Start + "+";
                    var lastbin  = binData[HistogramBins.Count - 1];
                    foreach (var count in lastbin)
                    {
                        lastline += "," + count;
                    }

                    writer.WriteLine(lastline);
                }

                Console.WriteLine("Exported PoRPoW histogram to " + SaveFile.GetFilePath());
            }