遗传算法matlab程序实例超临界co2简单回热循环、再压缩循环、预热循环
时间: 2023-06-12 12:04:16 浏览: 167
遗传算法是一种求解优化问题的算法,可以用于优化超临界CO2简单回热循环、再压缩循环、预热循环等问题。下面给出一个MATLAB程序实例,用遗传算法求解超临界CO2简单回热循环的最优参数。
首先,我们需要定义问题的目标函数,即超临界CO2简单回热循环的效率。这里我们采用热效率作为目标函数,目标函数的计算公式为:
$$\eta=\frac{W_{net}}{Q_{in}}$$
其中,$W_{net}$表示净功率输出,$Q_{in}$表示热输入。
接下来,我们需要定义超临界CO2简单回热循环的模型,包括输入参数和输出参数。这里我们假设超临界CO2简单回热循环有5个输入参数,分别为:
- 蒸汽发生器的压力(MPa)
- 冷凝器的温度(℃)
- 蒸汽发生器的出口温度(℃)
- 冷凝器的出口温度(℃)
- 回热器的温度(℃)
输出参数为热效率。
接下来,我们可以编写遗传算法的MATLAB程序,实现对超临界CO2简单回热循环的参数优化。程序中包含以下步骤:
1. 定义输入参数和目标函数
```matlab
function f = co2_cycle(x)
% 超临界CO2简单回热循环的目标函数
p_sg = x(1); % 蒸汽发生器的压力(MPa)
t_cd = x(2); % 冷凝器的温度(℃)
t_sg_out = x(3); % 蒸汽发生器的出口温度(℃)
t_cd_out = x(4); % 冷凝器的出口温度(℃)
t_rh = x(5); % 回热器的温度(℃)
[f, ~, ~] = co2_simple_cycle(p_sg, t_cd, t_sg_out, t_cd_out, t_rh);
% 计算热效率作为目标函数
end
```
2. 定义超临界CO2简单回热循环的模型
```matlab
function [eta, W_net, Q_in] = co2_simple_cycle(p_sg, t_cd, t_sg_out, t_cd_out, t_rh)
% 超临界CO2简单回热循环的模型
% 输入参数:
% p_sg:蒸汽发生器的压力(MPa)
% t_cd:冷凝器的温度(℃)
% t_sg_out:蒸汽发生器的出口温度(℃)
% t_cd_out:冷凝器的出口温度(℃)
% t_rh:回热器的温度(℃)
% 输出参数:
% eta:热效率
% W_net:净功率输出
% Q_in:热输入
% 常数定义
R = 8.314; % 气体常数(J/mol/K)
m_dot = 200; % 工质质量流量(kg/s)
cp = 1000; % 工质比热容(J/kg/K)
% 状态点1:空气
t_1 = 25; % 空气温度(℃)
p_1 = 0.1; % 空气压力(MPa)
h_1 = refpropm('H', 'T', t_1+273.15, 'P', p_1*1e6, 'CO2'); % 空气焓值(J/kg)
% 状态点2:空气
p_2 = p_1; % 空气压力(MPa)
t_2 = t_cd; % 空气温度(℃)
h_2 = refpropm('H', 'T', t_2+273.15, 'P', p_2*1e6, 'CO2'); % 空气焓值(J/kg)
% 状态点3:CO2
p_3 = p_2; % CO2压力(MPa)
t_3 = t_cd_out; % CO2温度(℃)
h_3 = refpropm('H', 'T', t_3+273.15, 'P', p_3*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点4:CO2
p_4 = p_sg; % CO2压力(MPa)
t_4 = t_sg_out; % CO2温度(℃)
h_4 = refpropm('H', 'T', t_4+273.15, 'P', p_4*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点5:CO2
p_5 = p_4; % CO2压力(MPa)
t_5 = t_rh; % CO2温度(℃)
h_5 = refpropm('H', 'T', t_5+273.15, 'P', p_5*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点6:CO2
p_6 = p_2; % CO2压力(MPa)
t_6 = t_rh; % CO2温度(℃)
h_6 = refpropm('H', 'T', t_6+273.15, 'P', p_6*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点7:CO2
p_7 = p_sg; % CO2压力(MPa)
t_7 = t_cd_out; % CO2温度(℃)
h_7 = refpropm('H', 'T', t_7+273.15, 'P', p_7*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点8:CO2
p_8 = p_1; % CO2压力(MPa)
t_8 = t_sg_out; % CO2温度(℃)
h_8 = refpropm('H', 'T', t_8+273.15, 'P', p_8*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点9:CO2
p_9 = p_2; % CO2压力(MPa)
t_9 = t_sg_out; % CO2温度(℃)
h_9 = refpropm('H', 'T', t_9+273.15, 'P', p_9*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点10:CO2
p_10 = p_sg; % CO2压力(MPa)
t_10 = t_cd_out; % CO2温度(℃)
h_10 = refpropm('H', 'T', t_10+273.15, 'P', p_10*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点11:CO2
p_11 = p_1; % CO2压力(MPa)
t_11 = t_rh; % CO2温度(℃)
h_11 = refpropm('H', 'T', t_11+273.15, 'P', p_11*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点12:CO2
p_12 = p_1; % CO2压力(MPa)
t_12 = t_sg_out; % CO2温度(℃)
h_12 = refpropm('H', 'T', t_12+273.15, 'P', p_12*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点13:CO2
p_13 = p_2; % CO2压力(MPa)
t_13 = t_cd; % CO2温度(℃)
h_13 = refpropm('H', 'T', t_13+273.15, 'P', p_13*1e6, 'CO2'); % CO2焓值(J/kg)
% 状态点14:CO2
p_14 = p_1; % CO2压力(MPa)
t_14 = t_cd; % CO2温度(℃)
h_14 = refpropm('H', 'T', t_14+273.15, 'P', p_14*1e6, 'CO2'); % CO2焓值(J/kg)
% 计算热输入和净功率输出
Q_in = m_dot * (h_7 - h_2 + h_8 - h_1 + h_9 - h_10 + h_11 - h_14);
W_net = m_dot * (h_4 - h_3 + h_6 - h_5);
eta = W_net / Q_in; % 计算热效率
end
```
3. 定义遗传算法的参数和约束条件
```matlab
% 遗传算法的参数和约束条件
nvars = 5; % 变量个数
lb = [20, 20, 500, 20, 500]; % 变量下限
ub = [25, 40, 600, 50, 600]; % 变量上限
A = [-1, 0, 1, 0, 0; 0, 1, 0, -1, 1]; % 不等式约束矩阵
b = [-5; 0]; % 不等式约束向量
```
4. 调用遗传算法函数,求解最优解
```matlab
% 调用遗传算法函数,求解最优解
options = gaoptimset('Generations', 100, 'PopulationSize', 50, 'TolFun', 1e-6);
[x, fval] = ga(@co2_cycle, nvars, A, b, [], [], lb, ub, [], options);
```
运行程序后,即可得到超临界CO2简单回热循环的最优参数和热效率。需要注意的是,本程序中采用的是MATLAB自带的refpropm函数计算CO2的焓值,需要安装REFPROP软件包并将其加入到MATLAB的搜索路径中。
阅读全文