public void SetAllAffordaces([NotNull][ItemNotNull] List <CalcAffordanceDto> affordances, [NotNull] DtoCalcLocationDict locations, [NotNull] CalcVariableRepository variableRepository, [ItemNotNull][NotNull] List <CalcDevice> devices) { if (affordances.Count == 0) { throw new LPGException("No Affordances found."); } foreach (CalcAffordanceDto affordancedto in affordances) { CalcProfile personProfile = CalcDeviceFactory.MakeCalcProfile(affordancedto.PersonProfile, _calcRepo.CalcParameters); CalcLocation calcLocation = locations.GetCalcLocationByGuid(affordancedto.CalcLocationGuid); var calcDesires = MakeCalcDesires(affordancedto.Satisfactionvalues); var color = new ColorRGB(affordancedto.ColorR, affordancedto.ColorG, affordancedto.ColorB); var variableOps = MakeVariableOps(locations, affordancedto.VariableOps, variableRepository); List <VariableRequirement> requirements = new List <VariableRequirement>(); foreach (VariableRequirementDto requirementDto in affordancedto.VariableRequirements) { VariableRequirement vrq = new VariableRequirement(requirementDto.Name, requirementDto.Value, requirementDto.CalcLocationName, requirementDto.LocationGuid, requirementDto.VariableCondition, variableRepository, requirementDto.VariableGuid); requirements.Add(vrq); } var deviceEnergyProfiles = MakeDeviceEnergyProfileTuples(devices, affordancedto); var busyarr = _availabilityDtoRepository.GetByGuid(affordancedto.IsBusyArray.Guid); CalcAffordance caff = new CalcAffordance( affordancedto.Name, personProfile, calcLocation, affordancedto.RandomEffect, calcDesires, affordancedto.MiniumAge, affordancedto.MaximumAge, affordancedto.PermittedGender, affordancedto.NeedsLight, affordancedto.TimeStandardDeviation, color, affordancedto.AffCategory, affordancedto.IsInterruptable, affordancedto.IsInterrupting, variableOps, requirements, affordancedto.ActionAfterInterruption, affordancedto.TimeLimitName, affordancedto.Weight, affordancedto.RequireAllDesires, affordancedto.SrcTrait, affordancedto.Guid, variableRepository, deviceEnergyProfiles, busyarr, affordancedto.BodilyActivityLevel, _calcRepo); MakeSubAffordances(locations, variableRepository, affordancedto, caff); calcLocation.AddAffordance(caff); } }
private List <CalcAutoDev> MakeCalcAutoDevsFromHouse([NotNull] CalcHouseDto house, [NotNull][ItemNotNull] List <CalcLocation> houseLocations) { var autodevs = new List <CalcAutoDev>(house.AutoDevs.Count); // zur kategorien zuordnung foreach (var hhautodev in house.AutoDevs) { CalcProfile calcProfile = CalcDeviceFactory.MakeCalcProfile(hhautodev.CalcProfile, _calcRepo.CalcParameters); CalcLoadType clt = _ltDict.GetLoadtypeByGuid(hhautodev.LoadtypeGuid); List <CalcDeviceLoad> loads = new List <CalcDeviceLoad>(); foreach (CalcDeviceLoadDto loadDto in hhautodev.Loads) { CalcDeviceLoad load = new CalcDeviceLoad(loadDto.Name, loadDto.MaxPower, _ltDict.GetLoadtypeByGuid(loadDto.LoadTypeGuid), loadDto.AverageYearlyConsumption, loadDto.PowerStandardDeviation); loads.Add(load); } List <VariableRequirement> requirements = new List <VariableRequirement>(); foreach (var reqDto in hhautodev.Requirements) { VariableRequirement rq = new VariableRequirement(reqDto.Name, reqDto.Value, reqDto.CalcLocationName, reqDto.LocationGuid, reqDto.VariableCondition, _variableRepository, reqDto.VariableGuid); requirements.Add(rq); } CalcLocation houseLocation = houseLocations.Single(x => x.Guid == hhautodev.CalcLocationGuid); var cautodev = new CalcAutoDev( calcProfile, clt, loads, hhautodev.TimeStandardDeviation, hhautodev.Multiplier, houseLocation, requirements, hhautodev, _calcRepo); var busyarr = _availabilityDtoRepository.GetByGuid(hhautodev.BusyArr.Guid); cautodev.ApplyBitArry(busyarr, _ltDict.GetLoadtypeByGuid(hhautodev.LoadtypeGuid)); autodevs.Add(cautodev); } return(autodevs); }
public List <CalcAutoDev> MakeCalcAutoDevs( [NotNull][ItemNotNull] List <CalcAutoDevDto> autoDevices, [NotNull] DtoCalcLocationDict locationDict) { var autodevs = new List <CalcAutoDev>(autoDevices.Count); foreach (var autoDevDto in autoDevices) { if (_loadTypeDictionary.SimulateLoadtype(autoDevDto.LoadtypeGuid)) { var deviceLoads = MakeCalcDeviceLoads(autoDevDto, _loadTypeDictionary); CalcProfile cp = MakeCalcProfile(autoDevDto.CalcProfile, _calcRepo.CalcParameters); var loadtype = _loadTypeDictionary.GetLoadtypeByGuid(autoDevDto.LoadtypeGuid); CalcLocation calcLocation = locationDict.GetCalcLocationByGuid(autoDevDto.CalcLocationGuid); List <VariableRequirement> requirements = new List <VariableRequirement>(); foreach (var req in autoDevDto.Requirements) { VariableRequirement vreq = new VariableRequirement(req.Name, req.Value, req.CalcLocationName, req.LocationGuid, req.VariableCondition, _calcVariableRepository, req.VariableGuid); requirements.Add(vreq); } autoDevDto.AdditionalName = " (autonomous)"; var cautodev = new CalcAutoDev(cp, loadtype, deviceLoads, autoDevDto.TimeStandardDeviation, 1, calcLocation, requirements, autoDevDto, _calcRepo); var busyarr = _availabilityDtoRepository.GetByGuid(autoDevDto.BusyArr.Guid); cautodev.ApplyBitArry(busyarr, loadtype); autodevs.Add(cautodev); } } return(autodevs); }
public void CheckResultingProfile() { using var wd = new WorkingDir(Utili.GetCurrentMethodAndClass()); wd.InputDataLogger.AddSaver(new ColumnEntryLogger(wd.SqlResultLoggingService)); wd.InputDataLogger.AddSaver(new ResultFileEntryLogger(wd.SqlResultLoggingService)); wd.InputDataLogger.AddSaver(new HouseholdKeyLogger(wd.SqlResultLoggingService)); DateTime startdate = new DateTime(2018, 1, 1); DateTime enddate = startdate.AddMinutes(100); CalcParameters calculationParameters = CalcParametersFactory.MakeGoodDefaults().SetStartDate(startdate).SetEndDate(enddate).EnableShowSettlingPeriod(); var profile = new CalcProfile("profile", Guid.NewGuid().ToStrGuid(), new TimeSpan(0, 1, 0), ProfileType.Relative, "blub"); profile.AddNewTimepoint(new TimeSpan(0), 0.01); profile.AddNewTimepoint(new TimeSpan(1, 0, 0), 0.01); profile.ConvertToTimesteps(); var cloadtype = new CalcLoadType("loadtype", "power", "sum", 1, true, Guid.NewGuid().ToStrGuid()); var loads = new List <CalcDeviceLoad>(); var cdl = new CalcDeviceLoad("cdevload", 100, cloadtype, 100, 0.1); loads.Add(cdl); var r = new Random(5); HouseholdKey key = new HouseholdKey("hh1"); var nr = new NormalRandom(0, 1, r); using var fft = new FileFactoryAndTracker(wd.WorkingDirectory, "householdname", wd.InputDataLogger); fft.RegisterHousehold(key, "hh1", HouseholdKeyType.Household, "desc", null, null); fft.RegisterHousehold(Constants.GeneralHouseholdKey, "general", HouseholdKeyType.General, "desc", null, null); //SqlResultLoggingService srls = new SqlResultLoggingService(wd.WorkingDirectory); DateStampCreator dsc = new DateStampCreator(calculationParameters); using OnlineLoggingData old = new OnlineLoggingData(dsc, wd.InputDataLogger, calculationParameters); var odap = new OnlineDeviceActivationProcessor(old, calculationParameters, fft); using CalcRepo calcRepo = new CalcRepo(odap: odap, normalRandom: nr, calcParameters: calculationParameters); var location = new CalcLocation("calcloc", Guid.NewGuid().ToStrGuid()); CalcVariableRepository crv = new CalcVariableRepository(); var variableGuid = Guid.NewGuid().ToStrGuid(); CalcVariable cv = new CalcVariable("varname", variableGuid, 0, location.Name, location.Guid, key); crv.RegisterVariable(cv); VariableRequirement vreq = new VariableRequirement(cv.Name, 0, location.Name, location.Guid, VariableCondition.Equal, crv, variableGuid); List <VariableRequirement> requirements = new List <VariableRequirement> { vreq }; var deviceCategoryGuid = Guid.NewGuid().ToStrGuid(); CalcDeviceDto cdd = new CalcDeviceDto("autodevnamename", deviceCategoryGuid, key, OefcDeviceType.AutonomousDevice, "device category", "", Guid.NewGuid().ToStrGuid(), location.Guid, location.Name); var cad = new CalcAutoDev(profile, cloadtype, loads, 0.8, 1, location, requirements, cdd, calcRepo); for (var i = 0; i < 100; i++) { TimeStep ts = new TimeStep(i, calculationParameters); if (!cad.IsBusyDuringTimespan(ts, 1, 0.7, cloadtype)) { cad.Activate(ts); } var rows = odap.ProcessOneTimestep(ts); foreach (var energyFileRow in rows) { foreach (var energyEntry in energyFileRow.EnergyEntries) { Logger.Info(energyEntry.ToString(CultureInfo.CurrentCulture)); } } } }