private int ClassifyZone(float density) { var bin = DensityBins.IndexOf((int)density); if (bin < 0) { bin = DensityBins.Count - 1; } return(bin); }
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); } } }
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; } } } }
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()); }