Skip to content

Commit 2550da7

Browse files
authored
Merge pull request #1947 from NREL/sink_schedule_bugfix
Sink schedule bugfix
2 parents 2c17beb + f7742cf commit 2550da7

21 files changed

+81756
-81596
lines changed

BuildResidentialScheduleFile/measure.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<schema_version>3.1</schema_version>
44
<name>build_residential_schedule_file</name>
55
<uid>f770b2db-1a9f-4e99-99a7-7f3161a594b1</uid>
6-
<version_id>84287be5-f5b6-4191-a14d-629c6e736c03</version_id>
7-
<version_modified>2025-03-10T21:01:34Z</version_modified>
6+
<version_id>69403107-8623-4a7a-9c1e-ad5a1179a10a</version_id>
7+
<version_modified>2025-03-11T15:55:21Z</version_modified>
88
<xml_checksum>03F02484</xml_checksum>
99
<class_name>BuildResidentialScheduleFile</class_name>
1010
<display_name>Schedule File Builder</display_name>
@@ -229,7 +229,7 @@
229229
<filename>schedules.rb</filename>
230230
<filetype>rb</filetype>
231231
<usage_type>resource</usage_type>
232-
<checksum>C9405297</checksum>
232+
<checksum>A59B5F18</checksum>
233233
</file>
234234
<file>
235235
<filename>shower_cluster_size_probability.csv</filename>
@@ -931,7 +931,7 @@
931931
<filename>test_build_residential_schedule_file.rb</filename>
932932
<filetype>rb</filetype>
933933
<usage_type>test</usage_type>
934-
<checksum>608D66AA</checksum>
934+
<checksum>AF58D77B</checksum>
935935
</file>
936936
</files>
937937
</measure>

BuildResidentialScheduleFile/resources/schedules.rb

+17-12
Original file line numberDiff line numberDiff line change
@@ -1111,21 +1111,26 @@ def generate_sink_schedule(mkc_activity_schedules)
11111111
duration_precomputed = weighted_random_precompute(sink_duration_probs)
11121112
# Generate sink events for each day
11131113
@total_days_in_year.times do |day|
1114-
cluster_per_day.times do
1114+
todays_probable_steps = sink_activity_probable_mins[day * @mkc_ts_per_day..((day + 1) * @mkc_ts_per_day - 1)]
1115+
todays_probablities = todays_probable_steps.map.with_index { |p, i| p * hourly_onset_prob[i / @mkc_ts_per_hour] }
1116+
# Normalize probabilities and select start time
1117+
prob_sum = todays_probablities.sum(0)
1118+
normalized_probabilities = todays_probablities.map { |p| p * 1 / prob_sum }
1119+
precomputed_cumweights = weighted_random_precompute(normalized_probabilities)
1120+
generated_clusters = 0
1121+
max_attempts = 200
1122+
attempts = 0
1123+
while generated_clusters < cluster_per_day && attempts < max_attempts
11151124
# Get probability distribution for today's events
1116-
todays_probable_steps = sink_activity_probable_mins[day * @mkc_ts_per_day..((day + 1) * @mkc_ts_per_day - 1)]
1117-
todays_probablities = todays_probable_steps.map.with_index { |p, i| p * hourly_onset_prob[i / @mkc_ts_per_hour] }
1118-
1119-
# Normalize probabilities and select start time
1120-
prob_sum = todays_probablities.sum(0)
1121-
normalized_probabilities = todays_probablities.map { |p| p * 1 / prob_sum }
1122-
cluster_start_index = weighted_random(@prngs[:hygiene], normalized_probabilities)
1123-
1124-
# Mark time slot as used
1125-
if sink_activity_probable_mins[cluster_start_index] != 0
1126-
sink_activity_probable_mins[cluster_start_index] = 0
1125+
cluster_start_index = weighted_random(@prngs[:hygiene], normalized_probabilities, precomputed_cumweights)
1126+
attempts += 1
1127+
if sink_activity_probable_mins[day * @mkc_ts_per_day + cluster_start_index] == 0
1128+
next # Sample again if time slot is already used
11271129
end
11281130

1131+
# Mark time slot as used
1132+
sink_activity_probable_mins[day * @mkc_ts_per_day + cluster_start_index] = 0
1133+
generated_clusters += 1
11291134
# Generate events within this cluster
11301135
num_events = weighted_random(@prngs[:hygiene], events_per_cluster_probs, events_per_cluster_precomputed) + 1
11311136
start_min = cluster_start_index * 15

BuildResidentialScheduleFile/tests/test_build_residential_schedule_file.rb

+10-10
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def test_stochastic
6262
PlugLoadsTV: 1542.2,
6363
HotWaterDishwasher: 287.3,
6464
HotWaterClothesWasher: 322.6,
65-
HotWaterFixtures: 981.2,
65+
HotWaterFixtures: 1090.49,
6666
}
6767
assert_full_load_hrs_match(sf, expected_values, @tol)
6868
assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
@@ -147,7 +147,7 @@ def test_stochastic_location_detailed
147147
PlugLoadsTV: 1542.2,
148148
HotWaterDishwasher: 287.3,
149149
HotWaterClothesWasher: 322.6,
150-
HotWaterFixtures: 981.2,
150+
HotWaterFixtures: 1090.49,
151151
}
152152
assert_full_load_hrs_match(sf, expected_values, @tol)
153153
assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
@@ -187,7 +187,7 @@ def test_stochastic_debug
187187
PlugLoadsTV: 1542.2,
188188
HotWaterDishwasher: 287.3,
189189
HotWaterClothesWasher: 322.6,
190-
HotWaterFixtures: 981.2,
190+
HotWaterFixtures: 1090.49,
191191
Sleeping: 3101.7,
192192
}
193193
assert_full_load_hrs_match(sf, expected_values, @tol)
@@ -226,7 +226,7 @@ def test_random_seed
226226
PlugLoadsTV: 1517,
227227
HotWaterDishwasher: 304,
228228
HotWaterClothesWasher: 322,
229-
HotWaterFixtures: 936,
229+
HotWaterFixtures: 1146.15,
230230
}
231231
assert_full_load_hrs_match(sf, expected_values, @tol)
232232

@@ -261,7 +261,7 @@ def test_random_seed
261261
PlugLoadsTV: 1205,
262262
HotWaterDishwasher: 243,
263263
HotWaterClothesWasher: 263,
264-
HotWaterFixtures: 1049,
264+
HotWaterFixtures: 966.11,
265265
}
266266
assert_full_load_hrs_match(sf, expected_values, @tol)
267267
end
@@ -299,7 +299,7 @@ def test_10_min_timestep
299299
PlugLoadsTV: 1505,
300300
HotWaterDishwasher: 155.9,
301301
HotWaterClothesWasher: 138.4,
302-
HotWaterFixtures: 280.2,
302+
HotWaterFixtures: 345.7,
303303
}
304304
assert_full_load_hrs_match(sf, expected_values, @tol)
305305
assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))
@@ -392,7 +392,7 @@ def test_multiple_buildings
392392
PlugLoadsTV: 1542.2,
393393
HotWaterDishwasher: 287.3,
394394
HotWaterClothesWasher: 322.6,
395-
HotWaterFixtures: 981.2,
395+
HotWaterFixtures: 1090.49,
396396
}
397397
assert_full_load_hrs_match(sf, expected_values, @tol)
398398
elsif hpxml_bldg.building_id == 'MyBuilding_2'
@@ -408,7 +408,7 @@ def test_multiple_buildings
408408
PlugLoadsTV: 1205,
409409
HotWaterDishwasher: 229.8,
410410
HotWaterClothesWasher: 246.5,
411-
HotWaterFixtures: 956.4,
411+
HotWaterFixtures: 948.79,
412412
}
413413
assert_full_load_hrs_match(sf, expected_values, @tol)
414414
elsif hpxml_bldg.building_id == 'MyBuilding_3'
@@ -424,7 +424,7 @@ def test_multiple_buildings
424424
PlugLoadsTV: 1182.2,
425425
HotWaterDishwasher: 232.1,
426426
HotWaterClothesWasher: 206.8,
427-
HotWaterFixtures: 857.1,
427+
HotWaterFixtures: 955.2,
428428
}
429429
assert_full_load_hrs_match(sf, expected_values, @tol)
430430
end
@@ -473,7 +473,7 @@ def test_multiple_buildings_id
473473
PlugLoadsTV: 1205,
474474
HotWaterDishwasher: 229.8,
475475
HotWaterClothesWasher: 246.5,
476-
HotWaterFixtures: 956.4,
476+
HotWaterFixtures: 948.79,
477477
}
478478
assert_full_load_hrs_match(sf, expected_values, @tol)
479479
assert(!sf.schedules.keys.include?(SchedulesFile::Columns[:Sleeping].name))

Changelog.md

+1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ __Bugfixes__
2323
- Fixes possible error if there's a surface w/ interior unconditioned space and exterior "other housing unit".
2424
- BuildResidentialHPXML measure: Fixes error when specifying a combi boiler as the water heater type and a *shared* boiler as the heating system type.
2525
- BuildResidentialScheduleFile measure: Fixes out-of-sync shifting of occupancy and end use schedule resulting in activities even when there is no occupancy.
26+
- BuildResidentialScheduleFile measure: Fixes a small bug in sink schedule generation resulting in more concentrated schedule.
2627

2728
## OpenStudio-HPXML v1.9.1
2829

HPXMLtoOpenStudio/measure.xml

+14-14
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<schema_version>3.1</schema_version>
44
<name>hpxm_lto_openstudio</name>
55
<uid>b1543b30-9465-45ff-ba04-1d1f85e763bc</uid>
6-
<version_id>bf49e5d4-f560-4fe9-bd25-7ef114a94217</version_id>
7-
<version_modified>2025-03-10T21:01:35Z</version_modified>
6+
<version_id>098dfa7a-1a48-4e8b-8760-f33182629cf3</version_id>
7+
<version_modified>2025-03-11T15:55:27Z</version_modified>
88
<xml_checksum>D8922A73</xml_checksum>
99
<class_name>HPXMLtoOpenStudio</class_name>
1010
<display_name>HPXML to OpenStudio Translator</display_name>
@@ -501,67 +501,67 @@
501501
<filename>schedule_files/occupancy-stochastic-10-mins.csv</filename>
502502
<filetype>csv</filetype>
503503
<usage_type>resource</usage_type>
504-
<checksum>909344D3</checksum>
504+
<checksum>55BEFF64</checksum>
505505
</file>
506506
<file>
507507
<filename>schedule_files/occupancy-stochastic-30-mins.csv</filename>
508508
<filetype>csv</filetype>
509509
<usage_type>resource</usage_type>
510-
<checksum>909344D3</checksum>
510+
<checksum>55BEFF64</checksum>
511511
</file>
512512
<file>
513513
<filename>schedule_files/occupancy-stochastic-ev-charger.csv</filename>
514514
<filetype>csv</filetype>
515515
<usage_type>resource</usage_type>
516-
<checksum>AC791A12</checksum>
516+
<checksum>FEDC5979</checksum>
517517
</file>
518518
<file>
519519
<filename>schedule_files/occupancy-stochastic-mf-unit.csv</filename>
520520
<filetype>csv</filetype>
521521
<usage_type>resource</usage_type>
522-
<checksum>537893DB</checksum>
522+
<checksum>F464930F</checksum>
523523
</file>
524524
<file>
525525
<filename>schedule_files/occupancy-stochastic-mf-unit_2.csv</filename>
526526
<filetype>csv</filetype>
527527
<usage_type>resource</usage_type>
528-
<checksum>35C8ED5E</checksum>
528+
<checksum>C504DB69</checksum>
529529
</file>
530530
<file>
531531
<filename>schedule_files/occupancy-stochastic-mf-unit_3.csv</filename>
532532
<filetype>csv</filetype>
533533
<usage_type>resource</usage_type>
534-
<checksum>C1278017</checksum>
534+
<checksum>BBE33CAE</checksum>
535535
</file>
536536
<file>
537537
<filename>schedule_files/occupancy-stochastic-mf-unit_4.csv</filename>
538538
<filetype>csv</filetype>
539539
<usage_type>resource</usage_type>
540-
<checksum>EEB992CB</checksum>
540+
<checksum>1975BB7D</checksum>
541541
</file>
542542
<file>
543543
<filename>schedule_files/occupancy-stochastic-mf-unit_5.csv</filename>
544544
<filetype>csv</filetype>
545545
<usage_type>resource</usage_type>
546-
<checksum>6B074AE4</checksum>
546+
<checksum>AFC15AEC</checksum>
547547
</file>
548548
<file>
549549
<filename>schedule_files/occupancy-stochastic-mf-unit_6.csv</filename>
550550
<filetype>csv</filetype>
551551
<usage_type>resource</usage_type>
552-
<checksum>4CE3DD90</checksum>
552+
<checksum>5563187E</checksum>
553553
</file>
554554
<file>
555555
<filename>schedule_files/occupancy-stochastic.csv</filename>
556556
<filetype>csv</filetype>
557557
<usage_type>resource</usage_type>
558-
<checksum>9A61ABB2</checksum>
558+
<checksum>375096F7</checksum>
559559
</file>
560560
<file>
561561
<filename>schedule_files/print_diff.py</filename>
562562
<filetype>py</filetype>
563563
<usage_type>resource</usage_type>
564-
<checksum>901D504D</checksum>
564+
<checksum>80525046</checksum>
565565
</file>
566566
<file>
567567
<filename>schedule_files/setpoints-10-mins.csv</filename>
@@ -771,7 +771,7 @@
771771
<filename>test_schedules.rb</filename>
772772
<filetype>rb</filetype>
773773
<usage_type>test</usage_type>
774-
<checksum>40C7F0E6</checksum>
774+
<checksum>83E5B4A3</checksum>
775775
</file>
776776
<file>
777777
<filename>test_simcontrols.rb</filename>

0 commit comments

Comments
 (0)