快速搞懂蚁群算法
ef
蚂蚁几乎没有视力,但他们却能够在黑暗的世界中找到食物,而且能够找到一条从洞穴到食物的最短路径。它们是如何做到的呢?
蚂蚁寻找食物的过程
单只蚂蚁的行为及其简单,行为数量在10种以内,但成千上万只蚂蚁组成的蚁群却能拥有巨大的智慧,这离不开它们信息传递的方式——信息素。
蚂蚁在行走过程中会释放一种称为“信息素”的物质,用来标识自己的行走路径。在寻找食物的过程中,根据信息素的浓度选择行走的方向,并最终到达食物所在的地方。
信息素会随着时间的推移而逐渐挥发。
在一开始的时候,由于地面上没有信息素,因此蚂蚁们的行走路径是随机的。蚂蚁们在行走的过程中会不断释放信息素,标识自己的行走路径。随着时间的推移,有若干只蚂蚁找到了食物,此时便存在若干条从洞穴到食物的路径。由于蚂蚁的行为轨迹是随机分布的,因此在单位时间内,短路径上的蚂蚁数量比长路径上的蚂蚁数量要多,从而蚂蚁留下的信息素浓度也就越高。这为后面的蚂蚁们提供了强有力的方向指引,越来越多的蚂蚁聚集到最短的路径上去。
什么是蚁群算法?
蚁群算法就是模拟蚂蚁寻找食物的过程,它能够求出从原点出发,经过若干个给定的需求点,最终返回原点的最短路径。这也就是著名的旅行商问题(Traveling Saleman Problem,TSP)。
本文使用蚁群算法来解决分布式环境下的负载均衡调度问题。
蚁群算法的应用——负载均衡调度
集群模式是目前较为常用的一种部署结构,也就是当单机处理能力无法满足业务需求,那么就增加处理节点,并由一个负载均衡器负责请求的调度。然而对于一个庞大系统而言,情况往往比较复杂。集群中节点的处理能力往往各不相同,而且不同任务的处理复杂度也不尽相同。那么负载均衡器如何进行任务分配,使得集群性能达到最优?资源利用率达到最高呢?这是一个极具挑战又很有价值的问题。
本文我们就采用蚁群算法来解决这一问题。
数学建模
在开始之前,我们首先需要将“负载均衡调度”这个问题进行数学建模,量化各项指标,并映射到蚁群算法中。
问题描述
求一种最优的任务分配策略,能够将N个长度不等的任务按照某一种策略分配给M个处理能力不同的服务器节点,并且N个任务的完成时间最短。
在这个问题中,我们将所有任务的完成时间作为衡量分配策略优良的指标。每一种分配策略都是这个问题的一个可行解。那么具有最小完成时间的分配策略就是这个问题的最优解。
参数定义
var tasks = [];
var taskNum = 100;
复制代码
- tasks:任务数组,数组的下标表示任务的编号,数组的值表示任务的长度。比如:tasks[0]=10表示第一个任务的任务长度是10.
- taskNum:任务的数量,也就是tasks数组的长度。这里为了提高代码的可读性才专门使用taskNum来表示任务数量。
var nodes = [];
var nodeNum = 10;
复制代码
- nodes:处理节点的数组。数组的下标表示处理节点的编号,数组值表示节点的处理速度。比如:nodes[0]=10表示第1个处理节点的处理速度为10.
- nodeNum:处理节点的数量,也就是nodes数组的长度。这里也是为了提高代码的可读性才专门使用nodeNum来表示节点的数量。
var iteratorNum;
var antNum;
复制代码
- iteratorNum:蚁群算法一共需要迭代的次数,每次迭代都有antNum只蚂蚁进行任务分配。
- antNum:每次迭代中蚂蚁的数量。每只蚂蚁都是一个任务调度者,每次迭代中的每一只蚂蚁都需要完成所有任务的分配,这也就是一个可行解。
var timeMatrix = [];
复制代码
- 任务处理时间矩阵。
- 它是一个二维矩阵。比如:timeMatrix[i][j]就表示第i个任务分配给第j个节点所需的处理时间。
- 这个矩阵是基于tasks数组和nodes数组计算而来的。比如task[i]表示第i个任务的任务长度,nodes[j]表示第j个节点的处理速度。所以,timeMatrix[i][j]=task[i]/nodes[j].
var pheromoneMatrix = [];
var maxPheromoneMatrix = [];
var criticalPointMatrix = [];
复制代码
- pheromoneMatrix:信息素矩阵
- 它是一个二维矩阵,用于记录任务i分配给节点j这条路径上的信息素浓度。
- 比如:pheromoneMatrix[i][j]=0.5就表示任务i分配给节点j这条路径上的信息素浓度为0.5
- maxPheromoneMatrix:pheromoneMatrix矩阵的每一行中最大信息素的下标。
- 比如:maxPheromoneMatrix[0]=5表示pheromoneMatrix第0行的所有信息素中,最大信息素的下标是5.
- criticalPointMatrix:在一次迭代中,采用随机分配策略的蚂蚁的临界编号。
- 比如:如果将蚂蚁数量设为10,那么每次迭代中都有10只蚂蚁完成所有任务的分配工作。并且分配过程是按照蚂蚁编号从小到大的顺序进行的(蚂蚁从0开始编号)。如果criticalPointMatrix[0]=5,那么也就意味着,在分配第0个任务的时候,编号是0~5的蚂蚁根据信息素浓度进行任务分配(即:将任务分配给本行中信息素浓度最高的节点处理),6~9号蚂蚁则采用随机分配的方式(即:将任务随机分配给任意一个节点处理)。
- 为什么要这么做? 如果每只蚂蚁都将任务分配给信息素浓度最高的节点处理,那么就会出现停滞现象。也就是算法过早地收敛至一个局部最优解,无法发现全局最优解。 因此需要一部分蚂蚁遵循信息素最高的分配策略,还需要一部分蚂蚁遵循随机分配的策略,以发现新的局部最优解。
var p = 0.5;
var q = 2;
复制代码
- p:每完成一次迭代后,信息素衰减的比例。 我们知道,在真实的蚁群中,蚂蚁分泌的信息素会随着时间的推移而渐渐衰减。那么在算法中,我们使得信息素每完成一次迭代后进行衰减,但在一次迭代过程中,信息素浓度保持不变。
- q:蚂蚁每次经过一条路径,信息素增加的比例。 我们也知道,在真实的蚁群中,蚂蚁会在行进过程中分泌信息素。那么在算法中,我们使得算法每完成一次迭代后,就将蚂蚁经过的路径上增加信息素q,但在一次迭代过程中,信息素浓度不变。
算法初始化
// 初始化任务集合
tasks = initRandomArray(_taskNum, taskLengthRange);
// 初始化节点集合
nodes = initRandomArray(_nodeNum, nodeSpeendRange);
复制代码
在正式开始之前,我们需要初始化任务数组和节点数组。这里采用随机赋值的方式,我们给tasks随机创建100个任务,每个任务的长度是10~100之间的随机整数。再给nodes随机创建10个节点,每个节点的处理速度是10~100之间的随机整数。
OK,准备工作完成,下面来看蚁群算法的实现。
蚁群算法
/**
* 蚁群算法
*/
function aca() {
// 初始化任务执行时间矩阵
initTimeMatrix(tasks, nodes);
// 初始化信息素矩阵
initPheromoneMatrix(taskNum, nodeNum);
// 迭代搜索
acaSearch(iteratorNum, antNum);
}
复制代码
正如你所看到的,蚁群算法并不复杂,总体而言就是这三部:
- 初始化任务执行时间矩阵
- 初始化信息素矩阵
- 迭代搜索
当然,第一第二步都较为简单,相对复杂的代码在“迭代搜索”中。那么下面我们就分别来看一下这三个步骤的实现过程。
初始化任务执行时间矩阵
/**
* 初始化任务处理时间矩阵
* @param tasks 任务(长度)列表
* @param nodes 节点(处理速度)列表
*/
function initTimeMatrix(tasks, nodes) {
for (var i=0; i<tasks.length; i++) {
// 分别计算任务i分配给所有节点的处理时间
var timeMatrix_i = [];
for (var j=0; j<nodes.length; j++) {
timeMatrix_i.push(tasks[i] / nodes[j]);
}
timeMatrix.push(timeMatrix_i);
}
}
复制代码
通过上文的学习我们已经知道,当任务长度数组tasks和节点处理速度数组nodes确定下来后,所有任务的执行时间都是可以确定下来了,用公式tasks[i]/nodes[j]计算一下即可,也就是“时间=长度/速度”,小学数学知识。OK,那么timeMatrix矩阵的计算也就是这样。
这里再次介绍下timeMatrix矩阵的含义:timeMatrix[i][j]表示任务i分配给节点j处理所需要的时间,其计算公式也就是:
timeMatrix[i][j] = tasks[i]/nodes[j]
复制代码
初始化信息素矩阵
/**
* 初始化信息素矩阵(全为1)
* @param taskNum 任务数量
* @param nodeNum 节点数量
*/
function initPheromoneMatrix(taskNum, nodeNum) {
for (var i=0; i<taskNum; i++) {
var pheromoneMatrix_i = [];
for (var j=0; j<nodeNum; j++) {
pheromoneMatrix_i.push(1);
}
pheromoneMatrix.push(pheromoneMatrix_i);
}
}
复制代码
初始化信息素矩阵也就是将信息素矩阵中所有元素置为1.
这里再次重申一下信息素矩阵的含义,pheromoneMatrix[i][j]表示将任务i分配给节点j这条路径的信息素浓度。
注意:我们将负载均衡调度过程中的一次任务分配当作蚁群算法中一条路径。如:我们将“任务i分配给节点j”这一动作,当作蚂蚁从任务i走向节点j的一条路径。因此,pheromoneMatrix[i][j]就相当于i——>j这条路径上的信息素浓度。
迭代搜索过程
/**
* 迭代搜索
* @param iteratorNum 迭代次数
* @param antNum 蚂蚁数量
*/
function acaSearch(iteratorNum, antNum) {
for (var itCount=0; itCount<iteratorNum; itCount++) {
// 本次迭代中,所有蚂蚁的路径
var pathMatrix_allAnt = [];
for (var antCount=0; antCount<antNum; antCount++) {
// 第antCount只蚂蚁的分配策略(pathMatrix[i][j]表示第antCount只蚂蚁将i任务分配给j节点处理)
var pathMatrix_oneAnt = initMatrix(taskNum, nodeNum, 0);
for (var taskCount=0; taskCount<taskNum; taskCount++) {
// 将第taskCount个任务分配给第nodeCount个节点处理
var nodeCount = assignOneTask(antCount, taskCount, nodes, pheromoneMatrix);
pathMatrix_oneAnt[taskCount][nodeCount] = 1;
}
// 将当前蚂蚁的路径加入pathMatrix_allAnt
pathMatrix_allAnt.push(pathMatrix_oneAnt);
}
// 计算 本次迭代中 所有蚂蚁 的任务处理时间
var timeArray_oneIt = calTime_oneIt(pathMatrix_allAnt);
// 将本地迭代中 所有蚂蚁的 任务处理时间加入总结果集
resultData.push(timeArray_oneIt);
// 更新信息素
updatePheromoneMatrix(pathMatrix_allAnt, pheromoneMatrix, timeArray_oneIt);
}
}
复制代码
这个过程略微复杂,但也还好,且听我一一道来。
在整个蚁群算法中,一共要进行iteratorNum次迭代。每一次迭代都会产生当前的最优分配策略,也就是“局部最优解”。迭代的次数越多,那么局部最优解就越接近于全局最优解。但是,迭代次数过多会造成负载均衡器大量的时间和性能上的开销,从而无法满足海量任务的调度。但迭代次数太少了,可能得到的并不是全局最优解。那么这个问题如何解决呢?有两种办法:
- 限定迭代次数 为了避免过多的迭代,我们可以事先设置一个迭代次数,从而迭代了这么多次后,就把当前的局部最优解当作全局最优解。
- 设置误差允许范围 我们还可以事先设置一个允许的误差范围。当迭代N此后,当前最优的任务处理时间在这个允许范围之内了,那么就停止迭代。
这两种方式各有千秋,我们这里选择第一种——限定迭代次数。并且将迭代次数限定为1000次。
注意:收敛速度也是衡量算法优良的一个重要指标。比如算法1迭代10次就能找到全局最优解,而算法2迭代1000次才能找到全局最优解。所以算法1的收敛速度要优于算法2.
下面介绍上述算法的执行流程。
蚁群算法一共要进行iteratorNum次迭代,每次迭代中,所有蚂蚁都需要完成所有任务的分配。因此上述算法采用了三层for循环,第一层用于迭代次数的循环,在本算法中一共要循环1000次;第二层用于蚂蚁的循环,本算法一共有10只蚂蚁,因此需要进行10次循环;第三层用于所有任务的循环,本算法一共有100个任务,因此需要循环100次,每一次循环,都将当前任务按照某一种策略分配给某一个节点,并在pathMatrix_oneAnt矩阵中记录蚂蚁的分配策略。
pathMatrix_oneAnt是一个二维矩阵,所有元素要么是0要么是1.比如:pathMatrix_oneAnt[i][j]=1就表示当前蚂蚁将任务i分配给了节点j处理,pathMatrix_oneAnt[i][j]=0表示任务i没有分配给节点j处理。该矩阵的每一行都有且仅有一个元素为1,其他元素均为0.
每一只蚂蚁当完成这100个任务的分配之后,就会产生一个pathMatrix_oneAnt矩阵,用于记录该只蚂蚁的分配策略。那么当10只蚂蚁均完成任务的分配后,就会产生一个pathMatrix矩阵。这是一个三维矩阵,第一维记录了蚂蚁的编号,第二维表示任务的下标,第三维表示节点的编号,从而pathMatrix[x][i][j]=1就表示编号为x的蚂蚁将任务i分配给了节点j处理;pathMatrix[x][i][j]=0就表示编号为x的蚂蚁没有将任务i分配给了节点j处理。
这10只蚂蚁完成一次任务的分配也被称为一次迭代。每完成一次迭代后,都要使用calTime_oneIt函数在计算本次迭代中,所有蚂蚁的任务处理时间,并记录在timeArray_oneIt矩阵中。
在每次迭代完成前,还需要使用updatePheromoneMatrix函数来更新信息素矩阵。
下面就分别详细介绍迭代搜索过程中的三个重要函数:
- 任务分配函数:assignOneTask
- 任务处理时间计算函数:calTime_oneIt
- 更新信息素函数:updatePheromoneMatrix
任务分配函数
/**
* 将第taskCount个任务分配给某一个节点处理
* @param antCount 蚂蚁编号
* @param taskCount 任务编号
* @param nodes 节点集合
* @param pheromoneMatrix 信息素集合
*/
function assignOneTask(antCount, taskCount, nodes, pheromoneMatrix) {
// 若当前蚂蚁编号在临界点之前,则采用最大信息素的分配方式
if (antCount <= criticalPointMatrix[taskCount]) {
return maxPheromoneMatrix[taskCount];
}
// 若当前蚂蚁编号在临界点之后,则采用随机分配方式
return random(0, nodeNum-1);
}
复制代码
任务分配函数负责将一个指定的任务按照某种策略分配给某一节点处理。分配策略一共有两种:
- 按信息素浓度分配 也就是将任务分配给本行中信息素浓度最高的节点处理。比如:当前的任务编号是taskCount,当前的信息素浓度矩阵是pheromoneMatrix,那么任务将会分配给pheromoneMatrix[taskCount]这一行中信息素浓度最高的节点。
- 随机分配 将任务随意分配给某一个节点处理。
那么,这两种分配策略究竟如何选择呢?答案是——根据当前蚂蚁的编号antCount。
通过上文可知,矩阵criticalPointMatrix用于记录本次迭代中,采用不同分配策略的蚂蚁编号的临界点。比如:criticalPointMatrix[i]=5就表示编号为0~5的蚂蚁在分配任务i的时候采用“按信息素浓度”的方式分配(即:将任务i分配给信息素浓度最高的节点处理);而编号为6~9的蚂蚁在分配任务i时,采用随机分配策略。
计算任务处理时间
/**
* 计算一次迭代中,所有蚂蚁的任务处理时间
* @param pathMatrix_allAnt 所有蚂蚁的路径
*/
function calTime_oneIt(pathMatrix_allAnt) {
var time_allAnt = [];
for (var antIndex=0; antIndex<pathMatrix_allAnt.length; antIndex++) {
// 获取第antIndex只蚂蚁的行走路径
var pathMatrix = pathMatrix_allAnt[antIndex];
// 获取处理时间最长的节点 对应的处理时间
var maxTime = -1;
for (var nodeIndex=0; nodeIndex<nodeNum; nodeIndex++) {
// 计算节点taskIndex的任务处理时间
var time = 0;
for (var taskIndex=0; taskIndex<taskNum; taskIndex++) {
if (pathMatrix[taskIndex][nodeIndex] == 1) {
time += timeMatrix[taskIndex][nodeIndex];
}
}
// 更新maxTime
if (time > maxTime) {
maxTime = time;
}
}
time_allAnt.push(maxTime);
}
return time_allAnt;
}
复制代码
每完成一次迭代,都需要计算本次迭代中所有蚂蚁的行走路径(即:所有蚂蚁的任务处理之间),并记录在time_allAnt矩阵中。
在实际的负载均衡调度中,各个节点的任务处理是并行计算的,所以,所有任务的完成时间应该是所有节点任务完成时间的最大值,并非所有任务完成时间的总和。
每完成一次迭代,就会产生一个time_allAnt矩阵,并且加入resultData矩阵中。当算法完成所有迭代后,所有蚂蚁的所有任务处理时间都被记录在resultData矩阵中,它是一个二维矩阵。比如:resultData[x][y]=10代表第x次迭代中第y只蚂蚁的任务处理时间是10.
更新信息素
/**
* 更新信息素
* @param pathMatrix_allAnt 本次迭代中所有蚂蚁的行走路径
* @param pheromoneMatrix 信息素矩阵
* @param timeArray_oneIt 本次迭代的任务处理时间的结果集
*/
function updatePheromoneMatrix(pathMatrix_allAnt, pheromoneMatrix, timeArray_oneIt) {
// 所有信息素均衰减p%
for (var i=0; i<taskNum; i++) {
for (var j=0; j<nodeNum; j++) {
pheromoneMatrix[i][j] *= p;
}
}
// 找出任务处理时间最短的蚂蚁编号
var minTime = Number.MAX_VALUE;
var minIndex = -1;
for (var antIndex=0; antIndex<antNum; antIndex++) {
if (timeArray_oneIt[antIndex] < minTime) {
minTime = timeArray_oneIt[antIndex];
minIndex = antIndex;
}
}
// 将本次迭代中最优路径的信息素增加q%
for (var taskIndex=0; taskIndex<taskNum; taskIndex++) {
for (var nodeIndex=0; nodeIndex<nodeNum; nodeIndex++) {
if (pathMatrix_allAnt[minIndex][taskIndex][nodeIndex] == 1) {
pheromoneMatrix[taskIndex][nodeIndex] *= q;
}
}
}
maxPheromoneMatrix = [];
criticalPointMatrix = [];
for (var taskIndex=0; taskIndex<taskNum; taskIndex++) {
var maxPheromone = pheromoneMatrix[taskIndex][0];
var maxIndex = 0;
var sumPheromone = pheromoneMatrix[taskIndex][0];
var isAllSame = true;
for (var nodeIndex=1; nodeIndex<nodeNum; nodeIndex++) {
if (pheromoneMatrix[taskIndex][nodeIndex] > maxPheromone) {
maxPheromone = pheromoneMatrix[taskIndex][nodeIndex];
maxIndex = nodeIndex;
}
if (pheromoneMatrix[taskIndex][nodeIndex] != pheromoneMatrix[taskIndex][nodeIndex-1]){
isAllSame = false;
}
sumPheromone += pheromoneMatrix[taskIndex][nodeIndex];
}
// 若本行信息素全都相等,则随机选择一个作为最大信息素
if (isAllSame==true) {
maxIndex = random(0, nodeNum-1);
maxPheromone = pheromoneMatrix[taskIndex][maxIndex];
}
// 将本行最大信息素的下标加入maxPheromoneMatrix
maxPheromoneMatrix.push(maxIndex);
// 将本次迭代的蚂蚁临界编号加入criticalPointMatrix(该临界点之前的蚂蚁的任务分配根据最大信息素原则,而该临界点之后的蚂蚁采用随机分配策略)
criticalPointMatrix.push(Math.round(antNum * (maxPheromone/sumPheromone)));
}
}
复制代码
每完成一次迭代,都需要更新信息素矩阵,这个函数的包含了如下四步:
- 将所有信息素浓度降低p% 这个过程用来模拟信息素的挥发。
- 找出本次迭代中最短路径,并将该条路径的信息素浓度提高q% 每次迭代,10只蚂蚁就会产生10条路径(即10种任务分配策略),我们需要找出最短路径,并将该条路径的信息素浓度提高。
- 更新maxPheromoneMatrix矩阵 步骤1和步骤2完成后,信息素矩阵已经更新完毕。接下来需要基于这个最新的信息素矩阵,计算每行最大信息素对应的下标,即:maxPheromoneMatrix矩阵。通过上文可知,该矩阵供函数assignOneTask在分配任务时使用。
- 更新criticalPointMatrix矩阵 紧接着需要更新criticalPointMatrix矩阵,记录采用何种任务分配策略的蚂蚁临界编号。 比如:信息素矩阵第0行的元素为pheromoneMatrix[0]={1,3,1,1,1,1,1,1,1,1},那么criticalPointMatrix[0]的计算方式如下:
- 计算最大信息素的概率:最大信息素/该行所有信息素之和
- 3/(1+3+1+1+1+1+1+1+1+1)=0.25
- 计算蚂蚁的临界下标:蚂蚁数量*最大信息素的概率
- 10*0.25=3(四舍五入)
- 所以criticalPointMatrix[0]=3
- 也就意味着在下一次迭代过程中,当分配任务0时,0~3号蚂蚁将该任务分配给信息素浓度最高的节点,而4~9号蚂蚁采用随机分配策略。
- 计算最大信息素的概率:最大信息素/该行所有信息素之和
结果分析
算法的运行结果如下图所示:
横坐标为迭代次数,纵坐标为任务处理时间。 每个点表示一只蚂蚁的任务处理时间。上图的算法的迭代次数为100,蚂蚁数量为1000,所以每次迭代都会产生1000种任务分配方案,而每次迭代完成后都会挑选出一个当前最优方案,并提升该方案的信息素浓度,从而保证在下一次迭代中,选择该方案的概率较高。并且还使用一定概率的蚂蚁采用随机分配策略,以发现更优的方案。
从图中我们可以看到,大约迭代30次时,出现了全局最优解。
写在最后
所有代码我已经上传至我的Github,大家可以随意下载。 https://github.com/bz51/AntColonyAlgorithm
上面一共有两个问题:
- aca.html
- aca.js
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 决策树
称之为Stygian Chemical Industries,Ltd。的公司的管理层必须决定是建造小型工厂还是大型工厂来生产预期市场寿命为10年的新产品。决定取决于产品的市场规模。在最初的两年内,可能需求会很高,但是,如果许多初始用户发现产品不满意,那么此后将降至较低水平。或者高初始需求…...
2024/4/14 12:34:53 - Python2.X和Python3.X文件对话框、下拉列表的不同
今天初次使用Python Tkinter来做了个简单的记事本程序。发现Python2.x和Python3.x的Tkinter模块的好多内置函数都有所改变,这里简单整理一下以备日后查验。一.导入方式:Python2.x:from Tkinter import *Python3.x:from tkinter import *二.打开文件框:Python2.X:import tkF…...
2024/4/14 12:34:53 - Node基础--day03
1. 浏览器端的 AMD 和 CMD 模块化规范 (了解) 浏览器端,不能使用 Common.js 规范,因为 Common.js 是同步加载的; AMD/CMD 可以理解为,common.js 在浏览器端,的解决方案,是异步加载的;AMD模块化规范代表:RequireJS框架 对于依赖的模块,AMD 是提前执行; 推崇依赖前置,…...
2024/4/20 9:02:48 - 刻意练习:LeetCode实战 -- Task05. 最接近的三数之和
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务。本期训练营采用分类别练习的模式,即选择了五个知识点(数组、链表、字符串、树、贪心算法),每个知识点选择了 三个简单、两个中等、一个困难 等级的题目,共计三十道题,利用三…...
2024/4/14 10:15:18 - SSM整合
搭建整合环境整合说明:我们通常使用Spring框架来整合SpringMVC和Mybatis,且使用注解+XML的形式 整合的思路先搭建整合的环境(porm.xml) 先把Spring的配置搭建完成 再使用Spring整合SpringMVC框架 最后使用Spring整合MyBatis框架搭建和测试Spring框架创建ApplicationContext…...
2024/4/14 12:34:52 - ros机器人开发概述
ros机器人开发概述1. ROS项目开发流程?参照古月大神写的ROS探索总结系列:http://blog.exbot.net/archives/619具体项目设计可看看《程序员》杂志的最新一篇文章《基于ROS的 系统》,是百度无人车的首席架构师等人写的无人车的架构的选型设计,值得参考借鉴,正在联系授…...
2024/4/24 13:14:15 - ML之NB:基于NB朴素贝叶斯算法训练20类新闻文本数据集进行多分类预测
ML之NB:基于NB朴素贝叶斯算法训练20类新闻文本数据集进行多分类预测输出结果设计思路核心代码vec = CountVectorizer() X_train = vec.fit_transform(X_train) X_test = vec.transform(X_test)mnb = MultinomialNB() mnb.fit(X_train, y_train) y_predict = mnb.pred…...
2024/4/14 12:34:50 - 【C++】复数类的四则运算符重载及输入输出重载
题目: 实现一个复数类,要求重载加减乘除及输入输出,输出保留两位小数。分别输入两个复数的实部和虚部,依次输出加减乘除后的结果。 例: 输入: 3 4 7 8输出: 10.00+12.00i -4.00-4.00i -11.00+52.00i 0.47+0.04i输入: 0 0 5 0输出 (当虚部为0时,可以不输出) 5 -5 0 0程…...
2024/4/24 11:53:59 - 02-线性结构3 Reversing Linked List (25分)
Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6.Input Specif…...
2024/4/14 12:34:48 - 微服务之Hystrix(一):结合Eureka实现服务降级
一:Hystrix简介在微服务场景中,通常会有很多层的服务调用。如果一个底层服务出现问题,故障会被向上传播给用户。我们需要一种机制,当底层服务不可用时,可以阻断故障的传播。这就是断路器的作用。他是系统服务稳定性的最后一重保障。在springcloud中断路器组件就是Hystrix。…...
2024/4/14 12:34:47 - 关于新建Vue项目的组件结构理解
项目结构main.js main.js是vue项目的人口,就好比Java的main函数一样。 // The Vue build version to load with the `import` command // (runtime-only or standalone) has been set in webpack.base.conf with an alias. import Vue from vue import App from ./App import …...
2024/4/26 0:48:01 - com.android.ide.common.process.ProcessException: Return code 1 for dex process
android studio编译遇到的一个问题,百度很久获得的都说是.9.png的图片导致的问题,经检查的确存在.9.png文件,但根据网上说的方法,甚至把图片都删除了,还是报一样的错误,最后直接把gradle版本提高到classpath com.android.tools.build:gradle:3.4.2,gradle-wrapper修改为…...
2024/4/14 12:34:46 - Android为什么没有使用MVC,而是使用MVP?
“Android为什么没有使用MVC,而是使用MVP?"没有最好的架构模式。随着业务的不断增长,为了让我们的代码变得更美观,我们可能会多种模式混合使用,再或者在原本的模式上衍生出新的模式,这就是架构的魅力。...
2024/4/16 8:57:46 - stm32学习笔记-PWM
文章目录一、神兵:PWM基本知识二、利用stm32定时器实现PWM具体原理stm32中PWM的相关配置PWM输出管脚三、使用PWM实现呼吸灯。周期,占空比计算公式编程思路代码 一、神兵:PWM基本知识 抄自百度的定义: Pulse Width Modulation 就是通常所说的PWM,译为脉冲宽度调制,简称脉宽…...
2024/4/14 12:34:43 - HTTP响应消息
HTTP协议: 1. 请求消息:客户端发送给服务器端的数据* 数据格式:1. 请求行2. 请求头3. 请求空行4. 请求体 2. 响应消息:服务器端发送给客户端的数据* 数据格式:1. 响应行1. 组成:协议/版本 响应状态码 状态码描述2. 响应状态码:服务器告诉客户端浏览器本次请求和响应的一…...
2024/4/14 12:34:43 - 常用数据库驱动连接规范
Oracle数据库: 驱动程序包名:ojdbc14.jar 驱动类的名字:oracle.jdbc.driver.OracleDriver JDBC URL:jdbc:oracle:thin:@dbip:port:databasename 说明:驱动程序包名有可能会变 JDBC URL中各个部分含义如下: dbip –为数据库服务器的IP地址,如果是本地可写:localhost或127…...
2024/4/24 3:32:18 - 计算几何模板(kuangbin)
目录二维几何点线圆 二维几何 点 const double inf=1e20; const double eps=1e-8; const double pi=acos(-1.0); const int maxp=1010;//判断正负 int sgn(double x) {if (fabs(x)<eps) return 0;if (x<0) return -1;else return 1; } //平方 inline double sqr(double x…...
2024/4/25 15:15:58 - 将博客搬出CSDN
搬迁至 简书 http://www.jianshu.com/u/edc3f98c8327...
2024/4/14 12:34:39 - Java中的BigInteger类与BigDecimal类,细解,带例题
BigInteger(大整数类) 使用时导包:java.math.BigInteger 作用:可以使用BigInteger操作大整数,也可以转换进制。如果在操作的时候一个整型数据已经超过了整数的最大类型长度long的话,则此数据就无法装入,所以,此时要使用BigInteger类进行操作。这些大数都会以字符串的形…...
2024/4/22 14:16:15 - 【20200304】编译原理课程课业打卡四
【20200304】编译原理课程课业打卡四一、课业打卡二、知识速记1、文法类型小结2、文法和语言小记 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!一、课业打卡 构造产生如下语言的上下文无关文法各一个:1、问题一:2、问…...
2024/4/14 12:34:37
最新文章
- 路由器使用docker安装mysql和redis服务
路由器使用docker安装mysql和redis服务 1.先在路由器中开启docker功能 (需要u盘 或者 移动硬盘) 2. docker 管理地址 :http://192.168.0.1:11180/#/ 3. 拉取镜像 4. mysql容器参数设置 MYSQL_ROOT_PASSWORD 5. redis 容器设置 开发经常需要用到 &…...
2024/4/27 8:55:37 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - Claude-3全解析:图片问答,专业写作能力显著领先GPT-4
人工智能技术的飞速发展正在深刻改变着我们的工作和生活方式。作为一名资深的技术爱好者,我最近有幸体验了备受瞩目的AI助手Claude-3。这款由Anthropic公司推出的新一代智能工具展现出了非凡的实力,尤其在图像识别和专业写作领域的表现更是让人眼前一亮&…...
2024/4/25 0:29:08 - macU盘在电脑上读不出来 u盘mac读不出来怎么办 macu盘不能写入
对于Mac用户来说,使用U盘是很常见的操作,但有时候可能会遇到Mac电脑无法读取U盘的情况,这时候就需要使用一些特定的工具软件来帮助我们解决问题。本文就来告诉大家macU盘在电脑上读不出来是怎么回事,u盘mac读不出来怎么办。 一、m…...
2024/4/24 17:55:52 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/26 18:09:39 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/26 20:12:18 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/26 23:05:52 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/27 4:00:35 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/25 18:39:22 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/25 18:39:22 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/26 21:56:58 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/25 16:48:44 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/26 16:00:35 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/25 18:39:16 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/25 18:39:16 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/26 22:01:59 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/25 18:39:14 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/26 23:04:58 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/25 2:10:52 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/25 18:39:00 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/26 19:46:12 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/25 18:38:58 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/27 8:32:30 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57