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")));
        }
예제 #4
0
        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);
        }