当前位置: 首页 > news >正文

matlab实现了一个优化的遗传算法,用于求解注汽站最优位置的问题

function [best_chromosome, best_fitness] = optimized_genetic_algorithm()%% 遗传算法参数初始化% 定义井信息,包括坐标、管道长度、流量、压力等wells = defineWells(); % 返回井的结构体数组N = length(wells); % 注汽井数量% 遗传算法相关参数L_chromosome = 20; % 染色体长度(x和y各10位二进制编码)M_population = 80; % 群体大小(染色体数量)p_c_initial = 0.8; % 初始交叉概率p_m_initial = 0.01; % 初始变异概率T_termination = 500; % 最大迭代代数% 几何约束X_min = 0; X_max = 1000; % X坐标范围(单位:m)Y_min = 0; Y_max = 1000; % Y坐标范围(单位:m)% 其他约束参数i_max = 0.005; % 最大允许水力坡降(单位:无量纲)%T_W_max = 323.15; % 最大允许外壁温度(K)P_R = 18.0 * 1e6; % 锅炉额定压力(Pa)X_R = 0.9; % 锅炉额定干度q_max = 100; % 最大允许单位管长热损失(W/m)DeltaP_max = 2000; % 最大允许单位管长压降(Pa/m)%% 初始化种群population = zeros(M_population, L_chromosome); % 初始化种群for i = 1:M_populationx = randi([0, 1023]); % 随机生成x坐标(0~1023对应10位二进制)y = randi([0, 1023]); % 随机生成y坐标population(i, :) = encode_position(x, y); % 将坐标编码为染色体end%% 初始化全局最优解global_best_fitness = -inf; % 全局最优适应度值(初始化为负无穷)global_best_chromosome = zeros(1, L_chromosome); % 全局最优染色体%% 遗传算法主循环for generation = 1:T_termination% 动态调整交叉概率和变异概率(随迭代次数降低)p_c = p_c_initial * (1 - generation / T_termination);p_m = p_m_initial * (1 - generation / T_termination);% 计算当前种群中每个个体的适应度fitness_values = zeros(M_population, 1);for i = 1:M_populationfitness_values(i) = fitness_function_with_constraints(population(i, :), wells, ...X_min, X_max, Y_min, Y_max, ...i_max, P_R, X_R, q_max, DeltaP_max, N);end% 归一化适应度值(防止负值溢出)fitness_values = fitness_values - min(fitness_values) + 1e-6; % 平移到非负值fitness_values = fitness_values / sum(fitness_values); % 归一化到0~1% 选择操作:轮盘赌选择生成新种群new_population = selection(population, fitness_values);% 交叉操作:通过单点交叉生成新个体new_population = crossover(new_population, p_c, L_chromosome);% 变异操作:随机翻转基因位new_population = mutation(new_population, p_m, L_chromosome);% 更新种群population = new_population;% 找到当前代的最优个体[current_best_fitness, best_index] = max(fitness_values); % 当前最优适应度if current_best_fitness > global_best_fitness% 如果当前最优优于全局最优,则更新全局最优global_best_fitness = current_best_fitness;global_best_chromosome = population(best_index, :);end% 输出当前代的最优适应度值(调试信息)fprintf('Generation %d: Best Fitness = %f\n', generation, current_best_fitness);end%% 输出最终结果best_fitness = global_best_fitness; % 全局最优适应度best_chromosome = global_best_chromosome; % 全局最优染色体% 解码最优染色体得到注汽站的最优坐标[best_x, best_y] = decode_position(best_chromosome);fprintf('最优注汽站坐标:(%d, %d)\n', best_x, best_y);fprintf('最优适应度:%f\n', best_fitness);
end%% 适应度函数:基于焓值、热损失、压降和其他约束计算适应度
function fitness = fitness_function_with_constraints(chromosome, wells, X_min, X_max, Y_min, Y_max, ...i_max, P_R, X_R, q_max, DeltaP_max, N)% 初始化变量penalty = 0; % 罚分total_loss = 0; % 总热损失total_pressure_drop = 0; % 总压降total_H = 0; % 总焓值% 解码染色体得到注汽站的坐标[x, y] = decode_position(chromosome);% 几何约束:检查注汽站是否越界if any(x < X_min | x > X_max) || any(y < Y_min | y > Y_max)penalty = penalty + 500; % 越界罚分end% 遍历每口井,计算热损失、压降、焓值和水力坡降for j = 1:Nwell = wells(j); % 当前井信息distance = well.pipe_length; % 使用预设的管道长度%% 1. 焓值计算H = calculate_H(total_loss); % 焓值计算total_H = total_H + H; % 累计焓值%% 2. 计算水力坡降% 计算水力坡降 i = lambda * (1/d) * (w^2)/(2*g)d = 0.063; % 管线内径(m)w = 1.5; % 平均水流速度(m/s)g = 9.81; % 重力加速度(m/s^2)lambda = 0.057; % 摩擦因子i = lambda * (1 / d) * (w^2) / (2 * g);% 如果水力坡降超标,增加惩罚if i > i_maxpenalty = penalty + 500 * (i - i_max); % 超标罚分end%% 3. 压降计算deltaP_total = calculate_deltaP(distance);total_pressure_drop = total_pressure_drop + deltaP_total; % 累积压降% 如果压降超过允许值,增加惩罚if deltaP_total > DeltaP_max * 1e6 % 将 DeltaP_max 由 MPa 转为 Papenalty = penalty + 1000 * (deltaP_total - DeltaP_max * 1e6); % 罚分end%% 4. 热损失计算q_loss = calculate_pipe_heat_loss(distance); % 单位热损失计算 (W)total_loss = total_loss + q_loss; % 累计总热损失% 检查单位热损失是否超标if (q_loss / distance) > q_maxpenalty = penalty + 100 * ((q_loss / distance) - q_max); % 单位热损失超标罚分endend%% 6. 检查锅炉出口压力和干度P_actual = 17.19 * 1e6; % 实际锅炉出口压力 (Pa)X_actual = 0.85; % 实际锅炉出口干度if P_actual > P_Rpenalty = penalty + 500 * (P_actual - P_R); % 锅炉压力超标罚分endif X_actual < X_Rpenalty = penalty + 500 * (X_R - X_actual); % 锅炉干度不符罚分end% 计算适应度值,考虑惩罚项fitness = total_H - penalty; % 目标是最大化焓值,最小化惩罚
end%% 焓值计算函数
function H = calculate_H(total_loss) % 给定参数h_guo = 1800; % 炉内焓值,单位可能是kJ/kgDelta_Q = total_loss * 20; % 炉内热量变化,单位可能是WG = 4.167; % 质量流量,单位可能是kg/sh1 = 296.4; %井口饱和水比焓,单位可能是kJ/kgh2 = 2375; % 井口饱和蒸汽比焓,单位可能是kJ/kg% 计算h_wellhead(井口焓值)% 根据公式h_wellhead = h_guo - Delta_Q / Gh_well = h_guo - Delta_Q / G;% 计算x(干度)% 根据公式x = (h_wellhead - h_prime) / (h_double_prime - h_prime)X_gan = (h_well - h1) / (h2 - h1);% 计算总焓值H% 根据公式H = G * (h_prime + x * (h_double_prime - h_prime))H = G * (h1 + X_gan * (h2 - h1));% 输出结果disp(['总焓值H = ', num2str(H)]);
end%% 压降计算函数
function deltaP_total = calculate_deltaP(distance)      % 参数设置lambda = 0.057; % 摩擦因子D = 0.063; % 管道内径(m)omega_0 = 17.36; % 流速(m/s)rho_prime = 81; % 饱和水密度(kg/m³)rho_double_prime = 250; % 饱和水蒸气密度(kg/m³)chi = 0.859; % 计算φphi = 1 + (chi * (1 - chi) * (1000 / (rho_double_prime * omega_0))) * (rho_prime / rho_double_prime) / ...(1 + (1 - chi) * (rho_prime / rho_double_prime - 1));% 计算管道压降 ΔPmdeltaP_m = phi * lambda * (distance / D) * (omega_0^2) / 2 * rho_prime * ...(1 + chi * (rho_prime / rho_double_prime - 1)); % 管道压降% 计算阀门压降 ΔPjbdeltaP_jb = (omega_0^2) / 2 * rho_prime * ...(1 + chi * (rho_prime / rho_double_prime - 1)); % 阀门压降% 总压降deltaP_total = deltaP_m + deltaP_jb;
end        %% 管道热损失计算函数
function q_loss = calculate_pipe_heat_loss(distance)% 使用管线参数计算热损失T_steam = 586.15; % 蒸汽温度(K)313℃% distance - 管道长度 (m)T_env = 293.15; % 环境温度(K)% 管道和保温层参数d_inner = 0.1; % 内径 (m)d_outer = 0.18; % 外径 (m)lambda_pipe = 0.085; % 管道导热系数 (W/(m·K))lambda_insulation1 = 0.04; % 第一层保温材料导热系数 (W/(m·K))lambda_insulation2 = 0.03; % 第二层保温材料导热系数 (W/(m·K))delta_insulation1 = 0.03; % 第一层保温材料厚度 (m)delta_insulation2 = 0.05; % 第二层保温材料厚度 (m)% 计算总热阻 (K/W)R = log(d_outer / d_inner) / (2 * pi * lambda_pipe) + ...log((d_outer + 2 * delta_insulation1 + 2 * delta_insulation2) / d_outer) / (2 * pi * lambda_insulation1) + ...log((d_outer + 2 * delta_insulation1) / (d_outer + 2 * delta_insulation1 + 2 * delta_insulation2)) / (2 * pi * lambda_insulation2);% 传热系数 (W/(m·K))alpha1 = 57; % 内壁换热系数 (W/(m²·K))alpha2 = 0.2; % 外壁换热系数 (W/(m²·K))k1 = 1 / (R + 1 / alpha1 + 1 / alpha2); % 总传热系数% 单位长度热损失 (W/m)q1 = k1 * (T_steam - T_env);% 总热损失 (KW)q_loss = q1 * distance * 1e-3; % 按距离L计算总热损失
end%% 编码函数:将坐标转换为二进制染色体
function chromosome = encode_position(x, y)% 将x和y坐标分别编码为10位二进制字符串x_bin = dec2bin(x, 10); % 将x坐标转换为10位二进制字符串y_bin = dec2bin(y, 10); % 将y坐标转换为10位二进制字符串% 合并x和y的二进制字符串chromosome_bin = [x_bin, y_bin]; % 转换为数值数组 (1和0的数组)chromosome = arrayfun(@(c) str2double(c), chromosome_bin)'; 
end%% 解码函数:将二进制染色体解码为坐标
function [x, y] = decode_position(chromosome)% 将二进制染色体分为x和y两部分x_bin = num2str(chromosome(1:10)'); % 前10位为x坐标y_bin = num2str(chromosome(11:20)'); % 后10位为y坐标% 将二进制字符串转换为十进制x = bin2dec(x_bin); % 解码x坐标y = bin2dec(y_bin); % 解码y坐标
end%% 选择函数(轮盘赌选择)
function new_population = selection(population, fitness_values)% 基于适应度值的轮盘赌选择% population - 当前种群 (MxL)% fitness_values - 适应度值 (Mx1)cumulative_fitness = cumsum(fitness_values); % 计算累计适应度M_population = size(population, 1); % 群体大小L_chromosome = size(population, 2); % 染色体长度new_population = zeros(M_population, L_chromosome); % 初始化新种群for i = 1:M_populationr = rand() * cumulative_fitness(end); % 随机数selected = find(cumulative_fitness >= r, 1, 'first'); % 选择个体new_population(i, :) = population(selected, :); % 复制到新种群end
end%% 交叉函数(单点交叉)
function new_population = crossover(population, p_c, L_chromosome)% 单点交叉生成新种群% population - 当前种群 (MxL)% p_c - 交叉概率% L_chromosome - 染色体长度new_population = population; % 初始化新种群for i = 1:2:size(population, 1)-1if rand() < p_ccross_point = randi(L_chromosome-1); % 随机选择交叉点% 交换基因new_population(i, cross_point+1:end) = population(i+1, cross_point+1:end);new_population(i+1, cross_point+1:end) = population(i, cross_point+1:end);endend
end%% 变异函数(随机翻转基因)
function new_population = mutation(population, p_m, L_chromosome)% 随机翻转染色体中的基因位% population - 当前种群 (MxL)% p_m - 变异概率% L_chromosome - 染色体长度new_population = population; % 初始化新种群for i = 1:size(population, 1)for j = 1:L_chromosomeif rand() < p_mnew_population(i, j) = 1 - population(i, j); % 翻转基因位endendend
end
%% 定义井信息
function wells = defineWells()% 定义井的坐标、管道长度、流量、压力、温度和干度% 每口井的信息存储在结构体中% 井1信息well1.coord = [200, 400]; % 坐标 (m)well1.pipe_length = 600; % 管道长度 (m)well1.pressure = 11.0 * 1e6; % 压力 (Pa)well1.flow_rate = 237; % 流量 (kg/s)well1.temperature = 553.15; % 温度 (K)well1.dryness = 0.5; % 干度% 井2信息well2.coord = [800, 400]; % 坐标 (m)well2.pipe_length = 800; % 管道长度 (m)well2.pressure = 12.0 * 1e6; % 压力 (Pa)well2.flow_rate = 225; % 流量 (kg/s)well2.temperature = 563.15; % 温度 (K)well2.dryness = 0.4; % 干度% 返回所有井信息wells = [well1, well2];
end

以下是对上述代码功能的详细解释:

  1. optimized_genetic_algorithm 函数
    • 功能:实现了一个优化的遗传算法,用于求解注汽站最优位置的问题。
    • 主要步骤
      • 参数初始化:定义井信息,包括坐标、管道长度、流量、压力等,设置遗传算法的相关参数,如染色体长度、群体大小、交叉概率、变异概率、最大迭代代数,以及几何约束和其他约束参数。
      • 种群初始化:使用 randi 函数生成随机的 xy 坐标,将其编码为染色体,并存储在 population 矩阵中。
      • 全局最优解初始化:将全局最优适应度初始化为负无穷,全局最优染色体初始化为零向量。
      • 遗传算法主循环
        • 动态调整交叉概率和变异概率,随迭代次数降低。
        • 计算当前种群中每个个体的适应度,使用 fitness_function_with_constraints 函数,考虑了各种约束条件。
        • 对适应度值进行归一化处理,将其平移到非负值并归一化到 0 到 1 范围。
        • 执行选择操作,使用 selection 函数进行轮盘赌选择生成新种群。
        • 执行交叉操作,使用 crossover 函数通过单点交叉生成新个体。
        • 执行变异操作,使用 mutation 函数随机翻转基因位。
        • 更新种群,将新生成的种群替换原种群。
        • 找到当前代的最优个体,如果优于全局最优则更新全局最优。
        • 输出当前代的最优适应度值作为调试信息。
      • 最终结果输出:输出全局最优适应度和全局最优染色体,将最优染色体解码得到注汽站的最优坐标并输出。
  2. fitness_function_with_constraints 函数
    • 功能:计算个体的适应度,考虑了各种约束条件。
    • 主要步骤
      • 初始化罚分、总热损失、总压降和总焓值。
      • 解码染色体得到注汽站的坐标。
      • 检查几何约束,对越界的注汽站添加罚分。
      • 遍历每口井,计算焓值、水力坡降、压降和热损失:
        • 对于焓值计算,调用 calculate_H 函数。
        • 对于水力坡降,计算其值并对超标情况添加罚分。
        • 对于压降,计算其值,将 DeltaP_max 从 MPa 转为 Pa 并检查是否超标,超标时添加罚分。
        • 对于热损失,计算单位热损失,检查是否超标,超标时添加罚分。
      • 检查锅炉出口压力和干度,对不满足条件的情况添加罚分。
      • 计算适应度值,考虑惩罚项,目标是最大化焓值,最小化惩罚。
  3. calculate_H 函数
    • 功能:计算焓值。
    • 主要步骤
      • 给定炉内焓值、炉内热量变化、质量流量、井口饱和水比焓和井口饱和蒸汽比焓等参数。
      • 根据公式计算井口焓值 h_well、干度 X_gan 和总焓值 H
      • 输出总焓值结果。
  4. calculate_deltaP 函数
    • 功能:计算总压降。
    • 主要步骤
      • 设定管道参数,如摩擦因子、管道内径、流速、饱和水密度和饱和水蒸气密度等。
      • 计算 φ,管道压降 deltaP_m 和阀门压降 deltaP_jb
      • 计算总压降为两者之和。
  5. calculate_pipe_heat_loss 函数
    • 功能:计算管道热损失。
    • 主要步骤
      • 设定管道和保温层参数,包括蒸汽温度、环境温度、管道内径、外径、不同层的导热系数和厚度等。
      • 计算总热阻,传热系数,单位长度热损失和总热损失。
  6. encode_position 函数
    • 功能:将 xy 坐标转换为二进制染色体。
    • 主要步骤
      • xy 坐标分别编码为 10 位二进制字符串,合并为一个 20 位二进制字符串,转换为 1 和 0 的数组。
  7. decode_position 函数
    • 功能:将二进制染色体解码为 xy 坐标。
    • 主要步骤
      • 将二进制染色体分为 xy 两部分,将二进制字符串转换为十进制。
  8. selection 函数
    • 功能:基于适应度值进行轮盘赌选择。
    • 主要步骤
      • 计算累计适应度,根据随机数选择个体,将选中的个体复制到新种群。
  9. crossover 函数
    • 功能:进行单点交叉操作。
    • 主要步骤
      • 对于相邻个体,根据交叉概率进行单点交叉,交换交叉点后的基因。
  10. mutation 函数
    • 功能:进行随机变异操作。
    • 主要步骤
      • 对每个个体的每个基因位,根据变异概率随机翻转基因位。
  11. defineWells 函数
    • 功能:定义井的信息,包括坐标、管道长度、压力、流量、温度和干度,并存储在结构体中。

综上所述,该代码整体上使用遗传算法求解注汽站的最优位置,考虑了多种物理约束和性能指标,通过对注汽站位置的优化,使系统在焓值、热损失、压降等方面达到较好的性能。同时,代码包含了位置编码解码、适应度计算、选择、交叉和变异等遗传算法的关键操作,以及各种物理性能指标的计算函数。

相关文章:

matlab实现了一个优化的遗传算法,用于求解注汽站最优位置的问题

function [best_chromosome, best_fitness] optimized_genetic_algorithm()%% 遗传算法参数初始化% 定义井信息&#xff0c;包括坐标、管道长度、流量、压力等wells defineWells(); % 返回井的结构体数组N length(wells); % 注汽井数量% 遗传算法相关参数L_chromosome 20; …...

电商项目-基于ElasticSearch实现商品搜索功能(三)

本系列文章主要介绍基于 Spring Data Elasticsearch 实现商品搜索的后端代码&#xff0c;介绍代码逻辑和代码实现。 主要实现功能&#xff1a;根据搜索关键字查询、条件筛选、规格过滤、价格区间搜索、搜索查询分页、搜索查询排序、高亮查询。 主要应用技术:canal&#xff0c;…...

【Vim Masterclass 笔记12】S06L26 + L27:Vim 文本的搜索、查找及替换同步练习(含点评课)

文章目录 S06L26 Exercise 07 - Search, Find, and Replace1 训练目标2 操作指令2.1. 打开 search-practice.txt 文件2.2. 同一行内的搜索练习2.3. 当前文件内的搜索练习2.4. 单词搜索练习2.5. 全局替换练习 3 退出 Vim S06L27 同步练习点评课 写在前面 Vim 的文本检索、查找与…...

Jsoup实现实时爬取

文章目录 1.作用2.使用pom文件引入示例代码(来自官网) 3.测试代码4.上线代码控制层业务层 1.作用 获取Html文档&#xff0c;然后解析出需要的字段 2.使用 pom文件引入 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redi…...

如何在Ubuntu上安装Cmake

前言 ​ 本文主要阐述如何在Ubuntu22.04上面安装cmake&#xff0c;具体可看下面的操作。 正文 一、环境 Ubuntu22.04 cmake-3.31.4.tar.gz 二、步骤 参考这个方案&#xff1a; 【运维】Ubuntu如何安装最新版本的Cmake&#xff0c;编译安装Cmake&#xff0c;直接命令安装…...

图解Git——分支开发工作流《Pro Git》

分支开发工作流 由于分支管理的便捷&#xff0c; 才衍生出这些典型的工作模式&#xff0c;你可以根据项目实际情况选择。 1. 长期分支 适用于持续开发和发布周期长的项目。常见的长期分支包括&#xff1a; master&#xff1a;只保留稳定的代码&#xff0c;通常用于生产环境。…...

没有正确使用HTTP Range Request,导致访问Azure Blob存储的视频没有实现流式播放

引文&#xff1a; 组里的小伙伴在修改视频播放相关的代码&#xff0c;修改之前的方案使用CDN转发&#xff0c;可以实现流式播放&#xff0c;修改之后的代码因为没有正确的使用Http Range Request, 导致画面访问Azure Blob存储的视频没有实现流式播放&#xff0c;整理下线索在这…...

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测

回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测 目录 回归预测 | MATLAB实RVM相关向量机多输入单输出回归预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 RVM-Adaboost相关向量机集成学习多输入单输出回归预测是一种先进的机器学习方法&#xff0c;用于处理…...

开发人员学习书籍推荐(C#、Python方向)

作为一名开发人员&#xff0c;持续学习和提升自己的技术水平是至关重要的。如今&#xff0c;技术不断更新换代&#xff0c;新的开发框架、语言和工具层出不穷。对于刚入行的开发者或希望深入某一领域的工程师来说&#xff0c;选对书籍是学习的捷径之一。本篇文章将推荐一些经典…...

Springboot + vue 小区物业管理系统

&#x1f942;(❁◡❁)您的点赞&#x1f44d;➕评论&#x1f4dd;➕收藏⭐是作者创作的最大动力&#x1f91e; &#x1f496;&#x1f4d5;&#x1f389;&#x1f525; 支持我&#xff1a;点赞&#x1f44d;收藏⭐️留言&#x1f4dd;欢迎留言讨论 &#x1f525;&#x1f525;&…...

基于深度学习的视觉检测小项目(十二) 使用线条边框和渐变颜色美化界面

到目前为止&#xff0c;已经建立起了基本的项目架构&#xff0c;样式表体系也初步具备&#xff0c;但是与成品的界面相比&#xff0c;还是差点什么。 我的界面效果图&#xff1a; 优秀demo的界面截图&#xff1a; 是的&#xff0c;我的界面太“平” 了&#xff0c;没有立体感&…...

基于OQuPy的量子编程实例探究:理论、实践与展望

基于OQuPy的量子编程探究:理论、分析与实践 一、引言 1.1 研究背景与意义 近年来,量子计算作为一种革命性的计算范式,在科学界与产业界引发了广泛关注。它依托量子力学原理,运用量子比特(qubit)进行信息处理,与传统计算相比,具备并行处理、指数级加速等显著优势,为解…...

【数据库】二、关系数据库

文章目录 二、关系数据库1 关系2 关系数据库3 完整性约束4 关系运算 二、关系数据库 1 关系 域&#xff1a;一组具有相同数据类型的值的集合。 笛卡尔积&#xff1a;所有域&#xff08;域可相同&#xff09;中所有取值的组合 例如&#xff1a;D1{1,2,3}&#xff0c;D2{A,b}&…...

C#类型转换

C#是静态类型的语言&#xff0c;变量一旦声明就无法重新声明或者存储其他类型的数据&#xff0c;除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的&#xff0c;也有隐式的。所谓显式&#xff0c;就是我们必须明确地告知编译器&#xff0c;我们要把变…...

【Vue】Vue组件--上

目录 一、组件基础 二、组件的嵌套关系 1. 基础架构 2. 嵌套 三、组件注册方式 1. 局部注册&#xff1a; 2. 全局注册&#xff1a; 四、组件传递数据 1. 基础架构 2. 传递多值 3. 动态传递数据 五、组件传递多种数据类型 1. Number 2. Array 3. Object 六、组…...

21、Transformer Masked loss原理精讲及其PyTorch逐行实现

1. Transformer结构图 2. python import torch import torch.nn as nn import torch.nn.functional as Ftorch.set_printoptions(precision3, sci_modeFalse)if __name__ "__main__":run_code 0batch_size 2seq_length 3vocab_size 4logits torch.randn(batch…...

构建高性能网络服务:从 Socket 原理到 Netty 应用实践

1. 引言 在 Java 网络编程中&#xff0c;Socket 是实现网络通信的基础&#xff08;可以查看我的上一篇博客&#xff09;。它封装了 TCP/IP 协议栈&#xff0c;提供了底层通信的核心能力。而 Netty 是在 Socket 和 NIO 的基础上&#xff0c;进一步封装的高性能、异步事件驱动的…...

Spring Boot教程之五十六:用 Apache Kafka 消费 JSON 消息

Spring Boot | 如何使用 Apache Kafka 消费 JSON 消息 Apache Kafka 是一个流处理系统&#xff0c;可让您在进程、应用程序和服务器之间发送消息。在本文中&#xff0c;我们将了解如何使用 Apache Kafka 在 Spring Boot 应用程序的控制台上发布 JSON 消息。 为了了解如何创建 …...

Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图

可以根据地理空间数据连接两个索引。在本教程中&#xff0c;我将向你展示如何通过混合邻里多边形和 GPS 犯罪事件坐标来创建纽约市的犯罪地图。 安装 如果你还没有安装好自己的 Elasticsearch 及 Kibana 的话&#xff0c;请参考如下的链接来进行安装。 如何在 Linux&#xff0…...

csp-j知识点:联合(Union)的基本概念

一、联合&#xff08;Union&#xff09;的基本概念 联合是C/C语言中一种特殊的数据结构&#xff0c;它的主要特点是所有成员共享同一块内存空间。这意味着在任何给定时刻&#xff0c;联合中只有一个成员是有效的&#xff0c;因为它们都占用相同的物理内存位置。联合的大小取决…...

在软件开发中正确使用MySQL日期时间类型的深度解析

在日常软件开发场景中&#xff0c;时间信息的存储是底层且核心的需求。从金融交易的精确记账时间、用户操作的行为日志&#xff0c;到供应链系统的物流节点时间戳&#xff0c;时间数据的准确性直接决定业务逻辑的可靠性。MySQL作为主流关系型数据库&#xff0c;其日期时间类型的…...

超短脉冲激光自聚焦效应

前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应&#xff0c;这是一种非线性光学现象&#xff0c;主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场&#xff0c;对材料产生非线性响应&#xff0c;可能…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

在rocky linux 9.5上在线安装 docker

前面是指南&#xff0c;后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增&#xff1a;通道注意力模块&#xff08;SE模块&#xff09; class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...