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 addPV(self, area): self.hasPV = True self.pvArea = area self.pvEfficiency = random.randint(config.PVEfficiencyMin, config.PVEfficiencyMax) self.pvAzimuth = profilegentools.gaussMinMax(config.PVAzimuthMean, config.PVAzimuthSigma) if(self.pvAzimuth < 0): self.pvAzimuth = self.pvAzimuth + 360 self.pvElevation = profilegentools.gaussMinMax(config.PVAngleMean, config.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 addPV(self, area): self.hasPV = True self.pvArea = area self.pvEfficiency = random.randint(config.PVEfficiencyMin, config.PVEfficiencyMax) self.pvAzimuth = profilegentools.gaussMinMax(config.PVAzimuthMean, config.PVAzimuthSigma) if (self.pvAzimuth < 0): self.pvAzimuth = self.pvAzimuth + 360 self.pvElevation = profilegentools.gaussMinMax(config.PVAngleMean, config.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 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( 2010, 400 ) * config.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(config.ConsumptionFridgeBigMin, config.ConsumptionFridgeBigMax)) ] else: self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.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() numKids = round( max(min(4, random.gauss(1.7, 0.4)), 1) ) # http://www.cbs.nl/nl-NL/menu/themas/bevolking/faq/specifiek/faq-hoeveel-kinderen.htm self.ConsumptionYearly = profilegentools.gaussMinMax( 2010 + (700 * numKids), 500 + (numKids * 100) ) * config.consumptionFactor #kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html ageParents = random.randint(40, 55) if parttime == True: self.Persons = [ persons.PersonWorker(ageParents), persons.PersonParttimeWorker(ageParents) ] elif jobless == True: self.Persons = [ persons.PersonWorker(ageParents), persons.PersonJobless(ageParents) ] else: self.Persons = [persons.PersonWorker(ageParents)] self.Persons.append( copy.deepcopy(self.Persons[0]) ) #Make a copy, we expect a household to be rather synchronized! #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( round( max( 0, random.gauss(config.commuteDistanceMean, config.commuteDistanceSigma)))) #now add the kids for i in range(0, numKids): self.Persons.append( persons.PersonStudent( random.randint(ageParents - 3, ageParents + 3) - 30)) self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.ConsumptionFridgeSmallMax)) ] self.hasDishwasher = random.randint(0, 5) < 4 #60% #Determine washing days self.generateWashingdays(min(5 + numKids, 7)) #Dermine Dishwasher times if self.hasDishwasher: self.generateDishwashdays(min(5 + numKids, 7))
def __init__(self, parttime=False, jobless=False): self.generate() self.ConsumptionYearly = profilegentools.gaussMinMax( 3360, 700 ) * config.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 == True: self.Persons = [ persons.PersonWorker(age), persons.PersonParttimeWorker(age) ] elif jobless == True: 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( round( max( 0, random.gauss(config.commuteDistanceMean, config.commuteDistanceSigma)))) if (random.randint(1, 2) == 1): self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeBigMin, config.ConsumptionFridgeBigMax)) ] else: self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.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( 2010, 400 ) * config.consumptionFactor #kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html self.Persons = [persons.PersonWorker(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. self.Persons[0].setDistanceToWork( round( max( 0, random.gauss(config.commuteDistanceMean, config.commuteDistanceSigma)))) if (random.randint(1, 2) == 1): self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeBigMin, config.ConsumptionFridgeBigMax)) ] else: self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.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 __init__(self): self.generate() self.ConsumptionYearly = profilegentools.gaussMinMax( 2010, 400 ) * config.consumptionFactor #kWh http://www.nibud.nl/uitgaven/huishouden/gas-elektriciteit-en-water.html age = random.triangular(65, 85, 70) self.Persons = [persons.PersonRetired(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( round( max( 0, random.gauss(config.commuteDistanceMean, config.commuteDistanceSigma)))) if (random.randint(1, 2) == 1): self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeBigMin, config.ConsumptionFridgeBigMax)) ] else: self.Fridges = [ devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.ConsumptionFridgeSmallMax)), devices.DeviceFridge( random.randint(config.ConsumptionFridgeSmallMin, config.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 generate(self, age): #Variates could also use a gauss distribution, some persons are more predictable than others ;) self.Age = age 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(config.personWeekdayActivityChanceMin, config.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(config.personWeekendActivityChanceMin, config.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, age): #Variates could also use a gauss distribution, some persons are more predictable than others ;) self.Age = age 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( config.personWeekdayActivityChanceMin, config.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( config.personWeekendActivityChanceMin, config.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(3500, 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: 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(config.ConsumptionKettle),\ "Lighting": devices.DeviceLighting(),\ "Electronics": devices.DeviceElectronics(),\ "Cooking": devices.DeviceCooking(),\ "Ventilation": devices.DeviceVentilation(config.ConsumptionHouseVentilation),\ "Ironing": devices.DeviceIroning(config.ConsumptionIron),\ "Vacuumcleaner": devices.DeviceVacuumcleaner(config.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( config.familyOutingChanceMin, config.familyOutingChanceMax) / 100
def generate(self, age): self.Age = age # --edit-- shift the activity schedule self.WorkdayWakeUp_Avg = profilegentools.gaussMinMax(5 * 60, 0.5 * 60) self.WorkdayWakeUp_Variate = 10 self.WorkdayLeave_Avg = self.WorkdayWakeUp_Avg + \ profilegentools.gaussMinMax(2.5*60, 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(16*60, 30) self.WorkdayBedTime_Variate = 15 self.WorkdayActivities = random.randint( config.personWeekdayActivityChanceMin, config.personWeekdayActivityChanceMax ) / 100 # Chance to conduct random activities self.WeekendWakeUp_Avg = profilegentools.gaussMinMax(8 * 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(22 * 60, 30) self.WeekendBedTime_Variate = 10 self.WeekendActivities = random.randint( config.personWeekendActivityChanceMin, config.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()