def addPV(self, area): self.hasPV = True self.pvArea = area self.pvEfficiency = random.randint(external_inputs.PVEfficiencyMin, external_inputs.PVEfficiencyMax) self.pvAzimuth = profilegentools.gaussMinMax(external_inputs.PVAzimuthMean, external_inputs.PVAzimuthSigma) if(self.pvAzimuth < 0): self.pvAzimuth = self.pvAzimuth + 360 self.pvElevation = profilegentools.gaussMinMax(external_inputs.PVAngleMean, external_inputs.PVAngleSigma)
def __init__(self, age): self.generate(age) self.generateWorkdays(0) self.WeekendWakeUp_Avg = profilegentools.gaussMinMax(8.5 * 60, 1 * 60) self.WeekendActivities = 0.7 - (0.03 * (age - 65)) self.WorkdayBedTime_Avg = profilegentools.gaussMinMax( (23 - (age - 65) * 0.15) * 60, 30) self.WeekendBedTime_Avg = profilegentools.gaussMinMax( (23 - (age - 65) * 0.15) * 60, 30)
def __init__(self, age): self.generate(age) self.WorkdayArrival_Avg = self.WorkdayLeave_Avg + profilegentools.gaussMinMax( 7 * 60, 30) if (age < 16): self.WorkdayBedTime_Avg = profilegentools.gaussMinMax( (23 - (16 - age) * 0.25) * 60, 30) self.WeekendBedTime_Avg = profilegentools.gaussMinMax( (23 - (16 - age) * 0.25) * 60, 30) self.WorkdaySport_Avg = profilegentools.gaussMinMax(19 * 60, 1 * 60)
def generate(self, consumption): self.Runtime = profilegentools.gaussMinMax(15, 5) self.Offtime = profilegentools.gaussMinMax(40, 10) self.Consumption = consumption self.State = 0 self.RuntimeCycle = self.Runtime self.OfftimeCycle = self.Offtime self.CycleProgress = random.randint(0, self.Runtime + self.Offtime) if (self.CycleProgress < (self.Runtime + self.Offtime)): self.State = 1
def __init__(self): self.generate() self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption, 400) * external_inputs.consumptionFactor # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html age = random.triangular(65, 85, 70) self.Persons = [persons.PersonRetired(age)] if (random.randint(1, 2) == 1): self.Fridges = [ devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeBigMin, external_inputs.ConsumptionFridgeBigMax))] else: self.Fridges = [devices.DeviceFridge( random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax))] self.hasDishwasher = random.randint(0, 5) < 3 # 40% # Determine washing days self.generateWashingdays(random.randint(2, 3)) # Dermine Dishwasher times if self.hasDishwasher: self.generateDishwashdays(3)
def __init__(self, parttime=False, jobless=False): self.generate() # http://www.cbs.nl/nl-NL/menu/themas/bevolking/faq/specifiek/faq-hoeveel-kinderen.htm self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption + (700 * external_inputs.numKids), 500 + ( external_inputs.numKids * 100)) * external_inputs.consumptionFactor # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html ageParents = random.randint(40, 55) if parttime == True: self.Persons = [persons.PersonParttimeWorker(ageParents)] elif jobless == True: self.Persons = [persons.PersonJobless(ageParents)] else: self.Persons = [persons.PersonWorker(ageParents)] if not jobless: # To make life easy, only one persons.Person will use the electric vehicle, so only the main persons.Person will receive a driving distance self.Persons[0].setDistanceToWork(external_inputs.distancetoWork) # now add the kids for i in range(0, external_inputs.numKids): self.Persons.append(persons.PersonStudent(random.randint(ageParents - 3, ageParents + 3) - 30)) self.Fridges = [ devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)), devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax))] self.hasDishwasher = random.randint(0, 5) < 4 # 60% # Determine washing days self.generateWashingdays(min(5 + external_inputs.numKids, 7)) # Dermine Dishwasher times if self.hasDishwasher: self.generateDishwashdays(min(5 + external_inputs.numKids, 7))
def __init__(self, parttime=False, jobless=False): self.generate() self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption, 700) * external_inputs.consumptionFactor # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html assert (parttime == False or jobless == False) # ONLY one van be active age = random.randint(26, 65) if parttime: self.Persons = [persons.PersonWorker(age), persons.PersonParttimeWorker(age)] elif jobless: self.Persons = [persons.PersonWorker(age), persons.PersonJobless(age)] else: self.Persons = [persons.PersonWorker(age), persons.PersonWorker(age)] # To make life easy, only one persons.Person will use the electric vehicle, so only the main persons.Person will receive a driving distance self.Persons[0].setDistanceToWork(external_inputs.distancetoWork) if (random.randint(1, 2) == 1): self.Fridges = [ devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeBigMin, external_inputs.ConsumptionFridgeBigMax))] else: self.Fridges = [devices.DeviceFridge( random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(external_inputs.ConsumptionFridgeSmallMin,external_inputs.ConsumptionFridgeSmallMax))] self.hasDishwasher = random.randint(0, 5) < 2 # 40% # Determine washing days self.generateWashingdays(random.randint(3, 4)) # Dermine Dishwasher times if self.hasDishwasher: self.generateDishwashdays(3)
def __init__(self): self.generate() self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption, 400) * external_inputs.consumptionFactor # kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html self.Persons = [persons.PersonParttimeWorker(random.randint(26, 65))] # For information about commuters, see this: # http://www.kimnet.nl/publicatie/mobiliteitsbalans-2013 # Approx 50% uses the car to commute, which is our interrest as this part can be replaced by (PH)EV # http://www.cbs.nl/NR/rdonlyres/13516DAC-36E1-47B7-9918-2364EF7D0B48/0/2011k2v4p34art.pdf # 3 out of 5 working people don't work in town. Fair to assume that these people commute by car # Average commute distance is not too clear from multiple sources, such as the once above. Something around 20km seems to be average in most sources # However 30 is also mentioned: http://www.nederlandheeftwerk.nl/index.php/cms_categorie/58707/bb/1/id/58707 # Depends also on the region and work in vicinity. if (random.randint(1, 2) == 1): self.Fridges = [ devices.DeviceFridge(random.randint(external_inputs.ConsumptionFridgeBigMin, external_inputs.ConsumptionFridgeBigMax))] else: self.Fridges = [devices.DeviceFridge( random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(external_inputs.ConsumptionFridgeSmallMin, external_inputs.ConsumptionFridgeSmallMax))] # We synchronize the dishwasher and dryer based on the annual consumption. Furthermore, this also influences the number of washes. self.hasDishwasher = random.randint(0, 5) == 0 # 20% # Determine washing days self.generateWashingdays(random.randint(2, 3)) # Dermine Dishwasher times if self.hasDishwasher: self.generateDishwashdays(3)
def generate(self, age): # Variates could also use a gauss distribution, some persons are more predictable than others ;) self.Age = age # Routine of people # 7*60= 420 min --> mean is 420/60= 7:00 wake up with 1,5h deviation self.WorkdayWakeUp_Avg = profilegentools.gaussMinMax(7 * 60, 1.5 * 60) self.WorkdayWakeUp_Variate = 10 self.WorkdayLeave_Avg = self.WorkdayWakeUp_Avg + profilegentools.gaussMinMax( 45, 15) self.WorkdayLeave_Variate = 10 self.WorkdayArrival_Avg = self.WorkdayLeave_Avg + profilegentools.gaussMinMax( 8.5 * 60, 30) self.WorkdayArrival_Variate = 15 self.WorkdaySport_Avg = self.WorkdayArrival_Avg + profilegentools.gaussMinMax( 2.5 * 60, 2 * 60) self.WorkdaySport_Variate = 15 self.WorkdaySportDuration_Avg = profilegentools.gaussMinMax( 1.5 * 60, 30) self.WorkdaySportDuration_Variate = 10 self.WorkdayBedTime_Avg = self.WorkdayWakeUp_Avg + profilegentools.gaussMinMax( 15.5 * 60, 30) self.WorkdayBedTime_Variate = 15 self.WorkdayActivities = random.randint( external_inputs.personWeekdayActivityChanceMin, external_inputs.personWeekdayActivityChanceMax ) / 100 # Chance to conduct random activities self.WeekendWakeUp_Avg = profilegentools.gaussMinMax(9 * 60, 2 * 60) self.WeekendWakeUp_Variate = 20 self.WeekendSport_Avg = profilegentools.gaussMinMax(14 * 60, 5 * 60) self.WeekendSport_Variate = 60 self.WeekendSportDuration_Avg = profilegentools.gaussMinMax( 1.5 * 60, 30) self.WeekendSportDuration_Variate = 30 self.WeekendBedTime_Avg = profilegentools.gaussMinMax(23 * 60, 30) self.WeekendBedTime_Variate = 10 self.WeekendActivities = random.randint( external_inputs.personWeekendActivityChanceMin, external_inputs.personWeekendActivityChanceMax) / 100 # For a new deepcopy, the following values should be regenerated self.WorkdaySportday = 1 + random.randint(1, 5) self.WeekendSportday = 6 * random.randint(0, 1) self.Workdays = range(1, 6) self.DistanceToWork = 0 self.CookingTime = self.WorkdayArrival_Avg + 30 self.showerMorning = True self.showerDays = list(range(0, 7)) self.showerDuration = profilegentools.gaussMinMax(8, 3) # Generate Heat parameters self.generateHeatParams()
def generate(self): # The Yearly consumption is the normal consumption of domestic appliances as found for years in households. This excludes: # (PH)EV, Heat Pump, PV self.ConsumptionYearly = profilegentools.gaussMinMax(external_inputs.yearlyConsumption, 500) # kWh # According to http://www.energie-nederland.nl/wp-content/uploads/2013/04/EnergieTrends2014.pdf, this is the distribution for devices we are interested in: # yearly energy consumption self.ConsumptionShare = {"Electronics": profilegentools.gaussMinMax(17, 3), "Lighting": profilegentools.gaussMinMax(6, 2), "Standby": profilegentools.gaussMinMax(35, 6)} self.Persons = [] self.Consumption = {"Total": [], "Other": [], "Inductive": [], "Fridges": [], "Electronics": [], "Lighting": [], "Standby": []} self.consumptionFactor = {"Other": [], "Inductive": [], "Fridges": [], "Electronics": [], "Lighting": [], "Standby": []} self.HeatGain = {"PersonGain": [], "DeviceGain": [], "SolarGain": [], "VentFlow": [], "Total": []} self.HeatDemand = {"DHWDemand": [], "Total": []} # Heat gain factors from devices self.HeatGainShare = {"Other": 0.3, "Fridges": 0.5, "Electronics": 1.0, "Lighting": 0.8, "Standby": 1.0} self.ReactiveConsumption = {"Total": [], "Other": [], "Inductive": [], "Fridges": [], "Electronics": [], "Lighting": [], "Standby": []} self.ReactiveFactor = {"Other": 1, "Inductive": (random.randint(70, 90) / 100), "Fridges": (random.randint(50, 65) / 100), "Electronics": -(random.randint(99, 100) / 100), "Lighting": -(random.randint(99, 100) / 100), "Standby": -(random.randint(75, 85) / 100)} self.PVProfile = [] self.Occupancy = [] self.hasDishwasher = False self.hasInductionCooking = random.randint(1, 10) < 4 self.hasEV = False self.hasHP = False self.hasCHP = False self.hasFloorHeating = True self.numOfWashes = 0 # weekly self.numOfDishwashes = 0 # Weekly self.WashingDays = [] self.washingMoment = [-1] * 7 self.DishwashDays = [] self.DishwashMoment = [-1] * 7 # devices self.Fridges = [] self.Devices = {"Kettle": devices.DeviceKettle(external_inputs.ConsumptionKettle), "Lighting": devices.DeviceLighting(), "Electronics": devices.DeviceElectronics(), "Cooking": devices.DeviceCooking(), "Ventilation": devices.DeviceVentilation(external_inputs.ConsumptionHouseVentilation), "Ironing": devices.DeviceIroning(external_inputs.ConsumptionIron), "Vacuumcleaner": devices.DeviceVacuumcleaner(external_inputs.ConsumptionVacuumcleaner), "WashingMachine": devices.DeviceWashingMachine(), "DishwashMachine": devices.DeviceDishwasher(), "ElectricalVehicle": devices.DeviceElectricalVehicle(), "PVPanel": devices.DeviceSolarPanel()} self.HeatingDevices = {"PersonGain": heatdemand.PersonGain(), "Thermostat": heatdemand.Thermostat(), "VentFlow": heatdemand.Ventilation(), "DHWDemand": heatdemand.DHWDemand()} self.familyActivites = random.randint(external_inputs.familyOutingChanceMin, external_inputs.familyOutingChanceMax) / 100