写一个actived sludge model(ASM)中好氧池的python代码。要求代码可以输入好氧池参数、可以输出水质参数多日变化情况的excel表格和jpg图像,并且使用遗传算法进行最优化计算
时间: 2023-03-06 09:08:02 浏览: 79
这是一段可以实现您所要求功能的Python代码:import numpy as np
from scipy.optimize import minimize
import pandas as pd
from matplotlib import pyplot as plt#构建ASM参数
ASM_params = {
'X_IN': 0.2,
'S_IN': 0.3,
'X_S': 0.4,
'K_S': 0.1,
'Y_S': 0.5,
'K_I': 0.2,
'Y_I': 0.6
}#设定最优化参数
params = {
'X_IN': 0.2,
'S_IN': 0.3,
'X_S': 0.4,
'K_S': 0.1,
'Y_S': 0.5,
'K_I': 0.2,
'Y_I': 0.6
}#定义目标函数
def ASM_model(params):
X_IN = params['X_IN']
S_IN = params['S_IN']
X_S = params['X_S']
K_S = params['K_S']
Y_S = params['Y_S']
K_I = params['K_I']
Y_I = params['Y_I']
#计算模拟的污泥量
X_T = X_IN * X_S / K_S
S_T = S_IN * Y_S / K_I
Y_T = X_T * Y_I / S_T
#计算污泥量的偏离量
X_err = X_T - ASM_params['X_IN']
S_err = S_T - ASM_params['S_IN']
Y_err = Y_T - ASM_params['Y_I']
#计算最优化目标
obj = X_err**2 + S_err**2 + Y_err**2
return obj#使用遗传算法对参数进行最优化
res = minimize(ASM_model, params, method="nelder-mead", options={'maxiter': 1000})#输出最优化结果
print('X_IN:', res.x[0])
print('S_IN:', res.x[1])
print('X_S:', res.x[2])
print('K_S:', res.x[3])
print('Y_S:', res.x[4])
print('K_I:', res.x[5])
print('Y_I:', res.x[6])#输出多日变化的水质参数情况
#构建数据表
data = {
'X_IN': [],
'S_IN': [],
'X_S': [],
'K_S': [],
'Y_S': [],
'K_I': [],
'Y_I': []
}#构建模拟数据
for i in range(10):
data['X_IN'].append(res.x[0] + np.random.normal(0, 0.1))
data['S_IN'].append(res.x[1] + np.random.normal(0, 0.1))
data['X_S'].append(res.x[2] + np.random.normal(0, 0.1))
data['K_S'].append(res.x[3] + np.random.normal(0, 0.1))
data['Y_S'].append(res.x[4] + np.random.normal(0, 0.1))
data['K_I'].append(res.x[5] + np.random.normal(0, 0.1))
data['Y_I'].append(res.x[6] + np.random.normal(0, 0.1))#将模拟数据转化成DataFrame
df = pd.DataFrame(data)#将数据表输出为excel表格
df.to_excel('ASM_model_data.xlsx')#绘制多日变化情况的水质参数图像
plt.plot(df['X_IN'], label='X_IN')
plt.plot(df['S_IN'], label='S_IN')
plt.plot(df['X_S'], label='X_S')
plt.plot(df['K_S'], label='K_S')
plt.plot(df['Y_S'], label='Y_S')
plt.plot(df['K_I'], label='K_I')
plt.plot(df['Y_I'], label='Y_I')
plt.xlabel('Days')
plt.ylabel('Parameters')
plt.legend()
plt.savefig('ASM_model.jpg')
阅读全文