コード例 #1
0
        private void LoadJobTypeDisribution()
        {
            JobTypeRates = SparseTwinIndex <float> .CreateSimilarArray(Root.ZoneSystem.ZoneArray, EmploymentStatus);

            var employmentIndexes = EmploymentStatus.ValidIndexies().ToArray();

            using (CsvReader reader = new CsvReader(GetFullPath(JobEmploymentRateFile)))
            {
                if (JobEmploymentRateFileHeader)
                {
                    reader.LoadLine();
                }
                while (!reader.EndOfFile)
                {
                    var length = reader.LoadLine();
                    if (length >= 3)
                    {
                        reader.Get(out int pd, 0);
                        reader.Get(out float fulltime, 1);
                        reader.Get(out float parttime, 2);
                        if (PdZoneMap.TryGetValue(pd, out List <int> zones))
                        {
                            foreach (var zone in zones)
                            {
                                JobTypeRates[zone, employmentIndexes[1]] = fulltime;
                                JobTypeRates[zone, employmentIndexes[2]] = parttime;
                            }
                        }
                    }
                }
            }
        }
コード例 #2
0
        private void LoadJobOccupationDistribution()
        {
            JobOccupationRates = SparseTriIndex <float> .CreateSimilarArray(Root.ZoneSystem.ZoneArray, EmploymentStatus, OccupationCategories);

            var employmentIndexes = EmploymentStatus.ValidIndexies().ToArray();
            var occupationIndexes = OccupationCategories.ValidIndexies().ToArray();

            using (CsvReader reader = new CsvReader(GetFullPath(JobOccupationRateFile)))
            {
                int   pd;
                int   employmentStatus;
                float professional;
                float general;
                float sales;
                float manufacturing;
                if (JobOccupationRateFileHeader)
                {
                    reader.LoadLine();
                }
                while (!reader.EndOfFile)
                {
                    var length = reader.LoadLine();
                    if (length >= 5)
                    {
                        reader.Get(out pd, 0);
                        reader.Get(out employmentStatus, 1);
                        reader.Get(out professional, 2);
                        reader.Get(out general, 3);
                        reader.Get(out sales, 4);
                        reader.Get(out manufacturing, 5);
                        List <int> zones;
                        if (PDZoneMap.TryGetValue(pd, out zones))
                        {
                            foreach (var zone in zones)
                            {
                                this.JobOccupationRates[zone, employmentStatus, occupationIndexes[0]] = 0;
                                this.JobOccupationRates[zone, employmentStatus, occupationIndexes[1]] = professional;
                                this.JobOccupationRates[zone, employmentStatus, occupationIndexes[2]] = general;
                                this.JobOccupationRates[zone, employmentStatus, occupationIndexes[3]] = sales;
                                this.JobOccupationRates[zone, employmentStatus, occupationIndexes[4]] = manufacturing;
                            }
                        }
                    }
                }
            }
        }
コード例 #3
0
        private void LoadDriversLicenseDistribution()
        {
            DriversLicenseRates = Root.ZoneSystem.ZoneArray.CreateSimilarArray <SparseTwinIndex <float> >();
            var employmentIndexes = EmploymentStatus.ValidIndexies().ToArray();

            using (CsvReader reader = new CsvReader(GetFullPath(DriversLicenseRateFile)))
            {
                int   pd;
                int   ageCat;
                int   empStat;
                float chance;
                if (DriversLicenseRateFileHeader)
                {
                    reader.LoadLine();
                }
                while (!reader.EndOfFile)
                {
                    var length = reader.LoadLine();
                    if (length >= 4)
                    {
                        reader.Get(out pd, 0);
                        reader.Get(out ageCat, 1);
                        reader.Get(out empStat, 2);
                        reader.Get(out chance, 3);
                        List <int> zones;
                        if (PDZoneMap.TryGetValue(pd, out zones))
                        {
                            foreach (var zone in zones)
                            {
                                var zoneData = this.DriversLicenseRates[zone];
                                if (zoneData == null)
                                {
                                    zoneData = SparseTwinIndex <float> .CreateSimilarArray(AgeCategories, EmploymentStatus);

                                    this.DriversLicenseRates[zone] = zoneData;
                                }
                                zoneData[ageCat, empStat] = chance;
                            }
                        }
                    }
                }
            }
        }
コード例 #4
0
        private void LoadJobTypeDisribution()
        {
            JobTypeRates = SparseTwinIndex <float> .CreateSimilarArray(Root.ZoneSystem.ZoneArray, EmploymentStatus);

            var employmentIndexes = EmploymentStatus.ValidIndexies().ToArray();

            using (CommentedCsvReader reader = new CommentedCsvReader(JobEmploymentRateFile.GetFileName(Root.InputBaseDirectory)))
            {
                while (reader.NextLine())
                {
                    if (reader.NumberOfCurrentCells >= 3)
                    {
                        reader.Get(out int pd, 0);
                        reader.Get(out float fulltime, 1);
                        reader.Get(out float parttime, 2);
                        foreach (var zone in PDZoneMap[pd])
                        {
                            JobTypeRates[zone, employmentIndexes[1]] = fulltime;
                            JobTypeRates[zone, employmentIndexes[2]] = parttime;
                        }
                    }
                }
            }
        }
コード例 #5
0
        public void LoadData()
        {
            Loaded = true;
            LoadPdZoneMap();
            LoadCategoryInformation();
            LoadAgeDist();
            LoadEmploymentDist();
            LoadOccupationDist();
            LoadStudentDist();
            LoadJobOccupationDistribution();
            LoadJobTypeDisribution();
            LoadDriversLicenseDistribution();
            LoadNumberOfCarsDistribution();
            if (SaveDataIntoZones)
            {
                foreach (var zone in Root.ZoneSystem.ZoneArray.ValidIndexies())
                {
                    var   z                   = Root.ZoneSystem.ZoneArray[zone];
                    float generalworker       = 0;
                    float manufacturingworker = 0;
                    float professionalworker  = 0;
                    float salesWorker         = 0;
                    float generalJob          = 0;
                    float manufacturingJob    = 0;
                    float professionalJob     = 0;
                    float salesJob            = 0;
                    var   occRates            = OccupationRates[zone];
                    var   empData             = EmploymentStatusRates[zone];
                    if (occRates != null && empData != null)
                    {
                        foreach (var age in AgeCategories.ValidIndexies())
                        {
                            var agePop = z.Population * AgeRates[zone, age];
                            foreach (var status in EmploymentStatus.ValidIndexies())
                            {
                                var statusPop = agePop * empData[age, status];
                                professionalworker  += statusPop * occRates[age, status, 1];
                                generalworker       += statusPop * occRates[age, status, 2];
                                salesWorker         += statusPop * occRates[age, status, 3];
                                manufacturingworker += statusPop * occRates[age, status, 4];
                            }
                        }
                        foreach (var status in EmploymentStatus.ValidIndexies())
                        {
                            var statusJobPop = z.Employment * JobTypeRates[zone, status];
                            professionalJob  += statusJobPop * JobOccupationRates[zone, status, 1];
                            generalJob       += statusJobPop * JobOccupationRates[zone, status, 2];
                            salesJob         += statusJobPop * JobOccupationRates[zone, status, 3];
                            manufacturingJob += statusJobPop * JobOccupationRates[zone, status, 4];
                        }
                    }
                    z.GeneralEmployment       = generalJob;
                    z.ManufacturingEmployment = manufacturingJob;
                    z.ProfessionalEmployment  = professionalJob;
                    z.RetailEmployment        = salesJob;

                    z.WorkGeneral       = generalworker;
                    z.WorkManufacturing = manufacturingworker;
                    z.WorkProfessional  = professionalworker;
                    z.WorkRetail        = salesWorker;
                }
            }
        }