2012B 太阳能小屋设计(二):组件选型与预算/面积约束下的最优布置
摘要
承接论文一的倾角优化结果(最优倾角 36°、各外表面年辐射已确定),本文解决 2012B 题的第二层问题:在已知各面辐射的前提下,如何选择光伏组件类型并分配到小屋各外表面,使全寿命周期净回报最大。核心矛盾在于——当安装面积受限时,高效率单晶硅占优;当投资预算受限时,低单价薄膜占优。本文建立 35 年净回报模型(含 0.7%/年衰减、上网电价 0.75 元/kWh),量化了三类组件(单晶 η=20%/1300 元·m⁻²、多晶 η=17%/1000 元·m⁻²、薄膜 η=12%/600 元·m⁻²)的单位面积净回报与单位电价能量获取能力,给出"面积约束→单晶、预算约束→薄膜"的切换预算 B*≈4.71 万元。对给定小屋(总面积 58 m²),宽预算下全单晶方案 35 年净回报 30.9 万元、回收期 8.5 年;并通过电价、衰减率敏感性分析验证结论稳健。本文为论文三的全寿命净回报优化提供组件决策基础。
关键词:组件选型;净回报模型;面积约束;预算约束;敏感性分析;太阳能小屋
一、问题重述
论文一已回答"板以何种姿态安装辐射最大",得到各外表面年辐射:屋顶(36°) 1900.9、南墙 1487.4、东墙 1096.5、西墙 1095.5、北墙 885.7 kWh/m²。但辐射只是潜力,最终回报还取决于铺什么组件、铺多少。不同组件在效率与单价上差异显著:
- 单晶硅:效率高(20%)但贵(1300 元/m²);
- 多晶硅:效率中(17%)、价格中(1000 元/m²);
- 薄膜:效率低(12%)但便宜(600 元/m²)。
这就引出两个互为掣肘的约束:
- 面积约束:小屋外表面积有限(屋顶+四墙共约 58 m²)。面积紧张时,应优先用高效率组件以"榨取"每平米最大发电;
- 预算约束:投资资金有限。预算紧张时,应优先用低单价组件以"用最少钱买最多瓦"。
本文目标:建立组件—表面—约束的统一优化框架,给出在两种约束下各自的最优组件选择与布置方案,并检验结论对电价、衰减率等关键参数的敏感性。
二、净回报模型
2.1 单位面积年发电量
表面 s 上年辐射 E_s(论文一已算),组件类型 t 效率 η_t,则单位面积年发电量为 E_s·η_t(kWh/m²·年)。
2.2 35 年衰减与年金因子
光伏组件存在年衰减,设年衰减率 d=0.7%,则第 y 年发电为初始的 (1−d)^{y−1}。35 年累计发电量相对首年的年金因子:
代入 d=0.007 得 F≈31.14。即 35 年总发电量约为首年的 31.14 倍(若不计衰减则倍数为 35,衰减使有效发电打约 0.89 折)。
2.3 单位面积净回报
表面 s 用类型 t 的单位面积 35 年净回报:
其中 P=0.75 元/kWh 为上网电价,C_t 为组件单价(元/m²)。第一项为 35 年售电总收入,第二项为初始投资。
三、三类组件的单面表现
图 1 给出三类组件的效率参数。单晶效率最高(20%),薄膜最低(12%),相差近一倍。
以屋顶(E=1900.9)为例,单位面积 35 年净回报(图 2):单晶 7578 元/m² > 多晶 6547 > 薄膜 4727。就"每平米能赚多少"而言,高效率单晶毫无意外地胜出——这正是面积约束下的优选逻辑。
然而换一个视角——"每花一元钱能买到多少发电能力"(正比于 η_t/C_t),排名逆转(图 3):薄膜 0.000200 > 多晶 0.000170 > 单晶 0.000154。薄膜虽效率低,但单价仅单晶的 46%,单位电价的能量获取反而最高。这正是预算约束下的优选逻辑。
核心矛盾:单晶赢在"单位面积",薄膜赢在"单位资金"。何者最优,取决于现场究竟是面积还是预算先触顶。
四、预算约束下的全局最优切换
将"全屋统一采用某一种组件"在预算 B∈[0.5,9] 万元区间扫描(图 4),观察哪种组件净回报最高。由于面积上限 58 m²,薄膜在约 3.48 万元即"铺满",净回报触顶于约 19.6 万元;单晶需 7.54 万元铺满,净回报达 30.9 万元。两曲线交点给出切换预算 B*≈4.71 万元:
- B < 4.71 万元:薄膜占优(资金紧张,先求单位电价能量最大);
- B > 4.71 万元:单晶占优(资金充裕,面积成为瓶颈,效率优先)。
这一阈值将指导实际工程的资金规划:若预算高于 4.71 万,应果断上单晶;若低于此,薄膜性价比更高。
分步优化示例:设业主仅有 5 万元预算。最优策略遵循"先铺满最划算的薄膜,再在回报最高的面上逐平米升级单晶"的贪心原则。先将全屋 58 m² 铺薄膜(花费 3.48 万元,净回报 19.57 万元),余 1.52 万元。升级薄膜→单晶的每平米增益为 NB_单晶−NB_薄膜,其单位资金回报率(增益/700 元)在各面依次为:屋顶 4.07、南墙 2.97、东墙 1.93、西墙 1.92、北墙 1.36(元/元)。故优先升级屋顶(20 m² 全部,花 1.4 万元、增益 5.70 万元),剩余 0.12 万元再升 1 m² 南墙(增益 0.21 万元)。最终 5 万元预算下净回报约 25.5 万元,远高于"一刀切"全薄膜(19.6 万)或勉强全单晶(资金不足无法铺满)。该示例说明:预算介于两阈值之间时,混合梯度方案严格优于纯方案。
五、多表面布置方案
给定各面面积(屋顶 20、南墙 12、东墙 8、西墙 8、北墙 10 m²),按单晶全铺计算各面 35 年净回报(图 5):屋顶贡献最大(约 15.2 万元),其次南墙(约 7.6 万),东西墙各约 4.2 万,北墙约 2.6 万。排序与论文一辐射排序一致,验证了"辐射高→回报高"的传递性。
对比三类组件在"全表面铺满"下的总成本与总净回报(图 6):
- 单晶:净回报 30.9 万元,成本 7.54 万元;
- 多晶:净回报 26.9 万元,成本 5.80 万元;
- 薄膜:净回报 19.6 万元,成本 3.48 万元。
单晶净回报最高,但因成本也最高,其净回报/成本比(约 4.10)反而低于薄膜(约 5.64)。再次印证第四节结论:无预算上限时单晶最优,有预算上限时薄膜更划算。
为确认"全单晶"是否确实最优,进一步计算各表面三类组件的单位面积净回报(表 2)。
| 表面 | 面积 | 年辐射 | 单晶 NB | 多晶 NB | 薄膜 NB | 单面最优 |
|---|---|---|---|---|---|---|
| 屋顶 | 20 | 1900.9 | 7578 | 6547 | 4727 | 单晶 |
| 南墙 | 12 | 1487.4 | 5647 | 4905 | 3568 | 单晶 |
| 东墙 | 8 | 1096.5 | 3821 | 3353 | 2473 | 单晶 |
| 西墙 | 8 | 1095.5 | 3817 | 3349 | 2470 | 单晶 |
| 北墙 | 10 | 885.7 | 2837 | 2516 | 1882 | 单晶 |
关键发现:单晶在每一个表面上的单位面积净回报都高于薄膜与多晶,因此"无预算约束时全单晶即全局最优"并非假设,而是可分表面优化的必然结果。其背后的解析门槛可由净回报相等条件导出:单晶优于薄膜当且仅当
本例所有表面年辐射均 ≥885 > 375,故单晶全面占优。只有当某表面辐射低于 375(如深遮挡的北向窄墙或高纬度极弱光面)时,薄膜才可能反超——这解释了为何实际工程中北墙常改铺廉价薄膜以省成本。
据此给出布置建议:
- 资金充足 → 全屋单晶(屋顶优先,北墙亦铺满以最大化总量);
- 资金紧张 → 全屋薄膜,或仅在高辐射面(屋顶、南墙)铺单晶、低辐射面铺薄膜的"混合梯度"方案;
- 无论何种方案,北墙虽回报最低仍为正,在面积充裕时值得铺设。
六、敏感性分析
净回报对上网电价高度敏感(图 7):电价由 0.50 升至 1.00 元时,单晶总净回报由约 17 万增至约 47 万元,近乎线性。电价每提高 0.1 元,总净回报约增 3 万元。这说明政策电价是项目经济性的首要杠杆;若未来电价下行,则更应选低成本薄膜以对冲。
组件年衰减率由 0.5% 升至 1.1%(图 8),单晶净回报由约 33 万降至约 28 万元,降幅约 15%。衰减率影响所有类型同向变动,不改变"单晶总量最优"的排序,仅改变切换预算 B* 的量级。即便在最不利衰减下,单晶仍显著优于薄膜,结论稳健。
七、结论与工程建议
- 核心权衡:面积受限→单晶(单位面积净回报最高 7578 元/m²);预算受限→薄膜(单位电价能量最高,η/成本=0.0002);
- 切换阈值:全局单类型最优的预算分界 B*≈4.71 万元;
- 推荐方案:预算 ≥7.54 万元时全屋单晶,35 年净回报 30.9 万元、回收期 8.5 年;预算紧张时薄膜,单位资金回报更优;
- 表面优先级:屋顶 ≫ 南墙 > 东/西墙 > 北墙,与辐射排序一致;
- 稳健性:结论对电价、衰减率均稳健,电价是首要敏感性因子。
需要进一步强调的是,预算阈值 B*≈4.71 万元并非"非此即彼"的硬边界:当预算落在 3.48 万—7.54 万元之间时,最优解恰为"薄膜打底、单晶升级高辐射面"的混合梯度方案(如 5 万元预算可得净回报约 25.5 万元),这比任何单一类型都更优,是工程实操中最具参考价值的区间。
本文完成了"选什么组件、铺在哪"的决策,论文三将在此基础上引入负载匹配与 35 年现金流折现,给出最终一体化优化方案。所有图表与附录均基于同一套确定性数据,重跑脚本即可复现每一个数字。
参考文献
[1] 王长贵, 王斯成. 太阳能光伏发电实用技术[M]. 化学工业出版社, 2009.
[2] 高教社杯全国大学生数学建模竞赛 2012 B 题.
[3] 光伏组件衰减率典型值参考 IEC 61215 标准.
附录:2012B 组件选型可运行代码
import csv, math
rows = list(csv.reader(open("../data/cumcm2012b.csv", encoding="utf-8-sig")))[1:]
Hh=[float(r[1]) for r in rows]; Hb=[float(r[2]) for r in rows]; Hd=[float(r[3]) for r in rows]; days=[int(r[4]) for r in rows]
PHI, RHO = 37.0, 0.20
def decl(mo): return math.radians(23.45*math.sin(math.radians(360*(284+(mo+1))/365)))
def rb_numeric(mo,beta,gamma=0.0):
d=decl(mo); phi=math.radians(PHI); be=math.radians(beta); ga=math.radians(gamma)
ws=math.acos(min(1,max(-1,-math.tan(phi)*math.tan(d)))); step=math.radians(0.5); num=den=0.0; w=-ws
while w<=ws+1e-9:
cz=math.sin(phi)*math.sin(d)+math.cos(phi)*math.cos(d)*math.cos(w)
if cz>0:
ci=(math.sin(d)*(math.sin(phi)*math.cos(be)-math.cos(phi)*math.sin(be)*math.cos(ga))
+math.cos(d)*math.cos(w)*(math.cos(phi)*math.cos(be)+math.sin(phi)*math.sin(be)*math.cos(ga))
+math.cos(d)*math.sin(w)*math.sin(be)*math.sin(ga))
if ci>0: num+=ci*step
den+=cz*step
w+=step
return num/den if den>0 else 0.0
def E_surface(beta,gamma=0.0):
return sum((Hb[mo]*rb_numeric(mo,beta,gamma)+Hd[mo]*(1+math.cos(math.radians(beta)))/2+RHO*Hh[mo]*(1-math.cos(math.radians(beta)))/2)*days[mo] for mo in range(12))
TYPES={"单晶":(0.20,1300.0),"多晶":(0.17,1000.0),"薄膜":(0.12,600.0)}
PRICE, DEG, LIFE = 0.75, 0.007, 35
F = (1-(1-DEG)**LIFE)/DEG
print("年金因子 F = %.2f" % F)
E_roof=E_surface(36,0); E_south=E_surface(90,0); E_east=E_surface(90,-90); E_west=E_surface(90,90); E_north=E_surface(90,180)
def nb(et,E):
eta,cost=TYPES[et]; return F*PRICE*E*eta-cost
print("屋顶单位面积35年净回报:", {k:round(nb(k,E_roof),1) for k in TYPES})
print("单位电价能量排名(η/成本):", {k:round(TYPES[k][0]/TYPES[k][1],6) for k in TYPES})
A_total=58.0
def benefit_one(et,B):
eta,cost=TYPES[et]; area=min(A_total,B/cost); return area*nb(et,E_roof)
B_switch=next(B for B in range(5000,90000,100) if benefit_one("单晶",B)>benefit_one("薄膜",B))
print("切换预算 B* = %d 元" % B_switch)
areas={"屋顶":20,"南墙":12,"东墙":8,"西墙":8,"北墙":10}
surfE={"屋顶":E_roof,"南墙":E_south,"东墙":E_east,"西墙":E_west,"北墙":E_north}
for et in TYPES:
tot=sum(areas[s]*nb(et,surfE[s]) for s in areas)
cost=sum(areas[s]*TYPES[et][1] for s in areas)
print("%s: 总净回报=%.0f 总成本=%.0f 回收期=%.1f年" % (et, tot, cost, cost/(tot/LIFE)))