private static ModularHousehold MakeHouseholdBaseOnPersonSpec([NotNull] Simulator sim, [NotNull] HouseholdData householdData, [NotNull] Random r) { HouseholdDataPersonSpecification personSpec = householdData.HouseholdDataPersonSpec; if (personSpec == null) { throw new LPGCommandlineException("Person specification was null"); } List <HouseholdTemplate> templatesWithCorrectPersonCounts = sim.HouseholdTemplates.It.Where(x => x.Persons.Count == personSpec.Persons.Count).ToList(); //make demanded person profile List <PersonCategory> demandedPersonCategories = new List <PersonCategory>(); foreach (PersonData data in personSpec.Persons) { demandedPersonCategories.Add(new PersonCategory(data.Age, (PermittedGender)data.Gender)); } List <HouseholdTemplate> selectedHouseholdTemplates = new List <HouseholdTemplate>(); foreach (var householdTemplate in templatesWithCorrectPersonCounts) { List <PersonCategory> thisOfferedCategories = new List <PersonCategory>(); foreach (var th in householdTemplate.Persons) { thisOfferedCategories.Add(new PersonCategory(th.Person.Age, th.Person.Gender)); } if (AreOfferedCategoriesEnough(thisOfferedCategories, demandedPersonCategories)) { selectedHouseholdTemplates.Add(householdTemplate); } } if (selectedHouseholdTemplates.Count == 0) { _householdErrorCount++; string s = "Error " + _householdErrorCount + Environment.NewLine + "Not a single household template was found for the household " + householdData.Name + Environment.NewLine; s += "Criteria for finding the household were: Persons: " + personSpec.Persons.Count + Environment.NewLine; s += "Household templates found with this criteria: " + templatesWithCorrectPersonCounts.Count + Environment.NewLine; s += "Requirements for the persons were:" + Environment.NewLine; foreach (var cat in demandedPersonCategories) { s += cat + Environment.NewLine; } Logger.Warning(s); //throw new LPGException(s); if (templatesWithCorrectPersonCounts.Count > 0) { Logger.Warning("Using a random template with the same number of people."); selectedHouseholdTemplates = templatesWithCorrectPersonCounts; } else { Logger.Warning("No household found with " + personSpec.Persons.Count + ", using a random template."); selectedHouseholdTemplates = sim.HouseholdTemplates.It.ToList(); } } //try to find the right one based on energy use var pickedHht = selectedHouseholdTemplates[r.Next(selectedHouseholdTemplates.Count)]; pickedHht.Count = 1; Logger.Info("Generating household with template " + pickedHht.Name); var hhs = pickedHht.GenerateHouseholds(sim, false, new List <STTraitLimit>()); if (hhs.Count != 1) { throw new Exception("Could not generate this house"); } hhs[0].Description = DescriptionText + householdData.UniqueHouseholdId; hhs[0].SaveToDB(); Logger.Info("Finished generating household with template " + pickedHht.Name); return(hhs[0]); }
public static void CreateExampleHouseJob([NotNull] string connectionString) { const string relativePathHousejobs = "Example\\HouseJobs"; DirectoryInfo diHouseJobs = new DirectoryInfo(relativePathHousejobs); if (!diHouseJobs.Exists) { diHouseJobs.Create(); } const string relativePathGuids = "Example\\GuidLists"; DirectoryInfo diGuids = new DirectoryInfo(relativePathGuids); if (!diGuids.Exists) { diGuids.Create(); } Simulator sim = new Simulator(connectionString); HouseData houseData1 = new HouseData(Guid.NewGuid().ToStrGuid(), "HT01", 20000, 10000, "MyFirstHouse"); HouseholdData hhd1 = new HouseholdData(Guid.NewGuid().ToString(), "My First Household, template randomly chosen based on persons", null, null, null, new List <TransportationDistanceModifier>(), HouseholdDataSpecificationType.ByPersons); HouseholdDataPersonSpecification personSpec = new HouseholdDataPersonSpecification(new List <PersonData>() { new PersonData(25, Gender.Male) }); hhd1.HouseholdDataPersonSpec = personSpec; houseData1.Households.Add(hhd1); HouseholdData hhd2 = new HouseholdData(Guid.NewGuid().ToString(), "My Second Household (with transportation, template defined by name )", sim.ChargingStationSets[0].GetJsonReference(), sim.TransportationDeviceSets[0].GetJsonReference(), sim.TravelRouteSets[0].GetJsonReference(), null, HouseholdDataSpecificationType.ByTemplateName); hhd2.HouseholdTemplateSpec = new HouseholdTemplateSpecification("CHR01"); houseData1.Households.Add(hhd2); HouseData houseData2 = new HouseData(Guid.NewGuid().ToStrGuid(), "HT02", 20000, 10000, "MySecondHouse"); HouseholdData hhd3 = new HouseholdData(Guid.NewGuid().ToString(), "My Third Household, using predefined household", null, null, null, null, HouseholdDataSpecificationType.ByHouseholdName); hhd3.HouseholdNameSpec = new HouseholdNameSpecification(sim.ModularHouseholds[0].GetJsonReference()); houseData2.Households.Add(hhd3); HouseholdData hhd4 = new HouseholdData(Guid.NewGuid().ToString(), "My Fourth Household", null, null, null, null, HouseholdDataSpecificationType.ByPersons); hhd4.HouseholdDataPersonSpec = new HouseholdDataPersonSpecification(new List <PersonData>() { new PersonData(75, Gender.Male), new PersonData(74, Gender.Female) }); houseData2.Households.Add(hhd4); var calculationSettings = new JsonCalcSpecification { StartDate = new DateTime(2019, 1, 1), EndDate = new DateTime(2019, 1, 3), DeleteDAT = true, DefaultForOutputFiles = OutputFileDefault.OnlySums }; if (calculationSettings.CalcOptions == null) { throw new LPGException("error"); } calculationSettings.CalcOptions.Add(CalcOption.HouseSumProfilesFromDetailedDats); //calculationSettings.CalcOptions.Add(CalcOption.OverallSum.ToString()); calculationSettings.CalcOptions.Add(CalcOption.SumProfileExternalEntireHouse); calculationSettings.CalcOptions.Add(CalcOption.SumProfileExternalIndividualHouseholds); calculationSettings.LoadtypesForPostprocessing?.Add("Electricity"); calculationSettings.CalculationName = "My Comment"; calculationSettings.ExternalTimeResolution = "00:15:00"; calculationSettings.InternalTimeResolution = "00:01:00"; calculationSettings.LoadTypePriority = LoadTypePriority.RecommendedForHouses; calculationSettings.TemperatureProfile = sim.TemperatureProfiles[0].GetJsonReference(); calculationSettings.GeographicLocation = sim.GeographicLocations[0].GetJsonReference(); Logger.Info("--------"); Logger.Info("Writing example file and additional data file that you might need."); HouseCreationAndCalculationJob hj = new HouseCreationAndCalculationJob("scenario", "year", "districtname", HouseDefinitionType.HouseData); hj.House = houseData1; hj.CalcSpec = calculationSettings; hj.CalcSpec.OutputDirectory = "Example1-Results"; HouseJobSerializer.WriteJsonToFile(Path.Combine(diHouseJobs.FullName, "ExampleHouseJob-1.json"), hj); hj.House = houseData2; hj.CalcSpec.OutputDirectory = "Example2-Results"; HouseJobSerializer.WriteJsonToFile(Path.Combine(diHouseJobs.FullName, "ExampleHouseJob-2.json"), hj); Logger.Info("Finished writing example house jobs..."); WriteGuidList("GuidsForAllHouseholds.csv", sim.ModularHouseholds.It.Select(x => (DBBase)x).ToList(), diGuids); WriteGuidList("GuidsForAllHouses.csv", sim.Houses.It.Select(x => (DBBase)x).ToList(), diGuids); WriteGuidList("GuidsForAllChargingStationSets.csv", sim.ChargingStationSets.It.Select(x => (DBBase)x).ToList(), diGuids); WriteGuidList("GuidsForAllDeviceSelections.csv", sim.DeviceSelections.It.Select(x => (DBBase)x).ToList(), diGuids); WriteGuidList("GuidsForAllGeographicLocations.csv", sim.GeographicLocations.It.Select(x => (DBBase)x).ToList(), diGuids); WriteGuidList("GuidsForAllTemperatureProfiles.csv", sim.TemperatureProfiles.It.Select(x => (DBBase)x).ToList(), diGuids); WriteGuidList("GuidsForAllTransportationDeviceSets.csv", sim.TransportationDeviceSets.It.Select(x => (DBBase)x).ToList(), diGuids); WriteGuidList("GuidsForAllTravelRouteSets.csv", sim.TravelRouteSets.It.Select(x => (DBBase)x).ToList(), diGuids); }