基于马尔可夫过程的一种新型混合PSO粒子群算法(SCI二区高被引文献)介绍及算法复现(使用chatgpt)

以下是一篇算法领域的SCI二区文献(原文见附件),介绍了一种使用Markov概率转移矩阵对种群拓扑结构进行加权的粒子群算法,相比于标准PSO算法该算法提高了全局覆盖率,更容易跳出局部最优,但是在局部最优点由于迭代过大,收敛较慢。以下从四个方面讲述全文:一、标准PSO粒子群算法;二、Markov马尔可夫链模型及Pagerank算法;三、如何将Markov和Ragerank代入PSO算法;四、使用chatgpt进行算法复现。(注:前两部分直接引用相关博客,后两部分是博主原创内容,熟悉PSO、Markov、Pagerank的读者可直接切入第三部分)

Cesare N D, Chamoret D, Domaszewski M. A new hybrid PSO algorithm based on a stochastic Markov chain model[J]. A new hybrid PSO algorithm based on a stochastic Markov chain model, December 2015, Volume 90:Pages 127-137.

一、标准PSO粒子群算法

这部分内容引用自一文搞懂什么是粒子群优化算法(Particle Swarm Optimization,PSO)【附应用举例】

1.算法原理

从动物界中的鸟群、兽群和鱼群等的迁移等群体活动而来。在群体活动中,群体中的每一个个体都会受益于所有成员在这个过程中所发现和累积的经验。

2.基本原理

以鸟群觅食为例,与粒子群优化算法作对比,如上。

在粒子群优化算法中,鸟群中的每个小鸟被称为“粒子”,且同小鸟一样,具有速度和位置。

通过随机产生一定数量的粒子(具体定多少数量后面会讲)作为问题搜索空间的有效解,然后进行迭代搜索,通过该问题对应的适应度函数确定粒子的适应值,得到优化结果。

那具体怎么迭代搜索呢?后面实例会具体讲到。

且这里记得有所谓的“粒子本身的历史最优解”和“群体的全局最优解”,这两个用来影响粒子的速度和下一个位置,借此求得最优解。

3.基本流程

来看一下PSO的算法步骤:

(1)初始化所有粒子,即给它们的速度和位置赋值,并将个体的历史最优pBest设为当前位置,群体中的最优个体作为当前的gBest。

(2)在每一代的进化中,计算各个粒子的适应度函数值。

(3)如果当前适应度函数值优于历史最优值,则更新pBest。

(4)如果当前适应度函数值优于全局历史最优值,则更新gBest。

(5)对每个粒子i的第d维的速度和位置分别按照公式6.1和公式6.2进行更新:

(6)判断是否达到了结束条件(具体怎么定义后面会提),否的话就转到(2)继续执行。

看不懂没关系,原文有具体的应用举例,可参考原文一文搞懂什么是粒子群优化算法(Particle Swarm Optimization,PSO)【附应用举例】

二、Markov马尔科夫链模型和Pagerank算法介绍

  1. Markov马尔可夫链模型

原文链接马尔科夫模型系列文章(一)——马尔科夫模型

1.1 马尔可夫过程

马尔可夫过程(Markov process)是一类随机过程。由俄国数学家A.A.马尔可夫于1907年提出。该过程具有如下特性:在已知目前状态(现在)的条件下,它未来的演变(将来)不依赖于它以往的演变 (过去 )。例如森林中动物头数的变化构成——马尔可夫过程。在现实世界中,有很多过程都是马尔可夫过程,如液体中微粒所作的布朗运动、传染病受感染的人数、车站的候车人数等,都可视为马尔可夫过程。(这里虽然我也不清楚这些现象到底是不是,姑且就认为是吧!)

马尔科夫过程中最核心的几个概念:过去,现在,将来。其中最核心的在于“现在”如何理解。

在马尔可夫性的定义中,"现在"是指固定的时刻,但实际问题中常需把马尔可夫性中的“现在”这个时刻概念推广为停时(见随机过程)。例如考察从圆心出发的平面上的布朗运动,如果要研究首次到达圆周的时刻 τ以前的事件和以后的事件的条件独立性,这里τ为停时,并且认为τ是“现在”。如果把“现在”推广为停时情形的“现在”,在已知“现在”的条件下,“将来”与“过去”无关,这种特性就叫强马尔可夫性。具有这种性质的马尔可夫过程叫强马尔可夫过程。在相当一段时间内,不少人认为马尔可夫过程必然是强马尔可夫过程。首次提出对强马尔可夫性需要严格证明的是J.L.杜布。直到1956年,才有人找到马尔可夫过程不是强马尔可夫过程的例子。马尔可夫过程理论的进一步发展表明,强马尔可夫过程才是马尔可夫过程真正研究的对象。

(这段话实在是太过于抽象了,不好理解,心里有数就行,因为这里的过去、现在、将来和我们生活中是有所差别的,不太好理解!)

所以:一个马尔科夫过程就是指过程中的每个状态的转移只依赖于之前的 n个状态,这个过程被称为 n阶马尔科夫模型,其中 n是影响转移状态的数目。最简单的马尔科夫过程就是一阶过程,每一个状态的转移只依赖于其之前的那一个状态,这也是后面很多模型的讨论基础,很多时候马尔科夫链、隐马尔可夫模型都是只讨论一阶模型,甚至很多文章就将一阶模型称之为马尔科夫模型,现在我们知道一阶只是一种特例而已了。

对于一阶马尔科夫模型,则有:

如果第 i 时刻上的取值依赖于且仅依赖于第 i−1 时刻的取值,即

​ 从这个式子可以看出,xi 仅仅与 xi-1有关,二跟他前面的都没有关系了,这就是一阶过程。

总结:马尔科夫过程指的是一个状态不断演变的过程,对其进行建模后称之为马尔科夫模型,在一定程度上,马尔科夫过程和马尔科夫链可以打等号的。

1.2 马尔科夫性(无后效型)

在马尔科夫过程中,在给定当前知识或信息的情况下,过去(即当前以前的历史状态)对于预测将来(即当前以后的未来状态)是无关的。这种性质叫做无后效性。简单地说就是将来与过去无关,值与现在有关,不断向前形成这样一个过程。

1.3 马尔可夫链

时间和状态都是离散的马尔可夫过程称为马尔可夫链,简记为Xn=X(n),n=0,1,2…马尔可夫链是随机变量X1,X2,X3…的一个数列。

这种离散的情况其实草是我们所讨论的重点,很多时候我们就直接说这样的离散情况就是一个马尔科夫模型。

(1)关键概念——状态空间

马尔可夫链是随机变量X1,X2,X3…Xn所组成的一个数列,每一个变量Xi 都有几种不同的可能取值,即他们所有可能取值的集合,被称为“状态空间”,而Xn的值则是在时间n的状态。

(2)关键概念——转移概率(Transition Probability)

马尔可夫链可以用条件概率模型来描述。我们把在前一时刻某取值下当前时刻取值的条件概率称作转移概率。

(3)关键概念——转移概率矩阵

很明显,由于在每一个不同的时刻状态不止一种,所以由前一个时刻的状态转移到当前的某一个状态有几种情况,那么所有的条件概率会组成一个矩阵,这个矩阵就称之为“转移概率矩阵”。比如每一个时刻的状态有n中,前一时刻的每一种状态都有可能转移到当前时刻的任意一种状态,所以一共有n*n种情况,组织成一个矩阵形式如下:

1.4 马尔可夫模型的应用

马尔可夫模型(Markov Model)是一种统计模型,广泛应用在语音识别,词性自动标注,音字转换,概率文法、序列分类等各个自然语言处理等应用领域。经过长期发展,尤其是在语音识别中的成功应用,使它成为一种通用的统计工具。到目前为止,它一直被认为是实现快速精确的语音识别系统的最成功的方法之一。

1.4.1马尔科夫模型的案例之一——天气预报

下面是一个马尔科夫模型在天气预测方面的简单例子。如果第一天是雨天,第二天还是雨天的概率是0.8,是晴天的概率是0.2;如果第一天是晴天,第二天还是晴天的概率是0.6,是雨天的概率是0.4。问:如果第一天下雨了,第二天仍然是雨天的概率是多少?,第十天是晴天的概率是多少?;经过很长一段时间后雨天、晴天的概率分别是多少?

首先构建转移概率矩阵,由于这里每一天的状态就是晴天或者是下雨两种情况,所以矩阵是2x2的,如下:

雨天

晴天

0.8

0.4

雨天

0.2

0.6

晴天

注意:每列和为1,分别对雨天、晴天,这样构建出来的就是转移概率矩阵了。如下:

假设初始状态第一天是雨天,我们记为

这里【1,0】分别对于雨天,晴天。

初始条件:第一天是雨天,第二天仍然是雨天(记为P1)的概率为:

P1 = AxP0

得到P1 = 【0.8,0.2】,正好满足雨天~雨天概率为0.8,当然这根据所给条件就是这样。

下面计算第十天(记为P9)是晴天概率:

得到,第十天为雨天概率为0.6668,为晴天的概率为0.3332。

下面计算经过很长一段时间后雨天、晴天的概率,显然就是下面的递推公式了:

1.4.2 递推公式的改进

虽然上面构造了一个递推公式,但是直接计算矩阵A的n次方是很难计算的,我们将A进行特征分解(谱分解)一下,得到:

现在递推公式变成了下面的样子:

显然,当n趋于无穷即很长一段时间以后,Pn = 【0.67,0.33】。即雨天概率为0.67,晴天概率为0.33。并且,我们发现:初始状态如果是P0 =【0,1】,最后结果仍然是Pn = 【0.67,0.33】。这表明,马尔科夫过程与初始状态无关,跟转移矩阵有关

以上案例比较重要,基于以上案例我们知道markov概率转移矩阵的极限是一个稳态矩阵(证明略,以案例体现),该稳态矩阵对应着一个稳态向量(也称作稳态矩阵的特征值为1的特征向量)。

2.Pagerank

(注:浏览此部分需要对markov转移矩阵及其极限稳态有一定的了解)

这部分原文链接:PageRank算法详解

实际应用中许多数据都以图(graph)的形式存在,比如,互联网、社交网络都可以看作是一个图。图数据上的机器学习具有理论与应用上的重要意义。 PageRank 算 法是图的链接分析(link analysis)的代表性算法,属于图数据上的无监督学习方法。

PageRank算法最初作为互联网网页重要度的计算方法,1996 年由Page和Brin提出,并用于谷歌搜索引擎的网页排序。事实上,PageRank 可以定义在任意有向图上,后来被应用到社会影响力分析、文本摘要等多个问题。

PageRank算法的基本想法是在有向图上定义一个随机游走模型,即一阶马尔可夫链,描述随机游走者沿着有向图随机访问各个结点的行为。在一定条件下,极限情况访问每个结点的概率收敛到平稳分布,这时各个结点的平稳概率值就是其PageRank值,表示结点的重要度。PageRank 是递归定义的,PageRank 的计算可以通过迭代算法进行。

2.1 基本想法

历史上,PageRank算法作为计算互联网网页重要度的算法被提出。PageRank是定义在网页集合上的一个函数,它对每个网页给出一个正实数,表示网页的重要程度,整体构成一个向量,PageRank值越高,网页就越重要,在互联网搜索的排序中可能就被排在前面。

假设互联网是一个有向图,在其基础上定义随机游走模型,即一阶马尔可夫链,表示网页浏览者在互联网上随机浏览网页的过程。假设浏览者在每个网页依照连接出去的超链接以等概率跳转到下一个网页,并在网上持续不断进行这样的随机跳转,这个过程形成一阶马尔可夫链。PageRank表示这个马尔可夫链的平稳分布。每个网页的PageRank值就是平稳概率。

图1表示一个有向图,假设是简化的互联网例,结点 A , B , C 和 D 表示网页,结点之间的有向边表示网页之间的超链接,边上的权值表示网页之间随机跳转的概率。假设有一个浏览者,在网上随机游走。如果浏览者在网页 A ,则下一步以 1/3 的概率转移到网页 B, C和 D 。如果浏览者在网页 B ,则下一步以 1/2 的概率转移到网页 A 和 D 。如果浏览者在网页 C ,则下一步以概率 1 转移到网页 A 。如果浏览者在网页 D ,则下一步以 1/2 的概率转移到网页B 和 C 。

直观上,一个网页,如果指向该网页的超链接越多,随机跳转到该网页的概率也就越高,该网页的PageRank值就越高,这个网页也就越重要。一个网页,如果指向该网页的PageRank值越高,随机跳转到该网页的概率也就越高,该网页的PageRank值就越高,这个网页也就越重要。PageRank值依赖于网络的拓扑结构,一旦网络的拓扑(连接关系)确定,PageRank值就确定。

PageRank 的计算可以在互联网的有向图上进行,通常是一个迭代过程。先假设一 个初始分布,通过迭代,不断计算所有网页的PageRank值,直到收敛为止。

至此可得到一个markov概率传递矩阵,由上文诉说可知,对该矩阵进行多次迭代以后得到稳定的Markov稳态矩阵(见二.1.4马尔可夫模型的应用)。其左特征值为1的对应的单位特征向量称为稳态向量。向量的每个分量即是每个页面的PageRank值。

三、如何将Markov和逆Ragerank代入PSO算法

上文提到机器根据粒子群算法中“粒子本身的历史最优解”和“群体的全局最优解”,这两个用来影响粒子的速度和下一个位置,借此求得最优解。群体的全局最优解通过种群拓扑结构来影响其他粒子,文献使用的拓扑结构是Gbest拓扑结构,即所有粒子都有可能影响到其他粒子,这给了Markov矩阵存在的基础。拓扑结构如下

其次文献弱化了"全局最优对其他粒子的影响“,在每一次迭代中以“每个粒子和全局最优的距离“为标准来对粒子之间的距离更新加权,距离越大受全局最优的影响越小。

继而得到一个向量,向量的每个分量是”每个粒子和全局最优的距离“的倒数以后的归一化,以保持整个向量的模长为1。这个向量称作为稳态向量。

其次是根据稳态向量随即迭代出这个向量对应的最初的Markov概率转移矩阵,以最小方差为代价函数(这一块比较理论,有兴趣的读者可以参考以下文献,这篇文献可是高被引文献!)

Csiszar, Imre. “Why Least Squares and Maximum Entropy? An Axiomatic Approach to Inference for Linear Inverse Problems.” The Annals of Statistics, vol. 19, no. 4, 1991, pp. 2032–66. JSTOR, http://www.jstor.org/stable/2241918. Accessed 5 Mar. 2023.

(注意:文献中使用的算法是逆PageRank算法,即将PageRank算法反过来,正常的PageRank是根据Markov概率转移矩阵计算Markov稳态向量,逆PageRank算法是根据Markov稳态向量随机迭代出Markov概率转移矩阵,这个矩阵不是唯一的)

具体来说,在粒子群优化算法中,群的种群可以看作是一个有向图。节点表示粒子,而转移概率可以看作粒子对其他粒子的影响。提出了一种基于逆PageRank算法的PSO算法。在逆PageRank PSO(I-PR-PSO)中,为了定义PageRank向量,即马尔可夫链的稳态,使用了群的每个粒子的相对成功率。然后,在每次迭代中,根据以下等式计算每个粒子k关于最佳一个Gbest的相对成功率。Gbest表示全局最优,Pk表示第k个粒子。

然后根据以下等式将包含每个群粒子的所有相对成功的向量归一化。

在此得到了Markov稳态向量。接下来就是根据该稳态向量随机迭代出其对应的概率转移矩阵,简单来说就是任意取一个随机矩阵,计算出它的左特征值为1的左特征向量,计算该特征向量和Markov稳态向量的方差,以最小方差为代价函数,不断地对矩阵进行优化,直至方差小至某个数量级。

具体细节读者可阅读文献掌握,以下直接给出文献的核心伪代码,具体而言使用Algoritm3进行PSO算法迭代,期间代入Algorithm1根据Markov稳态向量进行随即迭代计算Markov概率转移矩阵,在Alrithm1中使用Algorithm2计算随机矩阵的最小数量级。伪代码如下:

看不懂?没关系,我们直接copy到chatgpt,让它给我们讲解这些伪代码是什么意思。

四、使用chatgpt进行算法复现

以上结果显示chatgpt已经读懂了这三段伪代码,现在我们让它给我们复现一下整个程序

# 导入必要的库
import numpy as np# Algorithm 2: 计算因子 δ
def algorithm2(piT_target):ii = np.min(piT_target)order_magnitude = 0while ii <= 1:ii *= 10order_magnitude += 1delta = 1 * 10**(-order_magnitude)return delta# Algorithm 1: 计算随机连接矩阵
def algorithm1(Cm, n, PR):pi0 = np.ones((n, 1)) / nrm = pi0 - np.matmul(Cm, pi0)delta = algorithm2(pi0)while np.linalg.norm(rm, 2) > PR:max_col_idx = np.argmax(rm)min_col_idx = np.argmin(rm)row_idx = np.random.randint(n)while True:temp_Cm = Cm.copy()temp_Cm[row_idx, max_col_idx] += deltatemp_Cm[row_idx, min_col_idx] -= deltaif np.all(temp_Cm >= 0) and np.all(temp_Cm <= 1):Cm = temp_Cmbreakelse:row_idx = np.random.randint(n)piT = np.transpose(np.linalg.eig(Cm)[1][:, 0])piT /= np.sum(piT)rm = piT - np.matmul(Cm, piT)return Cm# Algorithm 3: 全局逆PageRank-PSO算法
def algorithm3(num_particles, num_iterations_pso, max_iterations_pr, PR):# 随机定义粒子的速度和位置particles_position = np.random.rand(num_particles, n, n)particles_velocity = np.random.rand(num_particles, n, n)# 初始化GBest和PBestGBest = NoneGBest_fitness = float('-inf')PBest = particles_position.copy()PBest_fitness = np.zeros(num_particles)# 进行迭代for i in range(num_iterations_pso):# 计算适应度for j in range(num_particles):C = particles_position[j, :, :]piT = np.transpose(np.linalg.eig(C)[1][:, 0])piT /= np.sum(piT)PBest_fitness[j] = np.dot(piT, target_vector)# 更新GBest和PBestbest_particle_idx = np.argmax(PBest_fitness)if PBest_fitness[best_particle_idx] > GBest_fitness:GBest = particles_position[best_particle_idx, :, :]GBest_fitness = PBest_fitness[best_particle_idx]for j in range(num_particles):if PBest_fitness[j] > np.dot(np.transpose(np.linalg.eig(PBest[j, :, :])[1][:, 0]), target_vector):PBest[j, :, :] = particles_position[j, :, :]# 进行PR迭代Cm = np.random.rand(n, n)while np.linalg.norm(np.matmul(Cm, np.ones((n, 1))) - target_vector, 2) > PR and max_iterations_pr > 0:Cm = algorithm1(Cm, n, PR)max_iterations_pr -= 1

我们可以看出来,这个代码根本没有写完,甚至连algothrm3都没有定义完,笔者一开始就没有期待chatgpt能给我一个完整的代码,因为伪代码里面有很多方程是在文献中体现的,机器人并不知道那些方程是怎么计算的。分析以上代码我们可以看出,那些方程缺失的地方chatgpt会自己找一些经典的方法补上,比如方差的计算,或者是一些其他的乱七八糟的方法。虽然运行不出来结果,但是这串代码却给我们保持了相应的代码框架,chatgpt会用一些经典有效的方法、函数搭建起整个代码的数据结构,在哪些地方应该用什么函数、用什么数据结构,chatgpt从现有的最经典的项目上摘录下这些方法传递给我们,是非常有用的。

笔者仔细检查了这段代码的每个步骤,将经典的PSO粒子群算法代入以上框架,

取目标函数为抛物面

np.sum(x ** 2)

设置5个维度的变量x,每个变量的可行域设置为[-10,10]

最后整理出以下代码:

import numpy as np
def fitness_func(x):return np.sum(x ** 2)
# Algorithm 2: Function to compute the factor δ
def compute_delta(target_vector):ii = np.min(target_vector)order_magnitude = 0while ii <= 1:ii = ii * 10order_magnitude += 1delta = 1 * 10**(-order_magnitude)return delta# Algorithm 1: Function to compute the stochastic connectivity matrix C
def compute_stochastic_matrix(target_vector, PageRank_iterations=6000, residual_threshold=0.01, delta=None):n = len(target_vector)C = np.random.rand(n, n)  # 生成随机矩阵C = C / np.sum(C, axis=1, keepdims=True)  # 归一化处理pi = np.ones(n) / ntarget_vector=target_vector.Tpi=pi.Trm = np.dot(target_vector - pi,C-np.identity(n))m = 0while np.linalg.norm(rm, 2) > residual_threshold and m < PageRank_iterations:# Pick columns corresponding to maximum and minimum entries of the residual vectorj_max = np.argmax(rm)j_min = np.argmin(rm)# Randomly select a rowi = np.random.randint(0,n)# Check if applying delta changes the sign of all matrix elements and keeps them between 0 and 1while True:if delta is None:delta = compute_delta(target_vector)if np.all((C[i,:] + delta <= 1) & (C[i,:] + delta >= 0)):C_new = C.copy()C_new[i,j_max] += deltaC_new[i,j_min] -= deltaif np.all((C_new >= 0) & (C_new <= 1)):breaki = np.random.randint(0,n)# Update C and piC = C_new# 求解矩阵的特征值和特征向量eigenvalues, eigenvectors = np.linalg.eig(C.T)# 找到特征值为 1 的特征向量stationary_vector = np.real(eigenvectors[:, np.isclose(eigenvalues, 1)])# 将稳态向量进行归一化处理stationary_vector = stationary_vector / stationary_vector.sum()pi = stationary_vector.T# Update residual vectorrm = np.dot(target_vector - pi, C - np.identity(n))m += 1return C# Algorithm 3: Global Inverse-PageRank-PSO algorithm
def global_inverse_pagerank_pso(num_particles, IPS_iterations, num_dimensions, w=0.8, c1=1.5, c2=1.5, target_threshold=1e-7):# Random initialization of particles' position and velocitypos = np.random.uniform(-10, 10, (num_particles, num_dimensions))vel = np.random.uniform(-1, 1, (num_particles, num_dimensions))pbest_pos = pos.copy()pnow_val = np.zeros(num_particles)pbest_val=np.full(num_particles, np.inf)gbest_pos = np.zeros((1, num_dimensions))gbest_val = np.inf# 迭代优化for it_pso in range(IPS_iterations):# 计算适应度值for j in range(num_particles):pnow_val[j] = fitness_func(pos[j])if pnow_val[j] < pbest_val[j]:pbest_val[j] = pnow_val[j].copy()pbest_pos[j] = pos[j].reshape(1, -1).copy()if pnow_val[j] < gbest_val:gbest_val = pnow_val[j].copy()gbest_pos = pos[j].reshape(1, -1).copy()# 计算靶向量# target_vector=np.abs(list(np.array(gbest_val*100/(gbest_val-i+target_threshold) for i in pnow_val)))# 将列表推导式拆分为单独的循环以检查问题所在temp_list = []for i in pnow_val:temp_arr = np.array(gbest_val * 100 / (gbest_val - i + target_threshold))temp_list.append(temp_arr)target_vector = np.abs(list(temp_list))target_vector=target_vector/target_vector.sum()# 计算矩阵 algorithm1C=compute_stochastic_matrix(target_vector, PageRank_iterations=100, residual_threshold=0.01, delta=None)# 更新粒子速度和位置for j in range(num_particles):vel[j] = w * vel[j] + c1 * np.random.rand() * (pbest_pos[j] - pos[j]) + c2 * np.random.rand() * (np.dot(C[j],(pbest_pos-pos)))# vel[j] = w * vel[j] + c1 * np.random.rand() * (pbest_pos[j] - pos[j]) + c2 * np.random.rand() * (#     np.dot(target_vector.T, (pbest_pos - pos)))pos[j] = pos[j] + vel[j]# 粒子位置边界处理for k in range(num_dimensions):if pos[j][k] < -10:pos[j][k] = -10vel[j][k] = -vel[j][k] # 反弹elif pos[j][k] > 10:pos[j][k] = 10vel[j][k] = -vel[j][k] # 反弹print('迭代到{}代'.format(it_pso))return gbest_val, gbest_posgbest_val, gbest_pos = global_inverse_pagerank_pso(num_particles=50, IPS_iterations=600, num_dimensions=5, w=0.8, c1=1.5, c2=1.5, target_threshold=1e-7)
print('Optimal solution: x = {}, f(x) = {}'.format(gbest_pos, gbest_val))

运行一下,结果出来了:

Optimal solution: x = [[-0.99989344 -0.5656597  -2.49651938  2.50810429  2.11224344]], 
f(x) = 18.304526309798106

这不是一个很好的结果,因为标准PSO算法结果是:

Optimal solution: x = [[ 0.32638254 -0.10087616  0.01717911  0.18699903  0.30561003]], 
f(x) = 0.24536280805991972

我的结果相比于标准PSO算法差了很多,可见我的代码还是在什么地方存在bug,可能是理论方面我的算法与文献还有一些出入。

五、小结

  1. 本文使用chatgpt对一篇进化算法领域的二区高被引SCI文献的算法进行了复现:使用了chatgpt提供的框架,只用了一天时间实现了代码复现,可见使用chatgpt能很快地提高工作效率。

  1. chatgpt可以用来调整bug,省去了很多浏览社区寻找解决方案的时间。

  1. 极力推荐使用chagpt进行数学建模,对于某个现有的问题,它会给你介绍可以使用的模型,在现有的框架下,将会有更多的时间去探寻模型相比于竞争者的新颖性。

  1. 在使用chagpt的过程中,笔者发现其可以输出系统集中的内容,但不能太多,系统的内容比如代码往往输出到某个部分就会突然断掉,这应该是模型在序列上的有限性导致的;而且模型会遗忘掉之前讨论的内容,这应该是有限的序列不能拓展以处理堆积起来的信息导致的。这方面的问题、细节和解决方案后面会继续更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/8698.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI写作 | 对Chatgpt用哪些提示方式才能让它写一篇优秀的小红书笔记?

作为AIGC创业者&#xff0c;我们全心投入到对ChatGPT的最新技术应用的探索中。自去年12月起&#xff0c;我们一直专注于这个领域。在这个时间段里&#xff0c;我有幸参与了一本来自国外的提示词艺术书籍的翻译任务&#xff0c;并编撰了一本收录着88个实际案例的小册子。通过这些…

如何用ChatGPT写Shell脚本

因为最近下班前都要拿机子搞压测&#xff0c;所以这段时间对shell脚本比较感兴趣&#xff0c;用chatGPT写shell脚本很方便。 如下是一些案列 比如我需要写一个批处理&#xff1a;写一个批处理在当前文件夹下建立20个文件夹每个文件夹里面有一个文本文档文本文档的第一句话是hel…

针对二维码解析库的 Fuzzing 测试

背景 在四月份的时候出了那么一个新闻&#xff0c;说微信有一个点击图片就崩溃的 bug&#xff0c;当时各大微信群里都在传播导致手机各种闪退。 由于当时笔者正在忙着卷 Java Web&#xff0c;没有第一时间去蹭这个热点&#xff0c;不过当时也稍微了解了一下 crash 的原理。最近…

服务器硬件测试 如何查看系统信息及测试使用工具

硬件长稳 一、查看硬件信息 sar&#xff08;sar命令&#xff0c;好一个大宝剑_7750783的技术博客_51CTO博客超全&#xff09; 使用 yum install sysstat 命令安装 #sar命令来对系统作一个了解&#xff0c;该命令是系统维护的重要工具&#xff0c;主要帮助我们掌握系统资源的使…

万字长文,为你送上全网最全Flutter学习资料!

话不多说直接上目录&#xff0c;干货较多内容很长&#xff0c;建议先收藏供以后慢慢查阅。 目录 文章视频组件导航模板插件框架实验性游戏开源App实用工具社区书籍福利 文章 介绍 Google IO 2018 [1.1K&#x1f44f;] - 构建美观&#xff0c;灵活的用户界面。Presentation …

百度工程师的软件质量与测试随笔

作者 | 百度移动生态质效工程师们 导读 在降本增效、以chatGPT为代表的大模型技术横空出世的背景下&#xff0c;对软件质量和软件测试的领域也带来了巨大冲击&#xff0c;也使得软件质量工作者开始变得焦虑&#xff0c;主要体现在&#xff1a;公司对软件质量从业者的不重视加剧…

首周下载量碾压ChatGPT!谷歌前员工创第二个Open AI?

来源 | 新智元 硅谷独角兽&#xff0c;又来震撼世界了&#xff01; 这支名叫Character Technologies的独角兽的核心力量&#xff0c;来自前谷歌LaMDA团队。 他们的新产品在移动端上线不到一周&#xff0c;下载量就达到了170万&#xff0c;直接碾压了ChatGPT&#xff01; 并且…

编译器大神 Chris Lattner 官宣新编程语言:Mojo,比 Python 快 35000 倍!

整理 | 王子彧 责编 | 张红月 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 说起 Chris Lattner&#xff0c;大家一定不陌生。这位编译器大神&#xff0c;曾经领导了众多大型技术项目。他不仅是 LLVM 项目的主要发起人&#xff0c;还是 Clang 编译器的创作…

走进社区客户端测试 | 得物技术

0.引言 社区 C 端 质量 体系建设思考&#xff1f; 询问 一下 ChatGPT 1.关于社区客户端 1.1 社区端上功能 1.2 客户端技术栈移动端应用可以分为三大类&#xff1a;Web 应用&#xff08;Web App&#xff09;、原生应用&#xff08;NativeApp&#xff09;、混合应用&#xff0…

Arm 确认对华禁售先进芯片设计产品;谷歌不准备推出 ChatGPT 类聊天产品;Bugzilla 宣布未来计划|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…

深度:行业拐点将至 “蔚来们”还有未来吗?

‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 2023年以来&#xff0c;新能源汽车行业热点频出。 2023年2月&#xff0c;威马汽车身陷停工停产、资金紧张等舆论漩涡。据最新消息透露&#xff0c;威马此前融资的30亿已经到账&#xff0c;3月中旬会进行有序的复工复产&…

运行Trezor 钱包suite项目+firmware(包含onekey)项目

一些流程 文章目录 目录 文章目录 前言 一、trezor钱包 一、firmware的安装步骤 二、suite官方操作 步骤 1.git 1.5 以下才是核心&#xff0c;尝试运行onekey的firmware 需要在ubuntu的终端中进行nix操作 ​编辑 2.接着 三、代码分析 1.doc的分析 Repository Structure 总结 前…

FreeRTOS内核:详解Task各状态(GPT4帮写)

FreeRTOS内核&#xff1a;详解Task各状态&#xff08;GPT4帮写&#xff09; 1. 背景2. Task顶层状态区分3. 运行状态&#xff08;Running&#xff09;4. 非运行状态4.1 阻塞态&#xff08;Blocked&#xff09;&#xff1a;4.2 挂起态&#xff08;Suspended&#xff09;4.3 就绪…

FreeRTOS内核:详解Queue队列 FIFO(GPT4帮写)

FreeRTOS内核&#xff1a;详解队列管理FIFO 1. 背景2. Queue相关API2.1 xQueueCreate()&#xff1a;创建2.2 xQueueSend()&#xff1a;发送2.3 xQueueReceive()&#xff1a;接收2.4 vQueueDelete()&#xff1a;删除2.5 xQueuePeek() &#xff1a;不删除的方式从FIFO读数据&…

chatgpt-如今最流行的自动化测试框架是什么

Whats the best automation test framework? 什么是最好的自动化测试框架&#xff1f; The best automation test framework depends on your specific needs and skill level. Here are some commonly used automation test frameworks: 最好的自动化测试框架取决于您的具体…

你的自动化框架如何设计的?为什么感觉面试官总是不满意,到底问题出在哪?

前言 去面试自动化测试岗位&#xff0c;尤其是接口自动化岗位&#xff0c;面试官总会问&#xff1a;说下你的自动化框架如何设计的&#xff1f; 为什么回答后&#xff0c;面试官对你的框架设计总是感觉不满意&#xff1f; 自动化测试实现的几种方式 对于不同的公司来说&…

使用 ChatGPT 从头开始​​研究和构建 SwiftUI 应用程序

今天我试图从头开始构建一个应用程序,向 ChatGPT 征求意见。我想第一次尝试创建一个基于 IOS 16 的 100% SwiftUI 应用程序。 技术选择 我想在 SwiftUI 中创建一个应用程序,采用模块化、多语言的方法,采用 mvvm 架构并使用协调器。 所以我问我如何创建一个满足我要求的应…

大学生对chatGPT的认知和使用

新一代对话式人工智能chatGPT在全球范围狂揽1亿名用户&#xff0c;不止于科技界破圈&#xff0c;更成为街头巷尾的谈资。 chatGPT能干什么&#xff1f; https://openai.com/blog/chatgpt/ chatGPT官网 写解决方案编写代码 说笑话 个人体验&#xff1a; 实用性强&#xff0c;…

ChatGPT 成全球学生的“作弊神器”?韩国学生“喜”提 0 分……

整理 | 朱珂欣 出品 | CSDN程序人生&#xff08;ID&#xff1a;coder_life&#xff09; 仅仅横空出世 70 余天的 ChatGPT &#xff0c;已经累计用户超 1 亿&#xff0c;创下了互联网最快破亿应用记录。根据 Similarweb 的数据&#xff0c;截至今年 1 月&#xff0c;平均每天…

本科论文查重网站分享

本科论文查重网站分享 本科论文需要查重&#xff0c;很多人都知道。知网作为查重届的权威代表&#xff0c;翟天临博士却不知道知网是什么&#xff0c;于是学历造假最终被发现。本文主角不是翟“博士”&#xff0c;而是和知网一样有论文查重功能的两个免费查重网站——YY和百度…