欢迎光临
我们一直在努力

AI+Water|带你工艺认知到单个池子单个组分的实现

🌞欢迎来到机器学习的世界  🌈博客主页:卿云阁

💌欢迎关注🎉点赞👍收藏⭐️留言📝

🌟本文由卿云阁原创!

🌠本阶段属于练气阶段,希望各位仙友顺利完成突破

📆首发时间:🌹2021年3月12日🌹

✉️希望可以和大家一起完成进阶之路!

🙏作者水平很有限,如果发现错误,请留言轰炸哦!万分感谢!


目录

📜第一部分:工艺认知篇

💡了解污水厂大致的运行

💡了解 AAO 工艺的大致流程原理

📜第二部分:ASM1 理论篇

💡ASM 1模型的状态变量(13个)

💡ASM 1模型的生化动力学反应(8个)

💡化学计量常数(5个)

💡动力学参数(15个)

💡反应过程图解

 反应速率

各组分转化速率

📜第三部分:单个池子单个组分的手动计算和代码实现

📜第一部分:工艺认知篇

💡了解污水厂大致的运行

需要建立“进水 -> 物理处理 -> 生物处理 -> 深度处理 -> 出水”的宏观概念。

生物池(BiologicalTank)是核心,也是我们模拟的对象。

关键流向: 进水 (Influent)格栅    沉砂池   初沉池  生物反应池  二沉池  消毒/排放。

伴随流向: 污泥回流 (RAS) 和 剩余污泥排放 (WAS)。

💡了解 AAO 工艺的大致流程原理

AAO (Anaerobic-Anoxic-Oxic) 是脱氮除磷的经典工艺。

三个区的环境与功能:

厌氧区 (Anaerobic)(DO=0): 释磷(PAOs释放磷,吸收VFA)。

     聚磷菌释磷,易降解有机物 (VFA)并将其转化为体内的储能物质 PHB(类似人类存脂肪)【大分

子有机物变成小分子有机物】

宏观现象: 这一步,水里的磷浓度不降反升(细菌把体内的磷吐出来了),COD 开始下降。

            如果你发现厌氧池出水磷浓度比进水还高,说明释磷效果好,是好事!

缺氧区 (Anoxic)(DO<0.5): 反硝化脱氮(将硝酸盐还原为氮气)。

       反硝化菌吃掉水里的有机物 (COD),扒掉硝酸盐里的氧,把剩下的氮元素变成氮气。(这一步

需要外加C源)

好氧区 (Oxic)(DO>2.0): 硝化(氨氮转硝酸盐)、吸磷、去除BOD。

       硝化菌 (自养菌)从氨变成了硝酸盐,普通异养菌会把小分子的有机物变成CO2和水,聚磷菌

(PAOs)超量吸收磷

两条关键回流线:

内回流 (Internal Recycle): 好氧末端   缺氧前端(带回硝酸盐)。

外回流 (Sludge Return): 二沉池   厌氧前端(补充活性污泥)。

建模视角的AAO: 它就是三个串联的反应器(CSTR),每个反应器有不同的溶解氧(DO)设

定。

控制参数

参数名称 专业术语 作用位置 AI 调节逻辑 (Objective Function)
溶解氧 DO (Dissolved Oxygen) 好氧池

这是最关键的能耗控制点。

 

❌ 过高 (>3.0): 浪费电;还会把氧气带回缺氧池,破坏反硝化环境。

 

❌ 过低 (<1.0): 硝化菌停止工作,氨氮超标;易诱发污泥膨胀。

 

✅ 目标: 维持在 2.0 mg/L 左右。

内回流比 IR (Internal Recycle Ratio) 好氧  缺氧

控制脱氮效率。

 

通常是进水流量的 200%-300%。

 

❌ 过小: 硝酸盐排走了,脱氮不彻底。

 

❌ 过大: 带来太多 DO,破坏缺氧环境,且浪费泵的电费。

外回流比 R (Return Sludge Ratio) 二沉 厌氧

控制系统泥量平衡。

 

通常是进水流量的 50%-100%。

 

❌ 过小: 生化池细菌不够用。

 

❌ 过大: 稀释了进水浓度,且把硝酸盐带回厌氧池,导致厌氧释磷失败(反硝化菌抢了聚磷菌的饭)。

剩余污泥排放 Q_was (Waste Sludge) 二沉池

控制污泥龄 (SRT)。

 

通过排泥,把吸饱了磷的细菌排走,这是除磷的唯一出口。

 

❌ 排多了: 硝化菌长得慢,会被洗出系统(氨氮超标)。

 

❌ 排少了: 污泥老化,活性差,水质浑浊。

    生化池(厌氧+缺氧+好氧)并没有把污染物真的从水里“拿出来”,而是把它们“转移”到了细菌

体内。


📜第二部分:ASM1 理论篇

如果说 AAO 工艺是污水处理厂的“硬件架构”,那么 ASM1 模型就是运行在其中的“软件内核”。

它用一组微分方程 (ODEs) 精确描述了:什么细菌 (Who),在什么环境 (Where),以多快的速度

(How Fast),吃掉了多少污染物 (How Much)。

💡ASM 1模型的状态变量(13个)
分类状态变量中文名称大白话解读(核心作用 / 特点)
有机物相关(食物 / 剩饭) Si 溶解性惰性有机物浓度 溶于水的 “不可消化小分子垃圾”,细菌吃不动,不参与反应,最终随出水或污泥排出
Xi 颗粒惰性有机物浓度 不溶于水的 “不可消化大块垃圾”(如泥沙、纤维),细菌无法分解,最终沉降到污泥中排出
Ss 溶解性可生化降解基质浓度 溶于水的 “细菌美食”(如乙酸、葡萄糖),是异养菌分解 COD 的主要口粮,好氧 / 缺氧池会被大量消耗
Xs 颗粒性可生化降解基质浓度 颗粒状 “带包装的食物”(如淀粉、蛋白质颗粒),需先被水解成小分子(Ss),才能被细菌消化
XP 微生物衰减产生的污泥颗粒浓度 细菌老化、死亡后的 “尸体”,惰性强不参与反应,最终随剩余污泥排出
细菌本身(干活的工人) XBH 活性异养菌生物污泥浓度 分解 COD、参与脱氮的 “主力工人”(含反硝化菌),好氧用氧气、缺氧用硝酸盐当燃料,吃有机物存活
XBA 活性自养菌生物污泥浓度 处理氨氮的 “专业工人”(硝化细菌),仅好氧环境干活,以氨氮为食,将其转化为硝酸盐
氮相关(脱氮原料 / 产物) SNH 氨氮浓度(NH3 + NH4+) 污水中含氮污染物(如尿液、粪便中的氮),自养菌的专属食物,是水体富营养化的元凶之一
SNO 硝酸盐氮与亚硝酸盐氮浓度 自养菌的 “产物”、反硝化菌的 “替代燃料”,最终被反硝化菌转化为氮气排到空气中
SND 降解有机氮浓度溶解性可生物 溶于水的 “隐藏氮源”(如氨基酸),会被细菌分解释放氨氮,再参与硝化 – 反硝化循环
XND 颗粒性可生物降解有机氮浓度 颗粒状的 “打包氮源”(如蛋白质颗粒中的氮),需先拆分成小分子(SND),再释放氨氮参与反应
反应环境条件 So 溶解氧浓度(单位:-COD) 水里的氧气含量,好氧池需充足(供异养菌、自养菌干活),缺氧池需极低(避免抑制反硝化)
SALK 碱度(摩尔单位) 水里的 “缓冲剂”,稳定 pH 值,避免硝化反应导致水变酸杀死细菌
💡ASM 1模型的生化动力学反应(8个)
应分类生化动力学反应核心参与者反应环境核心过程(大白话)
细菌增长反应 异养菌好氧增长 活性异养菌(XBH) 好氧池(充足溶解氧 So) 异养菌用氧气分解溶解性有机物(Ss),降解 COD 的同时繁殖(XBH 增多),产生少量细菌尸体(XP)
异养菌缺氧增长 活性异养菌(XBH) 缺氧池(无 So,有硝酸盐 SNO) 异养菌用硝酸盐替代氧气分解 Ss,降解 COD、繁殖(XBH 增多),同时将 SNO 转化为氮气
自养菌的好氧增长 活性自养菌(XBA) 好氧池(充足 So + 碱度 SALK) 自养菌分解氨氮(SNH),转化为硝酸盐(SNO),同时繁殖(XBA 增多),消耗碱度、产生 XP
细菌衰亡反应 异养菌的衰亡 活性异养菌(XBH) 所有池体(速率不同) 异养菌因食物不足、环境不适老化死亡,转化为 XP,少量分解为溶解性惰性有机物(Si)
自养菌的衰亡 活性自养菌(XBA) 主要在好氧池 自养菌因氨氮 / 碱度不足老化死亡,转化为 XP,少量分解为 Si
预处理反应 溶解性有机氮的氨化反应 活性异养菌(XBH) 所有池体(好氧速率更快) 异养菌分解溶解性有机氮(SND),释放氨氮(SNH)
有机质的 “水解” 反应 活性异养菌(XBH) 主要在厌氧 / 缺氧池 异养菌分泌酶,将颗粒性有机物(Xs)拆解为小分子溶解性有机物(Ss)
有机氮的 “水解” 反应 活性异养菌(XBH) 主要在厌氧 / 缺氧池 异养菌分泌酶,将颗粒性有机氮(XND)拆解为小分子溶解性有机氮(SND)
💡化学计量常数(5个)

      化学计量常数” 理解成 反应里各物质的‘定量配方’—— 就像做饭时 “1 份米配 2 份水” 的比例,

它规定了生物反应中 “反应物消耗多少、产物生成多少” 的定量关系。 举个例子: 异养菌吃 1g COD(反应物),能长多少 g 生物量(产物)?这个比例就是化学计量常

参数大白话作用解释
YH​(异养菌产率) 衡量异养菌 “吃多少 COD 长多少肉” 的效率。比如 Y_H 高,说明异养菌吃一点 COD 就能长很多生物量,处理 COD 的同时污泥也多;Y_H 低则相反。
YA​(自养菌产率) 衡量自养菌 “吃多少氨氮长多少肉” 的效率。Y_A 高,自养菌吃少量氨氮就长很多,硝化氨氮时污泥产量大;Y_A 低则硝化相同氨氮产生的污泥少。
fP​(颗粒性衰减产物比例) 表示细菌死了之后,有多少比例变成 “惰性颗粒污泥”。f_P 高,细菌衰减后产生的惰性污泥多,剩余污泥总量大;f_P 低则惰性污泥少。
iXB​(生物量中 N 的比例) 说明细菌体内 “氮占自身重量的多少”。比如 i_XB 高,细菌每长一点生物量,消耗的氮多,同时硝化等反应消耗的碱度也多(因为氮代谢和碱度相关)。
iXP​(生物量产物 COD 中 N 的比例) 表示细菌死后变成的污泥里,“氮在污泥 COD 里占多少”。i_XP 高,说明污泥里氮含量高,这些氮如果没处理好,可能影响出水总氮。
💡动力学参数(15个)

     “动力学” 研究的是 “反应速度规律”,这些参数就是用来量化微生物反应 “有多快” 的 —— 比如细

菌繁殖多快、底物降解多快、环境变化对反应速度的影响有多大。就像给生物反应装了个 “速度仪

表盘”,所以叫 “动力学参数”。

动力学参数核心作用(大白话)
μH​,KS​,KO,H​,KNO​,bH​ 描述异养菌的生长和衰减:- μH​:异养菌 “繁殖速度的上限”;- KS​:异养菌吃底物的 “半饱和浓度”(底物浓度达到这个值,生长速度减半);- KO,H​:异养菌用好氧呼吸的 “氧气半饱和浓度”;- KNO​:异养菌缺氧呼吸的 “硝酸盐半饱和浓度”;- bH​:异养菌 “自然死亡的速度”。
μA​,KNH​,KO,A​,bA​ 描述自养菌(硝化菌)的生长和衰减:- μA​:自养菌 “繁殖速度的上限”;- KNH​:自养菌吃氨氮的 “半饱和浓度”;- KO,A​:自养菌用好氧呼吸的 “氧气半饱和浓度”;- bA​:自养菌 “自然死亡的速度”。
ηg​ 异养菌缺氧生长的 “效率修正系数”:缺氧时异养菌用硝酸盐呼吸的效率比用好氧呼吸低,这个系数用来调整缺氧生长的速度。
ka​ 氨化反应的 “速度常数”:溶解性有机氮被异养菌分解成氨氮的 “快慢程度”。
kh​,KX​ 水解反应的 “速度常数和半饱和系数”:- kh​:颗粒性有机物被分解成溶解性有机物的 “速度”;- KX​:水解反应的 “半饱和浓度”(颗粒性有机物浓度达到这个值,水解速度减半)。
ηh​ 缺氧水解的 “效率修正系数”:缺氧时颗粒性有机物水解的效率比好氧时低,这个系数用来调整缺氧水解的速度。
类别具体参数大白话解释(核心作用)
异养菌生长与衰减 μH​ 异养菌 “繁殖速度的天花板”,数值越大,异养菌生娃越快
KS​ 异养菌吃底物的 “半饱点”,底物浓度到这,生长速度减半
KO,H​ 异养菌用好氧呼吸的 “氧气半饱点”,氧气浓度到这,好氧生长速度减半
KNO​ 异养菌用硝酸盐呼吸的 “硝酸盐半饱点”,硝酸盐浓度到这,缺氧生长速度减半
bH​ 异养菌 “自然死亡的速度”,数值越大,死得越快
自养菌生长与衰减 μA​ 自养菌(硝化菌)“繁殖速度的天花板”,数值越大,硝化菌生娃越快
KNH​ 自养菌吃氨氮的 “半饱点”,氨氮浓度到这,硝化速度减半
KO,A​ 自养菌用好氧呼吸的 “氧气半饱点”,氧气浓度到这,硝化速度减半
bA​ 自养菌 “自然死亡的速度”,数值越大,死得越快
缺氧生长修正 ηg​ 异养菌缺氧时 “干活效率的折扣”,数值小于 1,说明缺氧生长比好氧慢
氨化反应 ka​ 溶解性有机氮 “变成氨氮的速度”,数值越大,氨化越快
水解反应 kh​ 颗粒有机物 “变成溶解性有机物的速度”,数值越大,水解越快
KX​ 水解反应的 “半饱点”,颗粒有机物浓度到这,水解速度减半
ηh​ 缺氧时水解 “干活效率的折扣”,数值小于 1,说明缺氧水解比好氧慢
💡反应过程图解

 

 反应速率

异养菌的好氧生长

        异养菌在好氧环境下,根据溶解性底物和溶解氧的浓度,按照 “底物越多、氧气越充足,生长

速度越快” 的规律繁殖,公式里的μ H是繁殖速度上限,K S和K O,H是半饱和浓度(到这个浓度时

生长速度减半),最后乘以异养菌浓度(X B,H)得到生长速率。

异养菌的缺氧生长

      异养菌在缺氧环境下,用硝酸盐(S NO)代替氧气,同样根据底物(S S)浓度繁殖,但此时

氧气浓度(S O)越低、硝酸盐浓度越高,生长速度越快,η g是缺氧生长的效率修正系数,最后乘

以异养菌浓度得到生长速率。

自养菌的好氧生长

  自养菌(硝化菌)在好氧环境下,根据氨氮(S NH)和溶解氧(S O)的浓度繁殖, μ H是繁殖速度上限,K NH和K O,A是半饱和浓度,乘以自养菌浓度(X B,A)得到生长速率。

异养菌的衰减

异养菌自然死亡的速率,由衰减系数(b H)和异养菌浓度(X B,H)决定,衰减系数越大、菌浓度越高,死亡速度越快。

自养菌的衰减

自养菌自然死亡的速率,由衰减系数和自养菌浓度决定,逻辑同异养菌衰减。

溶解性有机氮氨化

溶解性有机氮(S ND)被异养菌分解成氨氮的速率,由氨化速率常数(k a)、有机氮浓度和异养

菌浓度决定,速率常数越大、有机氮和菌浓度越高,氨化越快。

慢速可生物降解有机物的水解

颗粒性有机物(X S)被分解成溶解性有机物的速率,受底物浓度(X S与X B,H的比值)、溶解氧

(S O )、硝酸盐(S NO)浓度影响,好氧时水解快,缺氧时需乘以修正系数(η h),最后乘以

异养菌浓度得到水解速率。

颗粒性可生物降解有机氮的水解

颗粒性有机氮(X ND)的水解速率,是慢速有机物水解速率(ρ 7)乘以有机氮与有机物的比例

(X ND/X S),逻辑是有机氮水解规律和有机物水解一致,只是比例不同。

各组分转化速率

S I(溶解性惰性有机物):不变,因为细菌不吃它。 S S(溶解性可生化底物):异养菌好氧、缺氧吃的量,减去水解生成的量,就是它的变化。 X I(颗粒惰性有机物):不变,细菌也不吃它。 X S(颗粒可生化底物):异养菌、自养菌死了产生的颗粒底物,减去水解成溶解性底物的量,就是它的变化。 X BH(活性异养菌):异养菌好氧、缺氧繁殖的量,减去自己死亡的量,就是它的变化。 X BA(活性自养菌):自养菌繁殖的量,减去自己死亡的量,就是它的变化。 X P(微生物衰减污泥颗粒):异养菌、自养菌死了变成的惰性污泥,死得越多它越多。 S O(溶解氧):异养菌好氧、自养菌硝化消耗的氧气,消耗越多它越少。 S NO(硝酸盐氮):异养菌缺氧消耗的量,减去自养菌硝化生成的量,就是它的变化。 S NH(氨氮):异养菌、自养菌消耗的量,加上有机氮氨化生成的量,就是它的变化。 S ND(溶解性可生物降解有机氮):氨化消耗的量,减去有机氮水解生成的量,就是它的变化。 X ND(颗粒性可生物降解有机氮):细菌死了产生的颗粒有机氮,减去水解成溶解性有机氮的量,就是它的变化。 S ALK(碱度):异养菌、自养菌反应消耗或生成的碱度,加上氨化生成的碱度,就是它的变化。

生化反应池模型的建立

物质方程大白话解释
SI​(溶解性惰性有机物) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 反应中自身的变化(r1​,这里r1​=0,所以只看进出水)
SS​(溶解性可生化底物) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 反应中被异养菌吃、水解生成的变化(r2​)
XI​(颗粒惰性有机物) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 反应中自身的变化(r3​=0,只看进出水)
XS​(颗粒可生化底物) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 细菌衰减生成、水解消耗的变化(r4​)
XBH​(活性异养菌) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 异养菌生长、衰减的变化(r5​)
XBA​(活性自养菌) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 自养菌生长、衰减的变化(r6​)
XP​(微生物衰减污泥颗粒) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 细菌衰减生成的变化(r7​)
SO​(溶解氧) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 曝气溶解的氧(KLa​(SO∗​−SO​)) + 反应中消耗的变化(r8​)
SNO​(硝酸盐氮) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 反硝化消耗、硝化生成的变化(r9​)
SNH​(氨氮) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 硝化消耗、氨化生成的变化(r10​)
SND​(溶解性可生物降解有机氮) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 氨化消耗、水解生成的变化(r11​)
XND​(颗粒性可生物降解有机氮) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 细菌衰减生成、水解消耗的变化(r12​)
SALK​(碱度) 变化速率 = (进水带进来的量 – 出水带走的量)÷ 反应器体积 + 各反应消耗 / 生成的变化(r13​)

📜第三部分:单个池子单个组分的手动计算和代码实现

以氨氮为例:

假设我们有一个曝气池(CSTR完全混合反应器),我们需要计算当前时刻氨氮的反应速率和浓度

变化。

水质组分(状态变量)当前浓度:

动力学参数 (ASM1 典型值):

第一步:计算动力学过程速率

第二步:计算氨氮的反应速率

第三步:计算质量平衡


import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import solve_ivp

# ————————–
# 解决中文显示问题
# ————————–
plt.rcParams["font.family"] = ["SimHei", "WenQuanYi Micro Hei", "Heiti TC", "Microsoft YaHei"]
plt.rcParams["axes.unicode_minus"] = False

# ————————–
# 1. 参数设置(ASM1标准,20℃)
# ————————–
params = {
# — 动力学参数 (单位: /d) —
'mu_A': 0.5, # 自养菌最大比生长速率 (1/d)
'k_a': 0.05, # 氨化速率 (m³/(g COD·d))
'b_A': 0.05, # 自养菌衰减系数 (1/d)

# — 半饱和常数 (单位: mg/L) —
'K_NH': 1.0, # 氨氮半饱和常数
'K_OA': 0.4, # 自养菌氧半饱和常数

# — 化学计量参数 —
'Y_A': 0.24, # 自养菌产率 (g VSS/g N)
'i_XB': 0.086, # 生物体含氮量 (g N/g VSS)

# — 水力与环境参数 —
'q_in': 100.0, # 进水流量 (m³/h)
'q_out': 100.0, # 出水流量 (m³/h)
'V': 1000.0, # 反应池容积 (m³)

# — 进水条件 —
'S_NH_in': 30.0 # 进水氨氮浓度 (mg N/L)
}

# ————————–
# 2. 辅助函数:计算反应速率
# ————————–
def calc_rates_nh(S_NH, env_vars, params):
"""
计算与氨氮相关的反应过程速率 (Process Rates)
env_vars: 包含 [S_O, S_ND, X_BA, X_BH] 的环境常量
"""
# 解包环境常量
S_O = env_vars['S_O'] # 溶解氧
S_ND = env_vars['S_ND'] # 溶解性有机氮
X_BA = env_vars['X_BA'] # 自养菌 (硝化菌)
X_BH = env_vars['X_BH'] # 异养菌 (用于氨化)

# — j=3: 自养菌好氧生长 (硝化作用) —
# 公式: rho3 = mu_A * (S_NH/(K_NH+S_NH)) * (S_O/(K_OA+S_O)) * X_BA
# 注意:params['mu_A'] 是 /d,需除以 24 转换为 /h
monod_NH = S_NH / (params['K_NH'] + S_NH)
monod_O = S_O / (params['K_OA'] + S_O)
rho3 = (params['mu_A'] / 24.0) * monod_NH * monod_O * X_BA

# — j=6: 溶解性有机氮氨化 —
# 公式: rho6 = k_a * S_ND * X_BH
rho6 = (params['k_a'] / 24.0) * S_ND * X_BH

# — 计算氨氮的总反应速率 r_NH (mg N/(L·h)) —
# r_NH = -消耗 + 生成
# 消耗 = (i_XB + 1/Y_A) * rho3 (细菌组成氮 + 氧化产能消耗的氮)
# 生成 = rho6 (有机氮水解)

consumption = (params['i_XB'] + 1.0 / params['Y_A']) * rho3
generation = rho6

r_NH = -consumption + generation

return rho3, rho6, r_NH

# ————————–
# 3. 氨氮动态模型
# ————————–
def nh_dynamics(t, y, env_vars, params):
"""氨氮浓度随时间变化的微分方程"""
S_NH = y[0]

# 边界保护:浓度不能为负
if S_NH < 0: S_NH = 0

# 1. 计算生化反应项 (r_NH)
_, _, r_NH = calc_rates_nh(S_NH, env_vars, params)

# 2. 计算物理输运项 (Transport)
# 公式: (Qin * Sin – Qout * S) / V
transport = (params['q_in'] * params['S_NH_in'] – params['q_out'] * S_NH) / params['V']

# 3. 总变化率 dS_NH/dt
dSNH_dt = transport + r_NH

return [dSNH_dt]

# ————————–
# 4. 模拟设置与运行
# ————————–
# 设定环境常量 (假设在短时间内相对稳定)
env_vars = {
'S_O': 2.0, # 溶解氧 (mg/L)
'S_ND': 5.0, # 有机氮 (mg/L)
'X_BA': 100.0, # 自养菌浓度 (mg/L) – 恒定
'X_BH': 2000.0 # 异养菌浓度 (mg/L) – 恒定
}

# 初始状态
S_NH_init = 20.0 # 初始氨氮 (mg/L)

# 模拟时间 (模拟 24 小时)
t_span = (0, 24)
t_eval = np.linspace(0, 24, 200)

# 求解微分方程
sol = solve_ivp(
fun=lambda t, y: nh_dynamics(t, y, env_vars, params),
t_span=t_span,
y0=[S_NH_init],
t_eval=t_eval,
method='RK45'
)

# ————————–
# 5. 结果可视化
# ————————–
plt.figure(figsize=(10, 6))

# 氨氮变化曲线
plt.plot(sol.t, sol.y[0], 'b-', linewidth=2, label='氨氮浓度 (S_NH)')
plt.axhline(y=params['S_NH_in'], color='r', linestyle='–', alpha=0.6, label='进水浓度 (30 mg/L)')

# 标注关键信息
plt.xlabel('时间 (小时)', fontsize=12)
plt.ylabel('氨氮浓度 (mg N/L)', fontsize=12)
plt.title(f'好氧池氨氮动态模拟 (DO={env_vars["S_O"]} mg/L)', fontsize=14)
plt.grid(alpha=0.3)
plt.legend(fontsize=10)

# 标注最终平衡浓度
final_conc = sol.y[0][-1]
plt.text(0.6, 0.5, f'最终平衡浓度: {final_conc:.2f} mg/L',
transform=plt.gca().transAxes, fontsize=10,
bbox=dict(facecolor='white', alpha=0.8, edgecolor='gray'))

plt.tight_layout()
plt.show()

# ————————–
# 6. 关键速率输出 (t=0时刻)
# ————————–
rho3_init, rho6_init, r_NH_init = calc_rates_nh(S_NH_init, env_vars, params)

print("— 初始时刻 (t=0) 速率分析 —")
print(f"1. 硝化反应速率 (rho3): {rho3_init:.4f} mg VSS/(L·h)")
print(f" -> 导致氨氮消耗: {(params['i_XB'] + 1/params['Y_A']) * rho3_init:.4f} mg N/(L·h)")
print(f"2. 氨化反应速率 (rho6): {rho6_init:.4f} mg N/(L·h)")
print(f"3. 净生化反应速率 (r_NH): {r_NH_init:.4f} mg N/(L·h) (正值代表生成,负值代表消耗)")
print(f"4. 物理稀释/积累速率: {(params['q_in']*(params['S_NH_in']-S_NH_init))/params['V']:.4f} mg N/(L·h)")

赞(0)
未经允许不得转载:171主机测评 » AI+Water|带你工艺认知到单个池子单个组分的实现
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址