灰狼优化算法(GWO)python

news2024/11/30 14:38:35

目录

一、灰狼优化算法的python实现 

 二、灰狼优化算法与遗传算法的对比分析(python)

2.1 GWO1.py

 2.2 GA1.py

2.3 GWO_vs_GA.py

2.4 运行结果

​三、基于莱维飞行改进的灰狼优化算法的python实现


一、灰狼优化算法的python实现 

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False


'''定义函数'''
def function(X0):
    '''
    :param X0: x的取值
    :param dim: 维度
    :return: 函数值
    '''
    s=0
    s=1/(1+np.abs(X0[0])+np.abs(X0[1])+np.abs(X0[2])+np.abs(X0[3]))
    return s

'''灰狼优化算法——GWO'''
def GWO(NP,dim,NG,amax,x_max,x_min):

    '''
    :param NP:种群规模
    :param dim: 数据维度
    :param NG: 最大迭代步数
    :param amax: 系数向量初始值
    :param x_max: 解允许的最大值
    :param x_min: 解允许的最小值
    :return: 最优解的目标函数值
    '''

    '''随机产生初始解'''
    X0=np.zeros((NP,dim))
    value0=[]   #函数值
    for i in range(NP):
        X0[i]=np.random.uniform(low=x_min,high=x_max,size=(1, dim))
        value0.append(function(X0[i]))

    '''存储历史最优解和历史最优函数值'''
    X_best=[]          #历史最优解
    value_best=[]      #历史最优函数值

    '''对初始解的目标函数值进行降序排序,并一一对应得到相应的解'''
    #得到对目标函数值列表value0升序排列后的索引
    index_sort=np.argsort(np.array(value0))
    #对value0进行降序排列
    value0_sort=[value0[i] for i in index_sort[::-1]]
    #对X0进行相应的排列
    X0_sort=[X0[i] for i in index_sort[::-1]]

    '''得到初始解的最优解和最优函数值'''
    X_best.append(X0_sort[0])
    value_best.append(value0_sort[0])
    print("--------------------灰狼优化算法--------------------")
    print("初始最优解:\n{}".format(X_best[0].tolist()))
    print("初始最优函数值:\n{}".format(value_best[0]))

    '''选出最优的三个个体,并获得它们的位置信息'''
    Xalpha=X0_sort[0]
    Xbeta=X0_sort[1]
    Xdelta=X0_sort[2]

    '''开始利用灰狼优化算法进行训练'''
    for i in range(NG):

        '''计算系数向量的参数a'''
        ratio=i/NG
        a=amax*(1-ratio)

        '''对每个个体的位置进行更新'''
        for j in range(NP):
            '''分别计算在函数值最优的前三个个体的影响下,个体的位置移动量X1、X2、X3'''
            C1=2*np.random.rand()
            Dalpha=np.abs(C1*Xalpha-X0[j])
            A1=2*a*np.random.rand()-a
            X1=Xalpha-A1*Dalpha

            C2=2*np.random.rand()
            Dbeta=np.abs(C2*Xbeta-X0[j])
            A2=2*a*np.random.rand()-a
            X2=Xbeta-A2*Dbeta

            C3=2*np.random.rand()
            Ddelta=np.abs(C3*Xdelta-X0[j])
            A3=2*a*np.random.rand()-a
            X3=Xdelta-A3*Ddelta

            '''计算个体移动后的位置及函数值'''
            X0[j]=(X1+X2+X3)/3
            value0[j]=function(X0[j])

        '''对种群历史最优解和历史最优函数值进行更新'''
        if max(value0)>max(value_best):
            value_best.append(max(value0))
            X_best.append(X0[value0.index(max(value0))])
        else:
            value_best.append(value_best[-1])
            X_best.append(X_best[-1])

        '''对初始解的目标函数值进行降序排序,并一一对应得到相应的解'''
        #得到对目标函数值列表value0升序排列后的索引
        index_sort=np.argsort(np.array(value0))
        #对X0进行相应的降序排列
        X0_sort=[X0[i] for i in index_sort[::-1]]

        '''选出最优的三个个体,并获得它们的位置信息'''
        Xalpha=X0_sort[0]
        Xbeta=X0_sort[1]
        Xdelta=X0_sort[2]


    '''返回最优解和最优函数值'''
    return X_best,value_best

 二、灰狼优化算法与遗传算法的对比分析(python)

2.1 GWO1.py

import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False


'''定义函数'''
def function(X0):
    '''
    :param X0: x的取值
    :param dim: 维度
    :return: 函数值
    '''
    s=0
    s=1/(1+np.abs(X0[0])+np.abs(X0[1])+np.abs(X0[2])+np.abs(X0[3]))
    return s

'''灰狼优化算法——GWO'''
def GWO(NP,dim,NG,amax,x_max,x_min):

    '''
    :param NP:种群规模
    :param dim: 数据维度
    :param NG: 最大迭代步数
    :param amax: 系数向量初始值
    :param x_max: 解允许的最大值
    :param x_min: 解允许的最小值
    :return: 最优解的目标函数值
    '''

    '''随机产生初始解'''
    X0=np.zeros((NP,dim))
    value0=[]   #函数值
    for i in range(NP):
        X0[i]=np.random.uniform(low=x_min,high=x_max,size=(1, dim))
        value0.append(function(X0[i]))

    '''存储历史最优解和历史最优函数值'''
    X_best=[]          #历史最优解
    value_best=[]      #历史最优函数值

    '''对初始解的目标函数值进行降序排序,并一一对应得到相应的解'''
    #得到对目标函数值列表value0升序排列后的索引
    index_sort=np.argsort(np.array(value0))
    #对value0进行降序排列
    value0_sort=[value0[i] for i in index_sort[::-1]]
    #对X0进行相应的排列
    X0_sort=[X0[i] for i in index_sort[::-1]]

    '''得到初始解的最优解和最优函数值'''
    X_best.append(X0_sort[0])
    value_best.append(value0_sort[0])
    print("--------------------灰狼优化算法--------------------")
    print("初始最优解:\n{}".format(X_best[0].tolist()))
    print("初始最优函数值:\n{}".format(value_best[0]))

    '''选出最优的三个个体,并获得它们的位置信息'''
    Xalpha=X0_sort[0]
    Xbeta=X0_sort[1]
    Xdelta=X0_sort[2]

    '''开始利用灰狼优化算法进行训练'''
    for i in range(NG):

        '''计算系数向量的参数a'''
        ratio=i/NG
        a=amax*(1-ratio)

        '''对每个个体的位置进行更新'''
        for j in range(NP):
            '''分别计算在函数值最优的前三个个体的影响下,个体的位置移动量X1、X2、X3'''
            C1=2*np.random.rand()
            Dalpha=np.abs(C1*Xalpha-X0[j])
            A1=2*a*np.random.rand()-a
            X1=Xalpha-A1*Dalpha

            C2=2*np.random.rand()
            Dbeta=np.abs(C2*Xbeta-X0[j])
            A2=2*a*np.random.rand()-a
            X2=Xbeta-A2*Dbeta

            C3=2*np.random.rand()
            Ddelta=np.abs(C3*Xdelta-X0[j])
            A3=2*a*np.random.rand()-a
            X3=Xdelta-A3*Ddelta

            '''计算个体移动后的位置及函数值'''
            X0[j]=(X1+X2+X3)/3
            value0[j]=function(X0[j])

        '''对种群历史最优解和历史最优函数值进行更新'''
        if max(value0)>max(value_best):
            value_best.append(max(value0))
            X_best.append(X0[value0.index(max(value0))])
        else:
            value_best.append(value_best[-1])
            X_best.append(X_best[-1])

        '''对初始解的目标函数值进行降序排序,并一一对应得到相应的解'''
        #得到对目标函数值列表value0升序排列后的索引
        index_sort=np.argsort(np.array(value0))
        #对X0进行相应的降序排列
        X0_sort=[X0[i] for i in index_sort[::-1]]

        '''选出最优的三个个体,并获得它们的位置信息'''
        Xalpha=X0_sort[0]
        Xbeta=X0_sort[1]
        Xdelta=X0_sort[2]


    '''返回最优解和最优函数值'''
    return X_best,value_best

 2.2 GA1.py

import random
import math
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False


'''产生初始种群'''
def initialpopulation(NP,n,x0,x1):
    '''NP代表种群规模,n代表目标函数的未知量的个数;
       x0代表未知数取值的下限,x1代表未知数取值的上限'''
    initial=[]
    for i in range(NP):
        n_initial=[random.uniform(x0,x1) for j in range(n)]
        initial.append(n_initial)
    return initial


'''标定适值函数'''
def fitnessfunction(X):
    '''X代表存储各个未知量的取值的列表'''
    return 1/(math.sqrt(X[0]**2)+math.sqrt(X[1]**2)+math.sqrt(X[2]**2)+math.sqrt(X[3]**2)+1)


'''采用轮盘赌选择算法选择个体'''
def selection(NP,X0):
    '''NP代表种群规模,X0代表种群'''

    #计算种群中各个个体的适应值
    value=[]
    for i in range(NP):
        value.append(fitnessfunction(X0[i]))


    '''计算适应度和累计概率函数'''
    #计算选择概率
    fsum=0
    for i in range(NP):
        fsum=fsum+value[i]**2
    value_ratio=[]
    for i in range(NP):
        value_ratio.append((value[i]**2)/fsum)

    #计算累加概率
    value_ratio_add=[]
    for i in range(NP):
        if i==0:
            value_ratio_add.append(value_ratio[i])
        else:
            value_ratio_add.append(value_ratio_add[i-1]+value_ratio[i])


    #产生[0,1]之间的随机数,进行NP次轮转
    random_ratio=[random.uniform(0,1) for i in range(NP)]

    #进行轮盘赌选择
    choose_index=[]    #从0开始计
    value_ratio_add0=[0,*value_ratio_add]   #在列表value_ratio_add的最前面加上一个0
    for i in range(NP):
        for j in range(NP):
            if random_ratio[i]>=value_ratio_add0[j] and random_ratio[i]<value_ratio_add0[j+1]:
                choose_index.append(j)
                break

    #得到经过轮盘赌选择算法后的种群
    population=[X0[i] for i in choose_index]

    return population


'''遗传运算——双切点交叉'''
def crossover1(X0,pc,NP,n):
    '''X0代表种群,pc代表交叉概率,NP代表种群规模,n代表染色体上的基因数目'''

    # 对每个染色体生成一个[0,1]之间的随机数
    random_crossover=[random.uniform(0, 1) for i in range(NP)]

    # 判断哪些染色体进行交叉运算
    crossover_index=[]  # 种群中进行交叉运算的染色体的索引值
    for i in range(NP):
        if random_crossover[i]<pc:
            crossover_index.append(i)

    # 判断初步确定的需要交叉的染色体个数,如果为奇数,则最后一个染色体不进行交叉运算
    if (len(crossover_index)%2)!=0:
        crossover_index.pop()
        crossover_index=crossover_index

    #进行双切点交叉
    if len(crossover_index)!=0:
        randint_index=[sorted(random.sample([i for i in range(0,n-1)],2)) for i in range(int(len(crossover_index)/2))]
        for i in range(0,len(crossover_index),2):
            crossover1=X0[crossover_index[i]]
            crossover2=X0[crossover_index[i+1]]
            crossoverindex=randint_index[int(i/2)]
            #分割
            crossover1_1=[crossover1[j] for j in range(crossoverindex[0]+1)]
            crossover1_2=[crossover1[j] for j in range(crossoverindex[0]+1,crossoverindex[1]+1)]
            crossover1_3=[crossover1[j] for j in range(crossoverindex[1]+1,n)]
            crossover2_1=[crossover2[j] for j in range(crossoverindex[0]+1)]
            crossover2_2=[crossover2[j] for j in range(crossoverindex[0]+1,crossoverindex[1]+1)]
            crossover2_3=[crossover2[j] for j in range(crossoverindex[1]+1,n)]
            #交换
            X0[crossover_index[i]]=[*crossover1_1,*crossover2_2,*crossover1_3]
            X0[crossover_index[i+1]]=[*crossover2_1,*crossover1_2,*crossover2_3]

    #返回进行双切点交叉后的种群
    return X0


'''进行遗传运算——变异'''
def mutation(X0,pm,NP,n,x0,x1):
    '''X0代表种群,pm代表交叉概率,NP代表种群规模,n代表染色体上的基因数目
       x0代表未知数取值的下限,x1代表未知数取值的上限'''

    #生成在[0,1]上的随机数列表
    random_gene=[[random.uniform(0,1) for i in range(n)] for j in range(NP)]

    #进行变异运算
    for i in range(NP):
        for j in range(n):
            if random_gene[i][j]<pm:
                X0[i][j]=random.uniform(x0,x1)

    #返回经过变异操作后的种群
    return X0


'''计算种群中所有个体的适应值并返回最大值'''
def fitnessmax(X0,NP):
    '''X0代表种群,NP代表种群规模'''

    #计算种群中各个个体的适应值
    value=[]
    for i in range(NP):
        value.append(fitnessfunction(X0[i]))
    value_max=max(value)
    #适应值最大所对应的索引值
    index_max=value.index(max(value))
    #适应值最大所对应的染色体
    X0_max=X0[index_max]

    return value_max,X0_max


'''使用双切点交叉的遗传算法'''
def GA1(NP,NG,n,x0,x1,pc,pm):
    '''NP代表种群规模,NG代表最大代数,n代表一个染色体的基因数
       x0代表未知数取值的下限,x1代表未知数取值的上限
       pc代表交叉概率,pm代表变异概率'''

    #遗传算法——单切点交叉
    #print("----------------------------------------------------------遗传算法(双切点交叉)----------------------------------------------------------")

    #产生初始种群
    X0=initialpopulation(NP,n,x0,x1)
    '''得到种群的最大适应值和对应的染色体'''
    value_max, valueX0_max = fitnessmax(X0, NP)
    print("--------------------遗传算法--------------------")
    print("初始最优解:\n{}".format(valueX0_max))
    print("初始最优函数值:\n{}".format(value_max))

    #存储最大适应值和对应的函数值的列表
    fitnessmax_list=[]
    X0max_list=[]

    #历史最大适应值
    history_max=0
    history=[]
    history_X0=[]

    for i in range(NG):
        '''得到种群的最大适应值和对应的染色体'''
        value_max,valueX0_max=fitnessmax(X0,NP)
        fitnessmax_list.append(value_max)
        X0max_list.append(valueX0_max)
        if i==0:
            history_max=value_max
            history.append(history_max)
            history_X0.append(valueX0_max)
        else:
            if value_max>=history_max:
                history_max=value_max
                history.append(history_max)
                history_X0.append(valueX0_max)
            else:
                history.append(history_max)
                history_X0.append(history_X0[i-1])
        #print("第{}代:{}     value_max={}".format(i + 1, history_X0[i], history[i]))

        '''选择'''
        X1=selection(NP,X0)

        '''双切点交叉运算'''
        X2=crossover1(X1,pc,NP,4)

        '''变异运算'''
        X3=mutation(X2,pm,NP,4,-10,10)

        X0=X3

    print("最优解Best={}".format(history[-1]))
    #print("---------------------------------------------------------------进程结束---------------------------------------------------------------")

    '''返回历代的最优函数值和最优解'''
    return history,history_X0

2.3 GWO_vs_GA.py

import GWO1
import GA1
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

if __name__=="__main__":

    '''得到遗传算法求解结果'''

    #最大迭代步数
    NG=1000

    #种群规模
    NP=100

    #交叉率
    pc=0.9

    #变异率
    pm=0.1

    #染色体基因数
    n=4

    #未知数的下限
    x0=-10

    #未知数的上限
    x1=10

    #进行双切点交叉的遗传运算
    historymax,historymaxX0=GA1.GA1(NP,NG,n,x0,x1,pc,pm)

    print("最优解:\n{}".format(historymaxX0[-1]))
    print("最优函数值:\n{}".format(historymax[-1]))


    '''得到灰狼优化算法的求解结果'''

    #最大迭代步数
    NG=1000

    #种群规模
    NP=100

    #数据维度
    dim=4

    #x允许的最大值和最小值
    x_max=10
    x_min=-10

    #系数向量初始值
    amax=2

    '''灰狼优化算法'''
    X_best,value_best=GWO1.GWO(NP,dim,NG-1,amax,x_max,x_min)

    print("最优解:\n{}".format(X_best[-1]))
    print("最优函数值:\n{}".format(value_best[-1]))

    '''绘制遗传算法和灰狼优化算法的优化过程'''
    plt.plot([int(i) for i in range(NG)],historymax,label="GA")
    plt.plot([int(i) for i in range(NG)],value_best,label="GWO",c="red")
    plt.title("遗传算法(GA)和灰狼优化算法(GWO)的优化过程")
    plt.xlabel("代数")
    plt.ylabel("函数值")
    plt.grid()
    plt.legend()
    plt.show()

2.4 运行结果

三、基于莱维飞行改进的灰狼优化算法的python实现

import numpy as np
import math
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus']=False

'''定义函数并求解函数值'''
def function(X0):
    '''
    :param X0:解向量
    :return: 函数值
    '''
    s1=0
    for i in range(len(X0)):
        s1=s1+(X0[i])**2
    s2=0
    for i in range(len(X0)):
        s2=s2+np.cos(2*(np.pi)*X0[i])
    s=-20*np.exp(-0.2*(np.sqrt((1/len(X0))*s1)))-np.exp((1/len(X0))*s2)+20+np.e
    return s

'''嵌入莱维飞行的灰狼优化算法'''
def LGWO(NP,dim,NG,amax,x_max,x_min):

    '''
    :param NP:种群规模
    :param dim: 数据维度
    :param NG: 最大迭代步数
    :param amax: 系数向量初始值
    :param x_max: 解允许的最大值
    :param x_min: 解允许的最小值
    :return: 最优解和最优解的目标函数值
    '''

    '''随机产生初始解'''
    X0=np.zeros((NP,dim))
    value0=[]   #函数值
    for i in range(NP):
        X0[i]=np.random.uniform(low=x_min,high=x_max,size=(1, dim))
        value0.append(function(X0[i]))

    '''存储历史最优解和历史最优函数值'''
    X_best=[]          #历史最优解
    value_best=[]      #历史最优函数值

    '''对初始解的目标函数值进行升序排序,并一一对应得到相应的解'''
    #得到对目标函数值列表value0升序排列后的索引
    index_sort=np.argsort(np.array(value0))
    #对value0进行升序排列
    value0_sort=[value0[i] for i in index_sort]
    #对X0进行相应的排列
    X0_sort=[X0[i] for i in index_sort]

    '''得到初始解的最优解和最优函数值'''
    X_best.append(X0_sort[0])
    value_best.append(value0_sort[0])
    print("初始最优解:\n{}".format(X_best[0].tolist()))
    print("初始最优函数值:\n{}".format(value_best[0]))

    '''选出最优的两个个体,并获得它们的位置信息'''
    Xalpha=X0_sort[0]
    Xalpha_score=value0_sort[0]
    Xbeta=X0_sort[1]
    Xbeta_score=value0_sort[1]

    '''进行嵌入莱维飞行的灰狼优化算法'''
    for i in range(NG):

        '''计算系数向量的参数a'''
        ratio=i/NG
        a=amax*(1-ratio)

        for j in range(NP):
            '''边界处理'''
            for k in range(dim):
                if X0[j][k]>x_max:
                    X0[j][k]=x_max
                if X0[j][k]<x_min:
                    X0[j][k]=x_min

            '''计算函数值'''
            value=function(X0[j])

            '''更新Alpha,Beta'''
            if value<Xalpha_score:
                Xalpha_score=value
                Xalpha=X0[j]
            elif value<Xbeta_score:
                Xbeta_score=value
                Xbeta=X0[j]

        '''更新所有个体'''
        Xbest=X0[0]
        valuebest=function(X0[0])
        for j in range(NP):
            for k in range(dim):
                r1=np.random.rand()
                r2=np.random.rand()
                A1=2*a*r1-a
                C1=2*r2
                D_alpha=np.abs(C1*Xalpha[k]-X0[j][k])

                r1=np.random.rand()
                r2=np.random.rand()
                A2=2*a*r1-a
                C2=2*r2
                D_beta=np.abs(C2*Xbeta[k]-X0[j][k])

                X0_old=X0[j]
                A=np.random.rand()
                if np.abs(A)<0.5:
                    X0[j][k]=0.5*(Xalpha[k]-A1*D_alpha+Xbeta[k]-A2*D_beta)
                else:
                    beta=1.5    #beta一般取1.5
                    sigma_u=((math.gamma(1+beta)*math.sin(np.pi*beta/2))/(math.gamma((1+beta)/2)*beta*2**(0.5*(beta-1))))**(1/beta)
                    u=np.random.normal(0,sigma_u)
                    v=np.random.normal(0,1)
                    alpha_levi=(0.01*u*(X0[j][k]-Xalpha[k]))/(np.abs(v)**(-beta))
                    X0[j][k]=0.5*(Xalpha[k]-A1*D_alpha+Xbeta[k]-A2*D_alpha)+alpha_levi
                '''贪婪选择算法'''
                rnew=np.random.rand()
                p=np.random.rand()
                if function(X0[j])>function(X0_old) and rnew<p:
                    X0[j]=X0_old

            '''计算函数值'''
            value1=function(X0[j])

            '''更新历史最优解和历史最优函数值'''
            if value1<valuebest:
                valuebest=value1
                Xbest=X0[j]

        if valuebest<value_best[-1]:
            value_best.append(valuebest)
            X_best.append(Xbest)
        else:
            value_best.append(value_best[-1])
            X_best.append(X_best[-1])

    '''绘制优化过程'''
    plt.plot([int(i) for i in range(NG+1)],value_best)
    plt.title("嵌入莱维飞行的灰狼优化算法(LGWO)的优化过程")
    plt.xlabel("代数")
    plt.ylabel("函数值")
    plt.grid()
    plt.show()

    return X_best[-1],value_best[-1]

'''主函数'''
if __name__=="__main__":

    '''最大迭代步数'''
    NG=500

    '''种群规模'''
    NP=30

    '''数据维度'''
    dim=30

    '''x允许的最大值和最小值'''
    x_max=32
    x_min=-32

    '''系数向量初始值'''
    amax=2

    '''嵌入莱维飞行的灰狼优化算法'''
    X_best,value_best=LGWO(NP,dim,NG,amax,x_max,x_min)

    print("最优解:\n{}".format(X_best))
    print("最优函数值:\n{}".format(value_best))

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

报修软件有什么用?企业如何做好设备管理与维护?

在当今的商业环境中&#xff0c;设备设施的维护和管理已经成为企业运营的重要环节。无论是学校、酒店、物业等大型企事业单位&#xff0c;还是运维集成商、制造工厂等企业单位&#xff0c;都需要对设备设施进行有效的管理。报修软件作为一种智能化的解决方案&#xff0c;为设备…

钉钉会议室无需API开发轻松连接OA、电商、营销、CRM、用户运营、推广、客服等近千款系统

钉钉会议室支持成员管理、主持人权限管理、高级会控、组织内会议全员静音、共享权限控制等会议管理能力&#xff0c;确保会议安全可控的进行。 官网&#xff1a;https://page.dingtalk.com/wow/z/dingtalk/Rax/RoomsIntro 集简云无代码集成平台&#xff0c;轻松连接钉钉会议室…

专业软件测评中心▏App渗透测试的测试流程和注意事项简析

当前&#xff0c;我国数字经济蓬勃发展&#xff0c;为实现高质量发展注入了澎湃动力&#xff0c;App的需求和供给都十分旺盛&#xff0c;因此安全问题逐渐成为用户最为关注的话题之一&#xff0c;而渗透测试至关重要。 一、App渗透测试流程&#xff1a;   1、需求收集&#…

Vray3.6 for SketchUp安装失败错误如何处理?

SketchUp这款软件是一个极受欢迎并且易于使用的3D软件&#xff0c;有很多朋友会通过Sketchup建模或是Sketchup渲染操作。 Sketchup 建模渲染来说&#xff0c;也是较简单的一款软件&#xff0c;今天小编聊的话题不是Sketchup怎样渲染的操作。 而是对于一些新手朋友提到的关于V…

functools模块:让Python编程更高效

​​​​​​​ 概要 不知道小伙伴们在Python编程中&#xff0c;我们经常会遇到一些需要反复使用的代码片段&#xff0c;例如装饰器、高阶函数等。为了提高代码的复用性和可读性&#xff0c;Python提供了functools模块。functools模块包含了许多实用的功能&#xff0c;…

软文推广方案,媒介盒子分享

作为企业宣传的手段&#xff0c;它能用较低的成本获得较好的宣传效果&#xff0c;但有许多企业在进行软文推广时并不起效&#xff0c;这是因为没掌握好方法。今天媒介盒子就来告诉大家&#xff0c;通用的软文推广方案。 一、 明确推广目标以及受众 明确软文推广的目标有助于明…

数字化如何赋能企业降本增效?

在当前高度不确定的市场环境下&#xff0c;降本增效已成为传统企业热议的话题。在这个背景下&#xff0c;企业内部各种“卷”现象层出不穷&#xff0c;各部门都在积极降本、开源节流&#xff0c;同时也在争夺本就不足的企业资源。因此&#xff0c;数字部门在资源受限的情况下&a…

人工智能基础_机器学习016_BGD批量梯度下降求解多元一次方程_使用SGD随机梯度下降计算一元一次方程---人工智能工作笔记0056

然后上面我们用BGD计算了一元一次方程,那么现在我们使用BGD来进行计算多元一次方程 对多元一次方程进行批量梯度下降. import numpy as np X = np.random.rand(100,8) 首先因为是8元一次方程,我们要生成100行8列的X的数据对应x1到x8 w = np.random.randint(1,10,size = (8…

[移动通讯]【Carrier Aggregation-10】【 Radio Resource Control (RRC) Aspects】

前言&#xff1a; 参考《4G/LTE - LTE Advanced》 Carrier Aggregation is a special form of LTE technology that enables UE and Network to use more than one carrier frequencies. Actually this is not a new concept in LTE. You might have used/heard Dual Carrier …

Django3框架-(3)-[使用websocket]:使用channels实现websocket功能;简化的配置和实际使用方式

概述&#xff1a; 对于Django使用channels实现websocket的功能&#xff0c;之前就写了几篇博文了。随着在项目的使用和实际维护来说&#xff0c;重新设置了相关处理方法。 一般来说&#xff0c;前后端都只维护一个全局的连接&#xff0c;通过携带数据来判断具体的操作&#x…

京东协议算法最新版

环境准备 1 com.jingdong.app.mall11.6.4 入口定位 逆向分析&#xff0c;发现 params 里面有一个 sign 以及请求头里面有一个 jdgs 首先我们发现京东的 sign 是 32 位的&#xff0c;猜测其可能是 md5 之类的 hash 算法&#xff0c;既然是 hash 算法&#xff0c;那么就大概率…

程序员不得不知道的三大编程语言,看看你了解吗?

作为一名合格的程序员&#xff0c;不仅要有过硬的技术&#xff0c;还要了解许多基础知识。编程语言可是程序员工作的主力军&#xff0c;但是它是如何产生和发展的&#xff0c;你知道吗&#xff1f;接下来就让我们一起来看看编程语言和它们的发展吧&#xff01;记得点赞加收藏哦…

对 Webpack 的理解

结论先行&#xff1a; Webpack 是目前比较常用的模块打包工具&#xff0c;它能够管理和打包我们开发中所用到的 HTML、 CSS、JS 以及各种静态资源文件。 webpack内部做的事情呢&#xff0c;就是分析出各个模块之间的依赖关系&#xff0c;然后形成资源列表&#xff0c;最终打包…

FL Studio21.2.0.3842中文免费版和谐绿色版本下载

FL Studio21.2.0.3842中文免费版带有 stem 分离和 FL Cloud&#xff0c;这是一项专为 FL Studio 打造的具有里程碑意义的新服务。其他新功能包括 FL Studio Fruity Edition 的 Audio Clips&#xff08;音频剪辑&#xff09;和一个新的模拟建模合成器 Kepler。 为庆祝 FL Studio…

python类如何实例化对象

python类如何实例化对象 1、把类看作是定制的数据类型。既然是类型&#xff0c;只能用来表示数据的类型&#xff0c;不能直接用来保存数据。**要保存数据&#xff0c;首先需要创建一个类似于这类容器的东西&#xff0c;称为对象(或例子)。通过类别产生对象的过程称为例子。 2、…

Windows新建计划任务定时执行脚本

右键-此电脑&#xff0c;选择管理 点击 - 任务计划程序&#xff0c; 选择- 创建基本任务 输入任务描述&#xff0c;点击下一步 选择计划任务周期&#xff0c; 每天/每周等&#xff0c;点击下一步 选择每天任务执行时间&#xff0c;然后点击下一步&#xff0c; 选择启动程序&…

javaEE -15( 13000字 JavaScript入门 - 2)

一&#xff1a;JavaScript(WebAPI) JS 分成三个大的部分 ECMAScript: 基础语法部分DOM API: 操作页面结构BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM&#xff0c;这个是 W3C 组织规定的. (和制定 ECMAScript 标准的大佬们不是一伙人). 前面学的 JS 基础语法主要学的是 …

百度智能云千帆大模型平台黑客马拉松报名开启!

比赛简介 创造是生成式 AI 的核心。无论是智能导购带来的线上购物体验升级&#xff0c;还是主图生成带来的素材生产效率提升&#xff0c;又或是游戏场景的快速设置、智能 NPC 的全新交互、数字广告的精准推荐和个性化定制&#xff0c;亦或者是为学生提供更符合真实的口语练习环…

《高性能MySQL-第三版》学习笔记一

第1章 MySQL架构与历史 1.1 MySQL逻辑架构 表现层&#xff1a;是应用程序的用户界面&#xff08;UI&#xff09;部分&#xff0c;大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等等。逻辑层&#xff1a;查询解析、分析、优化、缓…

王道p18 2.设计一个高效算法,将顺序表L的所有元素逆置,要求算法的空间复杂度为 O(1)。(c语言代码实现)

视频讲解在这&#xff08;支持一下吧&#xff0c;谢谢各位大佬&#xff09;&#xff1a;&#x1f447; c语言代码实现数据结构课后代码题顺序表p18 2_哔哩哔哩_bilibili 本题代码如下 void nizhi(struct sqlist* s) {int temp 0;for (int i 0; i < s->length / 2; i…