应用最优化方法及MATLAB实现——第4章代码实现
一、概述
之前对这本书的第三章进行了代码实现,这篇博客是对这本书第4章相关代码进行实现,部分内容安装书中代码无法实现相应功能,MATLAB会报错,对其进行一定程度的更改后,可以正常运行,与书中所给示例运行结果相一致。
二、具体实现
(一)使用函数
1.概述
因为书中几个条件使用的示例函数均相同,在此将其单独罗列出来,复制即可。
2.函数实现
f_test1和其导数g_test1。
function y = f_test1(x)
%F_TEST1 此处显示有关此函数的摘要
% 此处显示详细说明y = -3 * x * sin(0.75 * x) + exp(-2 * x);end
function y = g_test1(x)
%G_TEST1 此处显示有关此函数的摘要
% 此处显示详细说明y = -2 / exp(2 * x) - 3 * sin(x * 0.75) - (3 * 0.75 * x * cos(0.75 * x));end
f_test2和其导数g_test2。
function y = f_test2(x)
%F_TEST2 此处显示有关此函数的摘要
% 此处显示详细说明x1 = x(1);
x2 = x(2);
y = x1 ^ 2 + x2 ^ 2 - 1;end
function y = g_test2(x)
%G_TEST2 此处显示有关此函数的摘要
% 此处显示详细说明x1 = x(1);
x2 = x(2);
y = 2 * x1 + 2 * x2;end
f_test3和其导数g_test3。
function y = f_test3(x)
%F_TEST3 此处显示有关此函数的摘要
% 此处显示详细说明y = sin(3 * x) / x;end
function y = g_test3(x)
%G_TEST3 此处显示有关此函数的摘要
% 此处显示详细说明y = (3 * cos(3 * x)) / x - sin(3 * x) / ( x ^ 2);end
(二)Armijo_search条件
1.main.m文件
这个文件是此条件的主运行文件,放开相应注释即可运行每个示例。
% 这个文件主要为Armijo_search文件的主程序% 清空
close;
clear;
clc;% 第一个示例
% x_current = -2;
% d_current = 1;
% rho = 0.1;
% [alpha_acceptable, x_next, f_next, k] = Armijo_search(@f_test1, @g_test1, x_current, d_current, rho);% 第二个示例
% x_current = [2;2];
% d_current = [-1;-1];
% rho = 0.1;
% [alpha_acceptable, x_next, f_next, k] = Armijo_search(@f_test2, @g_test2, x_current, d_current, rho);% 第三个示例
x_current = 5;
d_current = 1;
rho = 0.5;
[alpha_acceptable, x_next, f_next, k] = Armijo_search(@f_test3, @g_test3, x_current, d_current, rho);
2.Armijo_search.m文件
此函数跟书中函数一样,没有太大改动。
function [alpha_acceptable, x_next, f_next, k] = Armijo_search(f_test, g_test, x_current, d_current, rho)
% f_test, 目标函数
% g_test, 目标函数对决策变量x的导数
% x_current, x在向量空间中的当前点
% d_current, f_test在x_current的下降搜索方向
% rho, 可接受系数k_max = 1000;
k = 0;
f_current = f_test(x_current);
g_current = g_test(x_current);
f_alpha_lower_k = f_current;
g_alpha_lower_k = g_current;
df_alpha_lower_k = (d_current') * g_alpha_lower_k; % 这里这个值是一直保持不变的
f_alpha_lower_0 = f_alpha_lower_k;
df_alpha_lower_0 = df_alpha_lower_k;alpha_lower_k = 0;
alpha_upper_k = 1e8;
alpha_k = alpha_upper_k;%
for k = 1:k_maxx_alpha_k = x_current + alpha_k * d_current;f_alpha_k = f_test(x_alpha_k);Armijo_condition = f_alpha_k - f_alpha_lower_0 - rho * alpha_k * df_alpha_lower_0;if (Armijo_condition <= 0)alpha_acceptable = alpha_k;x_next = x_alpha_k;f_next = f_alpha_k;break;elseif (alpha_k < alpha_upper_k)alpha_upper_k = alpha_k;endalpha_k = alpha_lower_k + (1/2) * ((alpha_k ^ 2) * df_alpha_lower_k) / (f_alpha_lower_k - f_alpha_k + alpha_k * df_alpha_lower_k);% x_alpha_k = x_current + alpha_k * d_current;% g_alpha_lower_k = g_test(x_alpha_k);% df_alpha_lower_k = (d_current') * g_alpha_lower_k;end
endif(k == k_max)disp('Armijo inexact line search algorithm failed');alpha_acceptable = NaN;x_next = NaN;f_next = NaN;
endend
(三)Goldstein_search条件
1.main.m文件
这个文件是此条件的主运行文件,放开相应注释即可运行每个示例。
% 这个文件主要为Goldstein_search文件的主程序% 清空
close;
clear;
clc;% 第一个示例
% x_current = -2;
% d_current = 1;
% rho = 0.1;
% [alpha_acceptable, x_next, f_next, k] = Goldstein_search(@f_test1, @g_test1, x_current, d_current, rho);% 第二个示例
x_current = [2;2];
d_current = [-1;-1];
rho = 0.1;
[alpha_acceptable, x_next, f_next, k] = Goldstein_search(@f_test2, @g_test2, x_current, d_current, rho);% 第三个示例
% x_current = 5;
% d_current = 1;
% rho = 0.1;
% [alpha_acceptable, x_next, f_next, k] = Goldstein_search(@f_test3, @g_test3, x_current, d_current, rho);
2.Goldstein_search.m文件
此文件有些改动。
function [alpha_acceptable, x_next, f_next, k] = Goldstein_search(f_test, g_test, x_current, d_current, rho)
% f_test, 目标函数
% g_test, 目标函数对决策变量x的导数
% x_current, x在向量空间中的当前点
% d_current, f_test在x_current的下降搜索方向
% rho, 可接受系数k_max = 1000;
k = 0;
f_current = f_test(x_current);
g_current = g_test(x_current);
f_alpha_lower_k = f_current;
g_alpha_lower_k = g_current;
df_alpha_lower_k = (d_current') * g_alpha_lower_k;
f_alpha_lower_0 = f_alpha_lower_k;
df_alpha_lower_0 = df_alpha_lower_k;tolerance = 1e-15;
if (abs(df_alpha_lower_k) > tolerance)alpha_initial = - 2 * f_alpha_lower_k ./ df_alpha_lower_k;
elsealpha_initial = 1;
end
alpha_lower_k = 0;
alpha_upper_k = 1e8;
alpha_k = alpha_initial; % 这个值是从初始值开始for k = 1:k_maxx_alpha_k = x_current + alpha_k .* d_current;f_alpha_k = f_test(x_alpha_k);g_alpha_k = g_test(x_alpha_k);df_alpha_k = (d_current') * g_alpha_k;Goldstein_condition1 = f_alpha_k - f_alpha_lower_0 - rho * alpha_k * (df_alpha_lower_0');Goldstein_condition2 = f_alpha_lower_0 + (1 - rho) * alpha_k * (df_alpha_lower_0') - f_alpha_k;if(Goldstein_condition1 <= 0)if(Goldstein_condition2 <= 0)alpha_acceptable = alpha_k;x_next = x_alpha_k;f_next = f_alpha_k;break;elsedelta_alpha_k = (alpha_k - alpha_lower_k) * df_alpha_k / (df_alpha_lower_k - df_alpha_k);if(delta_alpha_k <= 0)alpha_k_temp = 2 * alpha_k;elsealpha_k_temp = alpha_k + delta_alpha_k;endalpha_lower_k = alpha_k;f_alpha_lower_k = f_alpha_k;df_alpha_lower_k = df_alpha_k;alpha_k = alpha_k_temp;endelseif (alpha_k < alpha_upper_k)alpha_upper_k = alpha_k;endalpha_k_temp = alpha_lower_k + (1/2) * (((alpha_k - alpha_lower_k) ^ 2) * df_alpha_lower_k) / (f_alpha_lower_k - f_alpha_k + (alpha_k - alpha_lower_k) * df_alpha_lower_k);alpha_k = alpha_k_temp;endif(alpha_upper_k - alpha_lower_k < tolerance)alpha_acceptable = alpha_k;x_next = x_alpha_k;f_next = f_alpha_k;break;end
end
if((Goldstein_condition1 > 0)||(Goldstein_condition2 > 0))disp('Goldstein inexact line search algorithm failed');alpha_acceptable = NaN;x_next = NaN;f_next = NaN;
end
end
3.注意
(1)第1方面
这个文件改动的主要原因是因为,在运行第二个示例中,无法安装成功运行,会出现数据维度不一样的报错。因为第二个示例所给的数据不再是单一变量,而是双变量。
如图所示,如图中红线划出部分。这个部分在单一变量中不会出错,但是在多变量中,因为向量没有除法,所以会报错。

将其改成如图所示,即可消除报错。

(2)第二方面
除此之外,还有一部分,如图中红线圈出,由于这两个向量维度相同,都是2*1,所以无法直接相乘。

将其更改为如图所示的部分,更改的思路是因为最后需要的是标量,需要将后面的维度为2*1的,进行转置即可。

(四)Wolfe_search条件
1.main.m文件
这个文件是此条件的主运行文件,放开相应注释即可运行每个示例。
% 这个文件主要为Wolfe_search文件的主程序% 清空
close;
clear;
clc;% 第一个示例
% x_current = -2;
% d_current = 1;
% rho = 0.1;
% sigma = 0.11;
% [alpha_acceptable, x_next, f_next, k] = Wolfe_search(@f_test1, @g_test1, x_current, d_current, rho, sigma);% 第二个示例
x_current = [2;2];
d_current = [-1;-1];
rho = 0.1;
sigma = 0.11;
[alpha_acceptable, x_next, f_next, k] = Wolfe_search(@f_test2, @g_test2, x_current, d_current, rho, sigma);% 第三个示例
% x_current = 5;
% d_current = 1;
% rho = 0.5;
% sigma = 0.11;
% [alpha_acceptable, x_next, f_next, k] = Wolfe_search(@f_test3, @g_test3, x_current, d_current, rho, sigma);
2.Wolfe_search.m文件
此文件的部分地方同样也经过更改,部分更改的思路与前面有一些相似之处。
function [alpha_acceptable, x_next, f_next, k] = Wolfe_search(f_test, g_test, x_current, d_current, rho, sigma)
% f_test, 目标函数
% g_test, 目标函数对决策变量x的导数
% x_current, x在向量空间中的当前点
% d_current, f_test在x_current的下降搜索方向
% rho, 可接受系数
% sigma, 可接受点处的切线斜率大于初始点处切线斜率的倍数,0<rho<sigma<1k_max = 1000;
k = 0;
f_current = f_test(x_current);
g_current = g_test(x_current);
f_alpha_lower_k = f_current;
g_alpha_lower_k = g_current;
df_alpha_lower_k = (d_current') * g_alpha_lower_k;
f_alpha_lower_0 = f_alpha_lower_k;
df_alpha_lower_0 = df_alpha_lower_k;tolerance = 1e-15;
if (abs(df_alpha_lower_k) > tolerance)alpha_initial = - 2 * f_alpha_lower_k ./ df_alpha_lower_k;
elsealpha_initial = 1;
end
alpha_lower_k = 0;
alpha_upper_k = 1e8;
alpha_k = alpha_initial; % 这个值是从初始值开始for k = 1:k_maxx_alpha_k = x_current + alpha_k .* d_current;f_alpha_k = f_test(x_alpha_k);g_alpha_k = g_test(x_alpha_k);df_alpha_k = (d_current') * g_alpha_k;Wolfe_condition1 = f_alpha_k - f_alpha_lower_0 - rho * alpha_k * (df_alpha_lower_0');Wolfe_condition2 = sum(sigma * df_alpha_lower_0 - df_alpha_k);if(Wolfe_condition1 <= 0)if(Wolfe_condition2 <= 0)alpha_acceptable = alpha_k;x_next = x_alpha_k;f_next = f_alpha_k;break;elsedelta_alpha_k = (alpha_k - alpha_lower_k) .* df_alpha_k ./ (df_alpha_lower_k - df_alpha_k);if(delta_alpha_k <= 0)alpha_k_temp = 2 * alpha_k;elsealpha_k_temp = alpha_k + delta_alpha_k;endalpha_lower_k = alpha_k;f_alpha_lower_k = f_alpha_k;df_alpha_lower_k = df_alpha_k;alpha_k = alpha_k_temp;endelseif (alpha_k < alpha_upper_k)alpha_upper_k = alpha_k;endalpha_k_temp = alpha_lower_k + (1/2) * (((alpha_k - alpha_lower_k) ^ 2) * df_alpha_lower_k) / (f_alpha_lower_k - f_alpha_k + (alpha_k - alpha_lower_k) * df_alpha_lower_k);alpha_k = alpha_k_temp;endif(alpha_upper_k - alpha_lower_k < tolerance)alpha_acceptable = alpha_k;x_next = x_alpha_k;f_next = f_alpha_k;break;end
end
if((Wolfe_condition1 > 0)||(Wolfe_condition2 > 0))disp('Wolfe inexact line search algorithm failed');alpha_acceptable = NaN;x_next = NaN;f_next = NaN;
end
end
3.注意
(1)第1方面
与Goldstein条件相同的原因,需要将其修改为下面这样,如图所示。

(2)第2方面
与Goldstein条件相同的原因,需要将其修改为下面这样,如图所示。原因还是因为维度问题。

(3)第3方面
如书中源代码所示,红线划出部分。这个Wolfe_condition2计算结果是2*1维的向量,不是一个标量,虽然在下面判断Wolfe_condition2是否≤0时候没有影响。

但其会影响到这个部分,最后的部分的判断会报错,如图所示。

根据对书中内容的分析,此处应该是个标量,而不应该是个向量,如图所示。

使用sum将其每项相加即可。

(五)Strong_Wolfe_search条件
1.main.m文件
这个文件是此条件的主运行文件,放开相应注释即可运行每个示例。
% 这个文件主要为Strong_Wolfe_search文件的主程序% 清空
close;
clear;
clc;% 第一个示例
x_current = -2;
d_current = 1;
rho = 0.1;
sigma = 0.11;
[alpha_acceptable, x_next, f_next, k] = Strong_Wolfe_search(@f_test1, @g_test1, x_current, d_current, rho, sigma);% 第二个示例
% x_current = [2;2];
% d_current = [-1;-1];
% rho = 0.1;
% sigma = 0.11;
% [alpha_acceptable, x_next, f_next, k] = Strong_Wolfe_search(@f_test2, @g_test2, x_current, d_current, rho, sigma);% 第三个示例
% x_current = 5;
% d_current = 1;
% rho = 0.1;
% sigma = 0.11;
% [alpha_acceptable, x_next, f_next, k] = Strong_Wolfe_search(@f_test3, @g_test3, x_current, d_current, rho, sigma);
2.Strong_Wolfe_search.m文件
此文件经过部分更改。
function [alpha_acceptable, x_next, f_next, k] = Strong_Wolfe_search(f_test, g_test, x_current, d_current, rho, sigma)
% f_test, 目标函数
% g_test, 目标函数对决策变量x的导数
% x_current, x在向量空间中的当前点
% d_current, f_test在x_current的下降搜索方向
% rho, 可接受系数
% sigma, 可接受点处的切线斜率大于初始点处切线斜率的倍数,0<rho<sigma<1k_max = 1000;
k = 0;
f_current = f_test(x_current);
g_current = g_test(x_current);
f_alpha_lower_k = f_current;
g_alpha_lower_k = g_current;
df_alpha_lower_k = (d_current') * g_alpha_lower_k;
f_alpha_lower_0 = f_alpha_lower_k;
df_alpha_lower_0 = df_alpha_lower_k;tolerance = 1e-15;
if (abs(df_alpha_lower_k) > tolerance)alpha_initial = - 2 * f_alpha_lower_k ./ df_alpha_lower_k;
elsealpha_initial = 1;
end
alpha_lower_k = 0;
alpha_upper_k = 1e8;
alpha_k = alpha_initial; % 这个值是从初始值开始for k = 1:k_maxx_alpha_k = x_current + alpha_k .* d_current;f_alpha_k = f_test(x_alpha_k);g_alpha_k = g_test(x_alpha_k);df_alpha_k = (d_current') * g_alpha_k;Strong_Wolfe_condition1 = f_alpha_k - f_alpha_lower_0 - rho * alpha_k * (df_alpha_lower_0');Strong_Wolfe_condition2 = sum(sigma * df_alpha_lower_0 + abs(df_alpha_k));% Strong_Wolfe_condition2 = sum(abs(df_alpha_k) - abs(sigma * df_alpha_lower_0));if(Strong_Wolfe_condition1 <= 0)if(Strong_Wolfe_condition2 <= 0)alpha_acceptable = alpha_k;x_next = x_alpha_k;f_next = f_alpha_k;break;elsedelta_alpha_k = (alpha_k - alpha_lower_k) .* df_alpha_k ./ (df_alpha_lower_k - df_alpha_k);if(delta_alpha_k <= 0)alpha_k_temp = 2 * alpha_k;elsealpha_k_temp = alpha_k + delta_alpha_k;endalpha_lower_k = alpha_k;f_alpha_lower_k = f_alpha_k;df_alpha_lower_k = df_alpha_k;alpha_k = alpha_k_temp;endelseif (alpha_k < alpha_upper_k)alpha_upper_k = alpha_k;endalpha_k_temp = alpha_lower_k + (1/2) * (((alpha_k - alpha_lower_k) ^ 2) * df_alpha_lower_k) / (f_alpha_lower_k - f_alpha_k + (alpha_k - alpha_lower_k) * df_alpha_lower_k);alpha_k = alpha_k_temp;endif(alpha_upper_k - alpha_lower_k < tolerance)alpha_acceptable = alpha_k;x_next = x_alpha_k;f_next = f_alpha_k;break;end
end
if((Strong_Wolfe_condition1 > 0)||(Strong_Wolfe_condition2 > 0))disp('Wolfe inexact line search algorithm failed');alpha_acceptable = NaN;x_next = NaN;f_next = NaN;
end
end
3.注意
(1)第1方面
跟前面类似,如图所示。

(2)第2方面
跟前面类似,如图所示,这里将两个问题合并。

(3)第3方面
如图所示,第二个判断条件,可以换成注释掉的那种,根据书中的条件,第二种写法更加符合书中的条件,如图所示。


相关文章:
应用最优化方法及MATLAB实现——第4章代码实现
一、概述 之前对这本书的第三章进行了代码实现,这篇博客是对这本书第4章相关代码进行实现,部分内容安装书中代码无法实现相应功能,MATLAB会报错,对其进行一定程度的更改后,可以正常运行,与书中所给示例运行…...
搜维尔科技:Riablo提供一种创新的康复解决方案,通过激活本体感觉,并通过视听反馈促进神经肌肉的训练。
Riablo提供一种创新的康复解决方案,通过激活本体感觉,并通过视听反馈促进神经肌肉的训练。 搜维尔科技:Riablo提供一种创新的康复解决方案,通过激活本体感觉,并通过视听反馈促进神经肌肉的训练。...
NodeJS技巧:在循环中管理异步函数的执行次数
背景介绍 在现代Web开发中,NodeJS因其高效的异步处理能力而备受青睐。尤其在数据抓取、网络爬虫等应用场景中,NodeJS的非阻塞I/O特性使其成为不二之选。然而,在实际编程过程中,我们经常会遇到一个棘手的问题——如何在循环中控制…...
debian 实现离线批量安装软件包
前言 实现在线缓冲需要的软件和对应依赖的包,离线进行安装 ,用于软件封装。 测试下载一个gcc和依赖环境,关闭默认在线源,测试离线安装gcc和依赖环境 兼容 debian ubuntu/test 测试下载安装包到目录 vim /repo_download.sh #!…...
远程开机准备工作
本文章以华硕主板B460M为样板,进行远程开机的前提设置 第一步主板设置 开机按del进入bios主界面,进入高级模式 找到高级-----高级电源管理 进去以后选择由pci_e设备唤醒点击开启 设置完成以后保存并退出 第二步网卡设置 打开设备管理器找到网络适配器…...
PGCCC|【PostgreSQL】PCA+PCP+PCM等IT类认证申报个税退税指南
小编特将PostgreSQL证书申报个税退税流程,编辑成文,供大家申报参考哦~ 1.申报专项附加扣除 第一步:打开个人所得税APP,选择“专项附加扣除填报”: 第二步:“扣除年度”选择您要申报的年度,并…...
让AI语言模型自由飞翔:LangChain框架的奇妙世界
今天,我将为大家揭开一项令人激动的技术——LangChain。想象一下,如果能将人工智能的强大能力与我们日常使用的数据和工具无缝连接,那将开启怎样崭新且无限的可能! LangChain,一个专为大型语言模型设计的框架…...
solidity基础语法(以太坊solidity合约)
solidity基础语法(以太坊solidity合约) 1-值类型和取值范围2-引用类型3-引用类型高阶4-固定数组和动态数组 1-值类型和取值范围 https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency https://learnblockchain…...
【机器学习实战】电力需求预测挑战赛 Datawhale AI 夏令营 task2
【机器学习实战】电力需求预测挑战赛 Datawhale AI 夏令营 task2 一、赛题背景二、赛题任务三、评审规则四、具体实践4.1 实现的思路4.2 理论介绍GBDTLightGBM 4.3 代码的实现与运行4.3.1 导入模块4.3.2 探索性数据分析(EDA)4.3.3 特征工程4.3.4 模型训练…...
【设计模式】【创建型模式】【02工厂模式】
系列文章 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 系…...
FPGA设计中的流水线 -分割大的计算电路可以更快的处理数据。
FPGA(现场可编程门阵列)设计中的流水线优化是一种提高设计性能的技术,它通过将设计分解为多个阶段或步骤来实现。每个阶段可以并行执行,从而提高整体的吞吐量和效率。以下是流水线优化的一些关键概念和作用: 意思&…...
GNU/Linux - U-BOOT的GPIO command
在嵌入式Linux开发中,先运行的是u-boot,然后再加载Linux内核。 启动时如果设置了u-boot等待时间,在等待时间内,按任意键就会进入u-boot命令行环境。 在u-boot命令行环境下,可以使用gpio命令来操作GPIO。 Synopsis gpi…...
35.UART(通用异步收发传输器)-RS232(2)
(1)RS232接收模块visio框图: (2)接收模块Verilog代码编写: /* 常见波特率: 4800、9600、14400、115200 在系统时钟为50MHz时,对应计数为: (1/4800) * 10^9 /20 -1 10416 …...
OpenLayers学习笔记-点位聚合
需求 用户点击行政区划等操作后,从后台获取区域内的点位数据,在地图上聚合显示。用户手动取消聚合,点位直接渲染在地图上。 实现过程 使用后台返回的点位数据,通过new ol.source.Vector({features})创建矢量数据源。使用new ol.source.Cluster({source})创建聚合标注数据…...
flutter实现语言的国际化
目录 前言 一、GetX实现国际化(推荐) 1.安装Getx 2.创建国际化的文件 3.使用国际化字符串 4.配置GetMaterialApp 5.更改语言 6.系统语言 编辑 7.原生工程配置 1.iOS工程配 1.打开iOS工程,在Project的info里面添加语言 2.创建String File文件 2.andr…...
服务端正常启动了,但是客户端请求不到
服务端正常启动了,但是客户端请求不到有哪些原因?如何排查? 如果客户端请求的接口没有响应,排查的方式: 检查接口IP地址是否正确,ping一下接口地址。 检查被测接口端口号是否正确,可以在本机Telnet接口的IP和端口号…...
鸿蒙开发 -本地数据库操作
// 1导入模块 import relationalStore from @ohos.data.relationalStore;export class AthUserDbManager{//2.获取RdbStore实例,要注意的是,此处的getContext(this)用于获取应用上下文:getcreatDbtable(dbname:string){//配置数据库信息:const STORE_CONFIG :relationalStor…...
主机安全-进程、命令攻击与检测
目录 概述反弹shell原理nc/dev/xxx反弹shell下载不落地反弹Shell各种语言反弹shell linux提权sudosuid提权mysql提权 Dnslog参考 概述 本文更新通过在主机(不含容器)上直接执行命令或启动进程来攻击的场景。检测方面以字节跳动的开源HIDS elkeid举例。每…...
FPGA FIR fdatool filter designer MATLAB
位数问题 fdatool 先确定输入信号的位宽,比如17位在fdatool中,选set quantization parameters 选input/output 设置input word length 为17bit(not confirmed) fir compiler implementation 注意: 当设置输入位宽为16位时,ip核…...
水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集)
水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集) 目录 水表数字识别2:Pytorch DBNet实现水表数字检测(含训练代码和数据集) 1.前言 2. 水表数字识别的方法 3. 水表数字识别数据集 4. 水表数字分割模型训练 (1&#x…...
练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...
Cesium1.95中高性能加载1500个点
一、基本方式: 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Java数值运算常见陷阱与规避方法
整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...
R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
