项目背景内容介绍:
伦敦一个区域(Haringey)的房屋供暖消耗能源的模拟项目。之前的学生完成了该地区的 Synthetic population
(综合人口生成)的步骤,对于该地区的每个人,我们现在知道了他属于哪个家庭,他的年龄,职业状况,等等社会特征。根据另一组数据源建立的 markov chain,我们也知道他每一天的各个时段在哪里做什么(每
10 分钟为单位),是否在家,如果在家的话,他是否在睡觉。
我们假设,只要一个家里(Household)有至少一个人在家,家里的供暖系统就会被开启。初始的房屋室内温度是 20 度。如果家里没有人,家里的供暖系统就会被调为 0 度;如果有至少一个人且至少一个人不在睡觉(是活跃的),那么家里的供暖系统会被自动设定为 22 度;如果家里所有的人都在睡觉,那么家里的供暖系统会设定为 18 度。(这些部分都已经做好了)
为了简单化模型,现在片区的所有房屋都被假设为是一个 60 平米的固定大小的单层长方形盒子,房屋的隔热性能和材料(U-value),以及住户的散热率都是固定的。
现在该地区每一个人口的社会属性,属于哪一个家庭,以及家庭里每一个成员的日程安排(是否在家)都知道了,跟据这些数据做的地区供暖能源消耗计算模型也做好了(见 project 文件夹 Urban-Occupants-
Paper),所有项目的代码和文件都在以下的文件包里,特殊的说明和注意事项在 README.md 文件里。
现在的任务是,与其假设房屋都是统一大小的正方形盒子,我们根据该片区真实的每个家庭所在房屋数据,随机赋予房子真实的房屋面积(Floor area)和房屋隔热性能,具体方法如下:根据该片区的人口普查结果,该片区有 7 类房屋:
0 Detached whole house or bungalow
0 Semi-detached whole house or bungalow
0 Terraced whole house or bungalow
0 Purpose built flat or maisonette
0 Converted or shared house (belongs to the flat or maisonette category)
0 Caravan (including rooms, caravan, mobile homes, houseboat)
0 Other (flats and maisonette in commercial buildings)
在把 dwelling type 加入了 synthetic population (合成人口数据)之后,对于人口中的每一个人,我们都知道了他所住房子的 dwelling_type 类型(以上 7 类中的一类):(这个部分已经完成,除了有一个 bug 存在,具体下面介绍,希望能加以解决)。现在的任务就是在计算供暖耗能的时候,根据房屋的类型,从该类型的所有行数据里随机抽取一行代入计算。
请见 Haringey_All 表格,其中中每一行都是一个单位家庭,在名为 dwelling type 的列,每一个家庭的房屋类型(以上 7 类中的 6 类)都已经定义好了,其中 Other (flats and maisonette in commercial buildings) 没有被纳入,因为无法定义,它的特性赋值就用默认定值(见下面的表格)。其余的需要随机抽样的相关的列有:
-Floor Area: 房屋占地面积
-Window to wall ratio (WWR): 窗户与墙的面积比
-U-value wall: 墙的热传导性
-U-value roof: 屋顶的热传导性
-U-value floor: 地板的热传导 -U-value window 窗户的热传导
现在需要的是从同一个类型的 dwelling_type 数据集合中随机抽取 floor area, U-value wall,
U-value roof 和 U-value window,赋予给这个房子,取代原有的默认值。比如某一个房子已知是‘Detached whole house or bungalow’类型,那么就从所有 dwelling_type 列叫‘Detached whole house or bungalow’ 的房屋数据里随机抽取一行,把相应的-Floor Area: 房屋占地面积, Window to wall ratio )WWR: 窗户与墙的面积比,U-value wall: 墙的热传导性,U-value roof:
屋顶的热传导性,U-value floor: 地板的热传导,U-value window 窗户的热传导 赋值给该房屋,现有的模块会自动计算供暖的能量消耗,把赋值完成就可以了。如果某一个房子是‘Other
(flats and maisonette in commercial buildings)’ 类型的,那就不用抽样了,继续沿用之前的默
认定值就可以了。
要注意的是,不同的个人可以属于同一个家庭,因而住同一个房屋,注意不要将不同的房屋性质赋予给同一个房子。
Other (flats and maisonette in commercial buildings) 类的房子特性赋值表:(均为默认定值)
Parameter name |
Value |
Parameter name |
Value |
|||||||
Thermal mass capacity |
9.9 MJ/K |
Initial indoor temp |
20 ℃ |
|||||||
165000 x floor area [J/K] |
||||||||||
Thermal mass area |
150 2 |
Absent set point |
0 ℃ |
|||||||
2.5 x floor area [m^2] |
||||||||||
Floor area |
60 2 |
Passive set point |
18 |
℃ |
||||||
Room height |
2.5 m |
Active set point |
22 ℃ |
|||||||
Window to wall ratio |
0.19 |
Maximum heating power |
10 kW |
|||||||
U-value wall |
0.26 W/( 2K) |
Metabolic heat active |
140 W |
|||||||
U-value roof |
0.12 W/( 2K) |
Metabolic heat passive |
70 W |
|||||||
U-value floor |
0.40 W/( 2K) |
Metabolic heat < 18 |
0.75 |
|||||||
U-value window |
1.95 W/( 2K) |
Natural ventilation rate |
0.65 l/(s 2) |
|||||||
Transmission adjustment ground |
0.91 |
|||||||||
除此之外其余 6 类的房子特性赋值表: |
||||||||||
Parameter name |
Value |
Parameter name |
Value |
|||||||
Thermal mass capacity |
随机在 Haringey_All |
表格中 |
Initial indoor temp |
20 |
℃ |
|||||
165000 x floor area [J/K] |
相对应的房子类别中随机抽 |
|||||||||
样 floor area 的值,再乘上相 |
||||||||||
应的系数: 165000 |
||||||||||
Thermal mass area |
随机在相对应的房子类别中 |
Absent set point |
0 |
℃ |
||||||
2.5 x floor area [m^2] |
随机抽样 floor area 的值,再 |
|||||||||
乘上相应的系数: 2.5 |
||||||||||
Floor area |
随机在相对应的房子类别中 |
Passive set point |
18 |
℃ |
||||||
随机抽样 floor area 的值 |
||||||||||
Room height |
2.5 m |
Active set point |
22 ℃ |
|||||||
Window to wall ratio |
随机在相对应的房子种类的 |
Maximum heating power |
10 kW |
|||||||
所有相应数据中随机抽样 |
||||||||||
WWR 列的值 |
||||||||||
U-value wall |
随机在相对应的房子种类的 |
Metabolic heat active |
140 W |
|||||||
所有相应数据中随机抽样 U- |
|||
value wall 的值 |
|||
U-value roof |
随机在相对应的房子种类的 |
Metabolic heat passive |
70 W |
所有相应数据中随机抽样 U- |
|||
value roof 的值 |
|||
U-value floor |
随机在相对应的房子种类的 |
Metabolic heat < 18 |
0.75 |
所有相应数据中随机抽样 U- |
|||
value floor 的值 |
|||
U-value window |
随机在相对应的房子种类的 |
Natural ventilation rate |
0.65 l/(s 2) |
所有相应数据中随机抽样 U- |
|||
value window 的值 |
|||
Transmission adjustment |
0.91 |
||
ground |
|||
另一个任务:
修复现在执行 make file 第 44 行
过程中 assertion 的 bug (数据数量不一样的问题) 见下图导入的 nomis 数据的总量不等于之前导入 Haringey 地区的 household 的总量 (理论上必须相等)
可能原因:
在 urbanoccupants 的 urbanoccupants 文件夹里的 census.py 中的两个 function 的问题: def read_household_type_data (geographical_layer = GeographicalLayer.LSOA)
def read_dwelling_type_data (geographical_layer = GeographicalLayer.LSOA)
其余的项目文件大致介绍:
在 Urban Occupants Paper 文件夹中:
Config 文件夹中的 default.yaml 文件盛放房屋特性的数值(现在都是定值)。其它文件都类似,就是修改了一两个变量的数值而已。
Data 文件夹中盛放模型需要的数据源。(不需要更改)
Doc 文件夹中是生成的模拟结果文档和图像。(不需要更改)
Scripts 文件夹中放了: Plot 文件夹:放着生成图像结果的代码 (不需要改)
Tus 文件夹:放着对应人口和家庭数据的方法;生成当地综合人口的生成过程和方法,模拟一个人在不在家的方法,还有计算不同的社会和家庭特性之间的联系的算法。(不需要改)
Simulationinput.py 文件里放了运行模型需要的数据,应该需要更新相对应的房屋特性的部分。
Urbanoccupants 文件夹中的 tests 文件夹里放了生成每个人每天行程(判断是否在家)的方法(不需要改)。
Urbanoccupants 文件夹里的 urbanoccupants 里的部分文件应该需要相应修改:
Census.py 里放了导入网上的英国人口普查数据,以及数据处理验证的过程。
Synthpop.py 里放了形成综合人口的过程,其中最近刚加入 dwelling type 作为一个新变量。 Utils.py 里放了读取输入数据的方法。
Types.py 里放了人口和家庭的种类划分。 Person.py 里放了判断一个人什么时段在家的算法。
Hipf.py 里放了让每个人归属于特定的家庭,以防重复或者错误(两个人属于同一个家庭却赋予了不同的值)的层级算法。
运行模型的方法: Linux 和 IOS 系统可以直接执行 makefile, 但是 windows 得一行一行执行。
这个链接里有具体的运行模型的条件和要求:
https://github.com/gw382/urban-occupants-paper
需要安装 conda, Git, Java 1.8