public ElectricCarProvider([NotNull] ServiceRepository services, [NotNull] ScenarioSliceParameters slice, [NotNull] DBDto dbDto, [NotNull][ItemNotNull] List <HouseCreationAndCalculationJob> housesToBeCreated, [NotNull] CachingLPGProfileLoader lpgProfileLoader) : base(nameof(ElectricCarProvider), services, slice) { _dbDto = dbDto; _housesToBeCreated = housesToBeCreated; _lpgProfileLoader = lpgProfileLoader; var profileCacheDb = services.SqlConnectionPreparer.GetDatabaseConnection(Stage.ProfileGeneration, slice, DatabaseCode.EvProfiles); _saveableEntry = SaveableEntry <Profile> .GetSaveableEntry(profileCacheDb, SaveableEntryTableType.EvProfile, services.Logger); _saveableEntry.MakeTableForListOfFieldsIfNotExists(true); }
public HouseholdLoadProfileProvider([NotNull] ServiceRepository services, [NotNull] ScenarioSliceParameters slice, [NotNull][ItemNotNull] List <HouseCreationAndCalculationJob> districtsToBeCreated, [NotNull] SLPProvider slpProvider, [NotNull] DBDto dbDto, [NotNull] CachingLPGProfileLoader lpgloader) : base(nameof(HouseholdLoadProfileProvider), services, slice) { _housesToBeCreated = districtsToBeCreated ?? throw new ArgumentNullException(nameof(districtsToBeCreated)); _slpProvider = slpProvider; _dbDto = dbDto; _lpgloader = lpgloader; var profileCacheDb = services.SqlConnectionPreparer.GetDatabaseConnection(Stage.ProfileGeneration, slice, DatabaseCode.HouseholdProfiles); _saveableEntry = SaveableEntry <Profile> .GetSaveableEntry(profileCacheDb, SaveableEntryTableType.LPGProfile, services.Logger); _saveableEntry.MakeTableForListOfFieldsIfNotExists(true); }
public void RunTest() { CompositeResolver.RegisterAndSetAsDefault(NativeDateTimeResolver.Instance, StandardResolver.Instance); PrepareUnitTest(); Config.Directories.ResultStorageDirectory = WorkingDirectory.Dir; Config.Directories.CalcServerLpgDirectory = WorkingDirectory.Dir; // ReSharper disable twice AssignNullToNotNullAttribute HouseCreationAndCalculationJob hcj = new HouseCreationAndCalculationJob(Scenario.Present().ToString(), "2017", "trafokreis"); HouseData hd = new HouseData("houseguid", "HT01", 1000, 1000, "houseName"); HouseholdData hhd = new HouseholdData("householdguid", 2000, ElectricCarUse.UseElectricCar, "householdname", ElectricCarProvider.ChargingStationSet, ElectricCarProvider.TransportationDevicesOneCar, ElectricCarProvider.TravelRouteSet, new List <TransportationDistanceModifier>(), HouseholdDataSpecifictionType.ByPersons); hd.Households.Add(hhd); hhd.UseElectricCar = ElectricCarUse.UseElectricCar; hhd.TransportationDeviceSet = ElectricCarProvider.TransportationDevicesOneCar; hhd.TravelRouteSet = ElectricCarProvider.TravelRouteSet; hhd.ChargingStationSet = ElectricCarProvider.ChargingStationSet; hhd.HouseholdDataPersonSpecification = new HouseholdDataPersonSpecification(new List <PersonData> { new PersonData(30, Gender.Male) }); hcj.House = hd; List <HouseCreationAndCalculationJob> houseJobs = new List <HouseCreationAndCalculationJob>(); houseJobs.Add(hcj); FileHelpers.CopyRec(Config.Directories.LPGReleaseDirectory, WorkingDirectory.Dir, Logger, true); var endTime = new DateTime(Constants.PresentSlice.DstYear, 1, 10); ProfileGenerationRo pgro = new ProfileGenerationRo(); HouseProcessor.WriteDistrictsForLPG(houseJobs, WorkingDirectory.DirDi, Logger, Constants.PresentSlice, endTime, pgro); string districtsDir = WorkingDirectory.Combine("Districts"); var districtsDi = new DirectoryInfo(districtsDir); var files = districtsDi.GetFiles("*.json"); void RunOneFile(FileInfo myfi) { ProcessStartInfo psi = new ProcessStartInfo(); psi.FileName = WorkingDirectory.Combine("simulationengine.exe"); psi.UseShellExecute = true; psi.WorkingDirectory = WorkingDirectory.Dir; psi.Arguments = "ProcessHouseJob -j \"" + myfi.FullName + "\""; Info("running " + psi.FileName + " " + psi.Arguments); using (Process p = new Process()) { p.StartInfo = psi; p.Start(); p.WaitForExit(); } } foreach (var housejob in files) { RunOneFile(housejob); } DBDto dbDto = new DBDto(new List <House>(), new List <Hausanschluss>(), new List <Car>(), new List <Household>(), new List <RlmProfile>()); CachingLPGProfileLoader ca = new CachingLPGProfileLoader(Logger, dbDto); List <int> isns = new List <int>(); isns.Add(10); CarDistanceEntry cde = new CarDistanceEntry("houseguid", "householdguid", "carguid", 20, 20, isns, 10, "haguid", "sourceguid", "cdename", CarType.Electric); HouseComponentRo hcro = new HouseComponentRo("housecomponent", "componeenttype", 1000, 200, "processingstatus", "isns", "standort", 0); ProviderParameterDto ppd = new ProviderParameterDto(cde, WorkingDirectory.Dir, hcro); SqlConnectionPreparer scp = new SqlConnectionPreparer(Config); MyDb db = scp.GetDatabaseConnection(Stage.Testing, Constants.PresentSlice); SaveableEntry <Profile> sa = SaveableEntry <Profile> .GetSaveableEntry(db, SaveableEntryTableType.LPGProfile, Logger); sa.MakeTableForListOfFieldsIfNotExists(true); string dstDir = Path.Combine(WorkingDirectory.Dir, hcj.Trafokreis, hcj.House.Name); FileHelpers.CopyRec(WorkingDirectory.Combine("Results"), dstDir, Logger, true); //normal electricity test and cache test Info("================== "); Info("electricity"); Info("================== "); var profElec1 = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Electricity", sa, hhd.HouseholdGuid, out var profsource, hcj.House.Name, Config, true); Info("Source: " + profsource); Assert.NotNull(profElec1); Assert.NotNull(profsource); var profElecCache = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Electricity", sa, hhd.HouseholdGuid, out var profsourceCache, hcj.House.Name, Config, true); Info("Source 2: " + profsourceCache); Assert.NotNull(profsourceCache); Assert.NotNull(profsource); profElec1.Should().BeEquivalentTo(profElecCache, options => options.Excluding(ctx => ctx.SelectedMemberPath.EndsWith("BinaryProfile"))); //Car Charging Electricity electricity test and cache test Info("================== "); Info("Car Charging Electricity electricity"); Info("================== "); SaveableEntry <Profile> sa2 = SaveableEntry <Profile> .GetSaveableEntry(db, SaveableEntryTableType.EvProfile, Logger); sa2.MakeCleanTableForListOfFields(true); var prof2 = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Car Charging Electricity", sa2, hhd.HouseholdGuid, out var profsource2, hcj.House.Name, Config, true); Info("Source Wp 1: " + profsource2); Assert.NotNull(prof2); Assert.NotNull(profsource2); var prof3 = ca.LoadLPGProfile(ppd, hcj.Trafokreis, "Car Charging Electricity", sa2, hhd.HouseholdGuid, out var profsource3, hcj.House.Name, Config, true); Info("Source Wp 2: " + profsource3); Assert.NotNull(prof3); Assert.NotNull(profsource3); prof2.Should().BeEquivalentTo(prof3, options => options.Excluding(ctx => ctx.SelectedMemberPath.EndsWith("BinaryProfile"))); }
public void RunElectricCarProviderProvidingTest() { Config.LimitToScenarios.Add(Scenario.FromEnum(ScenarioEnum.Utopia)); Config.LimitToYears.Add(2050); Config.InitializeSlices(Logger); Config.LpgPrepareMode = LpgPrepareMode.PrepareWithFullLpgLoad; var slice = (Config.Slices ?? throw new InvalidOperationException()).First(x => x.DstYear == 2050 && x.DstScenario == Scenario.FromEnum(ScenarioEnum.Utopia)); // ReSharper disable twice AssignNullToNotNullAttribute var services = new ServiceRepository(null, null, Logger, Config, new Random()); var dbHouses = services.SqlConnectionPreparer.GetDatabaseConnection(Stage.Houses, slice); var houses = dbHouses.Fetch <House>(); var has = dbHouses.Fetch <Hausanschluss>(); var households = dbHouses.Fetch <Household>(); var cdes = dbHouses.Fetch <CarDistanceEntry>(); //SLPProvider slp = new SLPProvider(2017, vdewValues, feiertage); var cars = dbHouses.Fetch <Car>(); DBDto dbdto = new DBDto(houses, has, cars, households, new List <RlmProfile>()); CachingLPGProfileLoader clpl = new CachingLPGProfileLoader(Logger, dbdto); ElectricCarProvider ecp = new ElectricCarProvider(services, slice, dbdto, new List <HouseCreationAndCalculationJob>(), clpl); double sumenergyEstimates = 0; double kilometers = 0; double sumenergyProfiles = 0; double carCount = 0; int gascars = 0; int evs = 0; int count = 0; foreach (var carDistanceEntry in cdes) { var car = cars.Single(x => x.Guid == carDistanceEntry.CarGuid); if (car.CarType == CarType.Electric) { evs++; } else { gascars++; } HouseComponentRo hcro = new HouseComponentRo(carDistanceEntry.Name, carDistanceEntry.HouseComponentType.ToString(), 0, 0, "", carDistanceEntry.ISNsAsJson, carDistanceEntry.Standort, carDistanceEntry.EffectiveEnergyDemand); ProviderParameterDto ppd = new ProviderParameterDto(carDistanceEntry, Config.Directories.CalcServerLpgDirectory, hcro); ecp.PrepareLoadProfileIfNeeded(ppd); var prosumer = ecp.ProvideProfile(ppd); if (prosumer != null && prosumer.Profile != null) { double energyEstimate = carDistanceEntry.EnergyEstimate; sumenergyEstimates += energyEstimate; kilometers += carDistanceEntry.DistanceEstimate; double profileEnergy = prosumer.Profile.EnergySum(); sumenergyProfiles += profileEnergy; carCount++; } count++; if (count % 100 == 0) { Info("Processed " + count + " / " + cdes.Count); } //profileEnergy.Should().BeInRange(energyEstimate, energyEstimate * 1.5); } double avgKilometers = kilometers / carCount; Info("gasoline cars: " + gascars); Info("ev cars: " + evs); Info("EnergyEstimateSum: " + sumenergyEstimates); Info("ProfileSum: " + sumenergyProfiles); Info("cars profiles made for " + carCount + " / " + cdes.Count); Info("Avg km per car: " + avgKilometers); Info("Avg Energy estimate per car: " + sumenergyEstimates / carCount); Info("Avg Energy profile per car: " + sumenergyProfiles / carCount); }