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

论文复现:Predictive Control of Networked Multiagent Systems via Cloud Computing

Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现

文章目录

  • Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现
    • 论文摘要
    • 系统参数初始化
    • 系统模型
    • 观测器
    • 预测过程
    • 控制器设计
    • 系统的整体框图
    • 仿真结果

论文摘要

翻译版本见:论文翻译:通过云计算对联网多智能体系统进行预测控制-CSDN博客

本文研究了基于云计算的网络化多智能体预测控制系统的设计与分析。该文提出一种网络化多智能体系统(NMAS)云预测控制方案,以同时实现一致性和稳定性,并主动补偿网络时延。详细介绍了NMAS云预测控制器的设计。对云预测控制方案的分析给出了闭环网络化多智能体控制系统稳定性和一致性的必要和充分条件。通过仿真验证了所提方案表征NMAS的动力学行为和控制性能。研究结果为NMAS及其应用的合作和协调控制的发展奠定了基础。

论文链接:Predictive Control of Networked Multiagent Systems via Cloud Computing | IEEE Journals & Magazine | IEEE Xplore

期刊:IEEE Transactions on Cybernetics

分区:Q1

论文引用:G. -P. Liu, “Predictive Control of Networked Multiagent Systems via Cloud Computing,” in IEEE Transactions on Cybernetics, vol. 47, no. 8, pp. 1852-1859, Aug. 2017, doi: 10.1109/TCYB.2017.2647820.

项目地址:

CSDN资源论文复现:PredictiveControlofNetworkedMultiagentSystemsviaClou资源-CSDN文库
githublongchentian/Predictive-Control-of-Networked-Multiagent-Systems-via-Cloud-Computing: Predictive Control of Networked Multiagent Systems via Cloud Computing 论文复现 (github.com)

系统参数初始化

clc;
clear all;
close all;
A1 = [1.7,-1.3;1.6, -1.8];
B1 = [1.0;2.0];
C1 = [1.0,0.3];
A2 = [1.8,-1.4;1.8,-1.9];
B2 = [1.7;3.4];
C2 = [0.7,0.2];
A3 = [1.4,-1.1;1.3,-1.5];
B3 = [0.8;1.6];
C3 = [1.1,0.4];
G1 = -0.16;
G2 = -0.18;
G3 = -0.14;
H1 = -0.12;
H2 = -0.10;
H3= -0.14;
F1 = [-0.4483;-1.1724];
F2 = [-0.6803;-1.6191];
F3 = [-0.3908;-0.9254];
M = [1,0,1;1,1,1;1,0,1 
];
X1 =[0.1;0.2];
X2 =[0.1;0.7];
X3 =[0.1;0.8];
samp_t = 0.2
a1 = int8(3);
a2 = int8(2);
a3 = int8(3);
s1 = int8(2);
s2 = int8(3);
s3 = int8(1);

系统模型

为了说明如何轻松地设计、分析和执行云预测控制方案,下面考虑了线性非同一多智能体。实际上,该方案可以扩展到更一般的 NMAS,例如具有不确定性和干扰的非线性 NMAS
x i ( t + 1 ) = A i x i ( t ) + B i u i ( t ) y i ( t ) = C i x i ( t ) \begin{align} x_{i} (t+1)=&A_{i} x_{i} (t)+B_{i} u_{i} (t) \notag \\ y_{i} (t)=&C_{i} x_{i} (t) \end{align} xi(t+1)=yi(t)=Aixi(t)+Biui(t)Cixi(t)
∀i ∈ N,其中 x i ∈ R n i x_i∈R^{n_i} xiRni y i ∈ l y_i∈l yil u i ∈ m i u_i∈m_i uimi 分别是第 i i i 个智能体的状态、输出和输入向量, A i ∈ R n i × n i A_i∈R^{n_i×n_i} AiRni×ni B i ∈ R n i × m i B_i ∈R^{n_i×m_i} BiRni×mi C i ∈ R l × n i C_i ∈R^{l×n_i} CiRl×ni 是第 i 个智能体的矩阵。

在这里插入图片描述

观测器

假设所有智能体都是可观察的,但它们的状态是不可测量的。然后,基于输出 y i ( t − s i ) y_i(t − s_i) yi(tsi) 和控制输入 u i ( t − s i ) u_i(t − s_i) ui(tsi),第 i 个智能体的状态观察器设计如下:
x ^ i ( t − s i + 1 ∣ t − s i ) = A i x ^ i ( t − s i ∣ t − s i − 1 ) + B i u i ( t − s i ) + F i ( y i ( t − s i ) − y ^ i ( t − s i ∣ t − s i − 1 ) ) y ^ i ( t − s i ∣ t − s i − 1 ) = C i x ^ i ( t − s i ∣ t − s i − 1 ) \begin{align} \hat {x}_{i} \left ({t-s_{i} +1 | t-s_{i} }\right )=&A_{i} \hat {x}_{i} \left ({t-s_{i} | t-s_{i} -1}\right )+B_{i} u_{i} \left ({t-s_{i} }\right )\notag \\&+ \,\, F_{i} \left ({y_{i} \left ({t-s_{i} }\right )-\hat {y}_{i} \left ({t-s_{i} | t-s_{i} -1}\right )}\right ) \notag \\ \hat {y}_{i} \left ({t-s_{i} | t-s_{i} -1}\right )=&C_{i} \hat {x}_{i} \left ({t-s_{i} | t-s_{i} -1}\right ) \end{align} x^i(tsi+1∣tsi)=y^i(tsitsi1)=Aix^i(tsitsi1)+Biui(tsi)+Fi(yi(tsi)y^i(tsitsi1))Cix^i(tsitsi1)
其中 x ^ i ( t − k ∣ t − j ) ∈ ℜ n i ( k < j ) \hat {x}_{i} (t-k|t-j)\in \Re ^{n_{i}} (k<j) x^i(tktj)ni(k<j)表示第 i 个智能体根据时间 t − j t − j tj 之前的可用信息对时间 t − k t − k tk 的状态预测, y ^ i ( . ∣ . ) ∈ ℜ l i \hat {y}_{i} (.|.)\in \Re ^{l_{i}} y^i(.∣.)li是输出预测, F i ∈ ℜ n i × l i F_{i} \in \Re ^{n_{i} \times l_{i}} Fini×li是观察者增益矩阵。

在这里插入图片描述

预测过程

要使用直到时间 t − s i t − s_i tsi 的可用信息来预测第 i 个智能体的状态,可以使用从 t − s i + 2 t − s_i + 2 tsi+2 t + a i t + a_i t+ai 开始的以下时间状态估计:
x ^ i ( t − s i + k ∣ t − s i ) = A i x ^ i ( t − s i + k − 1 ∣ t − s i ) + B i u i ( t − s i + k − 1 ) y ^ i ( t − s i + k ∣ t − s i ) = C i x ^ i ( t − s i + k ∣ t − s i ) \begin{align} \hat {x}_{i} \left ({t-s_{i} +k | t-s_{i} }\right )=&A_{i} \hat {x}_{i} \left ({t-s_{i} +k-1 | t-s_{i} }\right )\notag \\&+ \,\, B_{i} u_{i} \left ({t-s_{i} +k-1}\right ) \\ \hat {y}_{i} \left ({t-s_{i} +k | t-s_{i} }\right )=&C_{i} \hat {x}_{i} \left ({t-s_{i} +k | t-s_{i} }\right ) \end{align} x^i(tsi+ktsi)=y^i(tsi+ktsi)=Aix^i(tsi+k1∣tsi)+Biui(tsi+k1)Cix^i(tsi+ktsi)
传感器时延部分的预测+执行器部分的预测:

在这里插入图片描述
在这里插入图片描述

预测部分代码:

function [x_,y]= fcn(u10,u9,u8,u7,u6,u5,u4,u3,u2,u1,x,s,a,A,B,C)
% tau的上界是N,最多迭代N次,控制输入按照t-s_i时刻的值
tau = s + a;
temp0 = x;
if tau == 1temp1 = A * temp0 + B * u1;x_ = temp1;
elseif tau == 2temp1 = A * temp0 + B * u2;temp2 = A * temp1 + B * u1;x_ = temp2;
elseif tau == 3temp1 = A * temp0 + B * u3;temp2 = A * temp1 + B * u2;temp3 = A * temp2 + B * u1;x_ = temp3;
elseif tau == 4temp1 = A * temp0 + B * u4;temp2 = A * temp1 + B * u3;temp3 = A * temp2 + B * u2;temp4 = A * temp3 + B * u1;x_ = temp4;  
elseif tau == 5temp1 = A * temp0 + B * u5;temp2 = A * temp1 + B * u4;temp3 = A * temp2 + B * u3;temp4 = A * temp3 + B * u2;temp5 = A * temp4 + B * u1;x_ = temp5;
elseif tau == 6temp1 = A * temp0 + B * u6;temp2 = A * temp1 + B * u5;temp3 = A * temp2 + B * u4;temp4 = A * temp3 + B * u3;temp5 = A * temp4 + B * u2;temp6 = A * temp5 + B * u1;x_ = temp6;
elseif tau == 7temp1 = A * temp0 + B * u7;temp2 = A * temp1 + B * u6;temp3 = A * temp2 + B * u5;temp4 = A * temp3 + B * u4;temp5 = A * temp4 + B * u3;temp6 = A * temp5 + B * u2;temp7 = A * temp6 + B * u2;x_ = temp7;
elseif tau == 8temp1 = A * temp0 + B * u8;temp2 = A * temp1 + B * u7;temp3 = A * temp2 + B * u6;temp4 = A * temp3 + B * u5;temp5 = A * temp4 + B * u4;temp6 = A * temp5 + B * u3;temp7 = A * temp6 + B * u2;temp8 = A * temp7 + B * u1;x_ = temp8;
elseif tau == 9temp1 = A * temp0 + B * u9;temp2 = A * temp1 + B * u8;temp3 = A * temp2 + B * u7;temp4 = A * temp3 + B * u6;temp5 = A * temp4 + B * u5;temp6 = A * temp5 + B * u4;temp7 = A * temp6 + B * u3;temp8 = A * temp7 + B * u2;temp9 = A * temp8 + B * u1;x_ = temp9;
elseif tau == 10temp1 = A * temp0 + B * u10;temp2 = A * temp1 + B * u9;temp3 = A * temp2 + B * u8;temp4 = A * temp3 + B * u7;temp5 = A * temp4 + B * u6;temp6 = A * temp5 + B * u5;temp7 = A * temp6 + B * u4;temp8 = A * temp7 + B * u3;temp9 = A * temp8 + B * u2;temp10 = A * temp9 + B * u1;x_ = temp10;
else x_ = temp0;end
y = C * x_;

控制器设计

假设所需的参考输入由阶跃信号向量 r 0 r_0 r0 表示,并且仅应用于其中一个智能体,例如,具有 a 1 ≥ a i , ∀ i ∈ N − 1 a_1 ≥ a_i,∀i ∈ N − {1} a1aiiN1的第一个智能体。为了跟踪这个所需的参考输入,引入了一组动态变量
z 1 ( t + 1 + a 1 ) = z 1 ( t + a 1 ) + y ^ 1 ( t + a 1 ∣ t − s 1 ) − r 0 z i ( t + 1 + a i ) = z i ( t + a i ) + y ^ i ( t + a i ∣ t − s i ) − y ^ 1 ( t + a i ∣ t − s 1 ) . \begin{align} z_{1} \left ({t+1+a_{1}}\right )=&z_{1} \left ({t+a_{1}}\right )+\hat {y}_{1} \left ({t+a_{1} | t-s_{1} }\right )-r_{0}\qquad \\ z_{i} \left ({t+1+a_{i} }\right )=&z_{i} \left ({t+a_{i}}\right )+\hat {y}_{i} \left ({t +a_{i} | t-s_{i} }\right )\notag \\&- \,\, \hat {y}_{1} \left ({t +a_{i} | t- s_{1} }\right ). \end{align} z1(t+1+a1)=zi(t+1+ai)=z1(t+a1)+y^1(t+a1ts1)r0zi(t+ai)+y^i(t+aitsi)y^1(t+aits1).
(5)和(6)中动态变量的作用相当于常规控制系统中的积分作用,可以消除稳态跟踪误差。
在这里插入图片描述

为了主动补偿网络延迟 s i s_i si a i , ∀ i ∈ N a_i,∀i ∈ N aiiN,NMAS 的预测控制协议如下:
u ^ i ( t + a i ∣ t − s i ) = G i z i ( t + a i ) + H i ∑ j = 1 N c i j ( y ^ j ( t + a i ∣ t − s j ) − y ^ i ( t + a i ∣ t − s i ) ) \begin{align} \hat {u}_{i} \left ({t+a_{i} | t-s_{i} }\right )=&G_{i} z_{i} \left ({t+a_{i} }\right )\notag \\&+ \,\, H_{i} \sum _{j=1}^{N}c_{ij} \Biggl ({\hat {y}_{j} \left ({t+a_{i} | t-s_{j} }\right )}\notag \\&\qquad \qquad \qquad {- \,\, \hat {y}_{i} \left ({t+a_{i} | t-s_{i} }\right )}\Biggr )\qquad \end{align} u^i(t+aitsi)=Gizi(t+ai)+Hij=1Ncij(y^j(t+aitsj)y^i(t+aitsi))
其中
c i j = { 1 , i f a i ≤ a j 0 , i f a i > a j . \begin{equation} c_{ij} =\begin{cases} {1}, & {\mathrm{ if}}~a_{i} \, \le \, a_{j}\\ {0},& {\mathrm{ if}}~a_{i} \, >a_{j}. \end{cases} \end{equation} cij={1,0,if aiajif ai>aj.
G i ∈ R m i × m i G_i ∈R^{m_i×m_i} GiRmi×mi H i ∈ R m i × l i H_i ∈R^{m_i×l_i} HiRmi×li 是需要设计的增益矩阵。以上暗示预测控制协议利用基于时间 t − s i , ∀ i ∈ N t − s_i,∀i ∈ N tsi,iN 可用信息的输出预测来估计时间 t + a i , ∀ i ∈ N t + a_i,∀i ∈ N t+ai,iN 的未来控制行为。实际上,所提出的预测控制协议由两部分组成。一个是让智能体 1 跟踪所需的参考,让其他智能体跟踪智能体 1 的输出,这由 (7) 中右侧的第一项表示。另一个是智能体之间的协调,由(7)中右侧的第二项表示。

在这里插入图片描述
在这里插入图片描述

然后,第 i 个智能体的预测控制输入被设计为
u i ( t + a i ) = u ^ i ( t + a i ∣ t − s i ) . \begin{equation} u_{i} \left ({t+a_{i}}\right )=\hat {u}_{i} \left ({t+a_{i} | t-s_{i}}\right ). \end{equation} ui(t+ai)=u^i(t+aitsi).
因此,第 i 个智能体的控制输入为
u i ( t ) = u ^ i ( t ∣ t − s i − a i ) . \begin{equation} u_{i} (t)=\hat {u}_{i} \left ({t | t-s_{i} -a_{i}}\right ). \end{equation} ui(t)=u^i(ttsiai).

因此,云预测控制方案被提出如下。

  1. 来自传感器的所有智能体的输出数据 y i ( t ) , ∀ i ∈ N y_i(t),∀i ∈ N yi(t),iN, 在每个采样时间 t 被发送到网络。

  2. 基于从网络接收到的输出数据 y i ( t − s i ) , ∀ i ∈ N y_i(t − s_i),∀i ∈ N yi(tsi),iN,云计算系统计算预测 x ^ i ( t + a i ∣ t − s i ) , y ^ i ( t + a i ∣ t − s i ) , u ^ i ( t + a i ∣ t − s i ) , ∀ i ∈ N , \hat {x}_{i} (t+a_{i} |t-s_{i} ),~\hat {y}_{i} (t+a_{i} |t-s_{i} ),~\hat {u}_{i} (t+a_{i} |t-s_{i} ),~\forall i\in {\mathbb N}, x^i(t+aitsi), y^i(t+aitsi), u^i(t+aitsi), iN,, 分别使用(3),(4)和(7)的智能体的状态,输出和控制输入,和动态变量 z i ( t + a i ) z_{i}(t+a_{i}) zi(t+ai), ∀ i ∈ N ∀i ∈ N iN 使用 (5) 和 (6)。

  3. 由(9)给出的控制输入预测 u i ( t + a i ) , ∀ i ∈ N u_{i} (t+a_{i}),∀i ∈ N ui(t+ai),iN通过网络从云计算系统发送到每个智能体的执行器。

  4. 所有智能体的执行器在每个采样时间 t 从网络接收由 (10) 给出的控制输入 u i ( t ) , ∀ i ∈ N u_i(t), ∀i ∈ N ui(t),iN

系统的整体框图

在这里插入图片描述

仿真结果

基本符合原文结果。

在这里插入图片描述

原文结果:

在这里插入图片描述

相关文章:

论文复现:Predictive Control of Networked Multiagent Systems via Cloud Computing

Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现 文章目录 Predictive Control of Networked Multiagent Systems via Cloud Computing论文复现论文摘要系统参数初始化系统模型观测器预测过程控制器设计系统的整体框图仿真结果 论文摘要 翻译…...

JSON 文件存储

JSON 全称为&#xff1a; JavaScript Object Notation 也就是 javaScript 对象标记&#xff0c;通过对象和数组的组合来表示数据&#xff0c; 虽然构造简洁&#xff0c;但是结构化程度非常高&#xff0c; 是一种轻量级的数据交换格式 对象和数组 在 JavaScript 语言中&#…...

python——pynput

pynput 是一个 Python 库&#xff0c;用于控制和监听键盘与鼠标输入。它在 Windows、macOS 和 Linux 上都可以工作&#xff0c;为用户提供了一个跨平台的输入事件处理方式。pynput 包含两个主要模块&#xff1a;keyboard 和 mouse&#xff0c;分别用于处理键盘和鼠标事件。 主…...

[用AI日进斗金系列]用码上飞在企微接单开发一个项目管理系统!

今天是【日进斗金】系列的第二期文章。 先给不了解这个系列的朋友们介绍一下&#xff0c;在这个系列的文章中&#xff0c;我们将会在企微的工作台的“需求发布页面”中寻找有软件开发需求的用户 并通过自研的L4级自动化智能软件开发平台「码上飞CodeFlying」让AI生成应用以解…...

《JavaEE篇》--多线程(2)

《JavaEE篇》--多线程(1) 线程安全 线程不安全 我们先来观察一个线程不安全的案例&#xff1a; public class Demo {private static int count 0;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(() -> {//让count自增5W次…...

防爆智能手机如何助力电气行业保驾护航?

在电气行业的智能化转型浪潮中&#xff0c;防爆智能手机以其强大的数据处理能力、实时通讯功能及高度集成的安全特性&#xff0c;正成为保障电力网络稳定运行、预防安全隐患的得力助手。 防爆智能手机在电气行业中发挥着重要的保驾护航作用&#xff0c;主要体现在以下几个方面&…...

24.7.24数组|那几个课后得做的题

1、对长整形数据进行反转 2、对字符串进行反转 一、题目地址&#xff1a; 1. 实现一个函数atoi&#xff0c;使其能够将字符串转换整数 (Leetcode 8/中等). - 力扣&#xff08;LeetCode&#xff09; 2. 颠倒给定的32位无符号整数的二进制位&#xff08;Leetcode 190/简单&…...

03Spring底层架构核心概念解析

为了感谢罕哥对我工作的帮助&#xff0c;特此记录下学习过程&#xff0c;期待成为和罕哥一样优秀的人 时间&#xff1a;2024.7.13 内容&#xff1a;spring源码课程3学习记录 一、BeanDefinition BeanDefinition表示Bean的定义&#xff0c;BeanDefinition中存在很多属性用来…...

Vue学习---vue 防抖处理函数,是处理什么场景

Vue防抖处理函数是用来处理在快速连续操作中&#xff0c;只执行最后一次操作的情况。 例如&#xff0c;在输入框输入时&#xff0c;我们可能希望只在用户完成输入后进行处理&#xff0c;而不是在每次键入时都处理。(n秒后触发一次) 以下是一个简单的Vue防抖处理函数的例子&am…...

力扣爆刷第166天之TOP100五连刷96-100(单词拆分、回溯、旋转数组)

力扣爆刷第166天之TOP100五连刷96-100&#xff08;单词拆分、回溯、旋转数组&#xff09; 文章目录 力扣爆刷第166天之TOP100五连刷96-100&#xff08;单词拆分、回溯、旋转数组&#xff09;一、24. 两两交换链表中的节点二、139. 单词拆分三、560. 和为 K 的子数组四、209. 长…...

2024在线PHP加密网站源码

源码介绍 2024在线PHP加密网站源码 更新内容: 1.加强算法强度 2.优化模版UI 加密后的代码示例截图 源码下载 https://download.csdn.net/download/huayula/89568335...

网络驱动移植(RTL8189)

1、把驱动放到内核文件夹中&#xff08;linux/drivers/net/wireless&#xff09;&#xff0c;对应的驱动可以在网上下载 2、修改该目录下的Kconfig和Makefile文件 3、配置内核&#xff08;make menuconfig&#xff09; 配置支持IEEE 802.11&#xff0c;选中8189模块&#xff0…...

go语言中map学习

在 Go 语言中,map 是一种引用类型,这意味着它有以下特点: 内存结构: map 实际上是一个指向底层数据结构的指针。这个底层数据结构包含键值对的集合。 赋值与传参: 当你给一个变量赋值一个 map 时,或者将 map 作为函数参数传递时,实际上传递的是指针,而不是完整的数据结构副本。…...

【C#】| 与 及其相关例子

按位或&#xff08;|&#xff09; 按位或运算符 | 对两个数的每一位进行比较&#xff0c;如果两个数中至少有一个为 1&#xff0c;则结果位为 1&#xff1b;否则&#xff0c;结果位为0。 1010 (10 in decimal) | 1100 (12 in decimal) ------1110 (14 in decimal) 力扣相关…...

【数据结构 | 哈希表】一文了解哈希表(散列表)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…...

go创建对象数组

在 Go 语言中&#xff0c;可以使用字面量的方式创建结构体对象数组。以下是一个示例代码&#xff0c;展示了如何使用字面量创建一个结构体对象数组&#xff1a; package mainimport "fmt"// 定义一个结构体 type Person struct {Name stringAge intAddress Address…...

Golang | Leetcode Golang题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; func firstBadVersion(n int) int {return sort.Search(n, func(version int) bool { return isBadVersion(version) }) }...

自动化网络爬虫:如何它成为提升数据收集效率的终极武器?

摘要 本文深入探讨了自动化网络爬虫技术如何彻底改变数据收集领域的游戏规则&#xff0c;揭示其作为提升工作效率的终极工具的奥秘。通过分析其工作原理、优势及实际应用案例&#xff0c;我们向读者展示了如何利用这一强大工具加速业务决策过程&#xff0c;同时保持数据收集的…...

软件测试---测试需求分析

课程目标 什么是软件测试需求 软件测试需求的必要性 如何对软件测试需求进行分析&#xff08;重点&#xff09; 课程补充 灰度测试&#xff08;基于功能&#xff09;&#xff1a;先发布部分功能&#xff0c;然后看用户的反馈&#xff0c;再去发布另外一部分的功能更新。 A/B测…...

Android11 framework 禁止三方应用通过广播开机自启动-独立方案

之前的文章Android11 framework 禁止三方应用开机自启动记录了我调试Android11应用自启动限制的全过程&#xff0c;但是之前的方案感觉还能再研究&#xff0c;所以有了这一篇文章。 这一篇文章主要探讨Android11上&#xff0c;以广播来进行自启动的应用的限制&#xff0c;极个别…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

微服务商城-商品微服务

数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...