【Python】鲸鱼算法实现

2023-11-11

鲸鱼算法

自编代码

# main.py

import numpy as np
from numpy import random
from copy import deepcopy

from function import fun, new_min, new_max, pdist2, jingyu

sub = np.array([-50, -50, -50, -50, -50, -50, -50, -50, -50, -50])  # 自变量下限
up = np.array([50, 50, 50, 50, 50, 50, 50, 50, 50, 50])  # 自变量上限
opt = -1  # -1为最小化,1为最大化
# 程序为最小化寻优,如果是最大化寻优更改排序部分程序即可
n = len(sub)  # 自变量个数
num = 500 * n  # 种群大小
det = 10 * n + 100  # 迭代次数
k = 1.5 + 0.1 * n  # k为最大环绕圈数
R = 0.1 * pow(n, 2)  # 当鲨鱼进入猎物该范围,则直接对猎物位置进行逼近
Mc = (up - sub) * 0.1  # 猎物行动最大范围
x = np.zeros([num, n])
f = np.zeros(num)

for s in range(num):
    rand_data = random.random(n)
    rand_data = np.array(rand_data)
    x[s, :] = sub + (up - sub) * rand_data
    f[s] = fun(x[s, :])

best_x = np.zeros(n)
best_f = 0
# 以最小化为例
if opt == -1:
    best_f, a = new_min(f)  # 记录历史最优值
    best_x = x[a, :]  # 记录历史最优解
elif opt == 1:
    best_f, a = new_max(f)  # 记录历史最优值
    best_x = x[a, :]  # 记录历史最优解

trace = np.array([deepcopy(best_f)])
xx = np.zeros([num, n])
ff = np.zeros(num)

for ii in range(det):
    # 猎物躲避,蒙特卡洛模拟周围1000次,并选择最佳的点作为下一逃跑点
    d = pdist2(best_x, x)
    d.sort()
    z = np.exp(-d[1] / np.mean(Mc))  # 猎物急躁系数
    z = max(z, 0.1)
    best_t = []
    best_c = []
    yx = []
    dx = []
    for i in range(1000):
        m = []

        for iii in range(n):
            randi = random.randint(1, 3)
            a = pow(-1, randi)
            m.append(a)

        m = np.array(m)
        random_rand = random.random(n)
        xd = best_x + Mc * z * ((det - (ii + 1)) / det) * random_rand * m
        xd = np.maximum(sub, xd)
        xd = np.minimum(up, xd)
        if i < 1:
            dx = deepcopy(xd)  # (det-ii)/det表示随着追捕,猎物可逃窜的范围越来越小
        else:
            dx = np.vstack((dx,xd))  # (det-ii)/det表示随着追捕,猎物可逃窜的范围越来越小
        yx=np.hstack((yx,fun(xd)))

    if opt == -1:
        best_t, a = new_min(yx)  # 选择最佳逃跑点
        best_c = dx[a, :]
        if best_t < best_f:
            best_f = best_t
            best_x = best_c
        else:
            pass
    elif opt == 1:
        best_t, a = new_max(yx)  # 选择最佳逃跑点
        best_c = dx[a, :]
        if best_t > best_f:
            best_f = best_t
            best_x = best_c
        else:
            pass

    # 鲸鱼追捕
    for i in range(num):
        # 更新公式
        if np.sqrt(np.sum((x[i, :] - best_x) ** 2)) <= R:
            rand = random.random()
            xx[i, :] = x[i, :] + rand * (x[i, :] - best_x)
            xx[i, :] = np.maximum(sub, xx[i, :])
            xx[i, :] = np.minimum(up, xx[i, :])
            ff[i] = fun(xx[i, :])
        else:
            xx[i, :] = x[i, :] + np.real(jingyu(x[i, :] - best_x, k))
            xx[i, :] = np.maximum(sub, xx[i, :])
            xx[i, :] = np.minimum(up, xx[i, :])
            ff[i] = fun(xx[i, :])

    # 引入上一代进行排序,并重新分配角色
    F = np.hstack((np.array([best_f]), f, ff))
    F= np.array(F)
    X = np.vstack(([best_x], x, xx))
    X=np.array(X)
    temp=np.sort(F,axis=-1,kind='stable')
    if opt == -1:
        F, b = temp, np.argsort(F)  # 按小到大排序
    elif opt == 1:
        F, b = temp[::-1], np.argsort(-F)  # 按大到大排序

    X = X[b, :]
    f = F[:num]
    x = X[:num, :]

    if opt == -1:
        best_f, a = new_min(f)  # 记录历史最优值
    elif opt == 1:
        best_f, a = new_max(f)  # 记录历史最优值

    best_x = x[a, :]  # 记录历史最优解
    trace = np.hstack((trace, [best_f]))

print('最优解为:')
print(best_x)
print('最优值为:')
print(float(best_f))
import numpy as np

def new_min(arr):
    min_data = min(arr)
    key = np.argmin(arr)
    
    return min_data, key
import numpy as np

def new_max(arr):
    max_data = max(arr)
    key = np.argmax(arr)
    
    return max_data, key
import numpy as np

def pdist2(best_x, x):
    best_x = np.array(best_x)
    x = np.array(x)
    a = x - best_x
    b = pow(a, 2)
    c = np.sum(b, axis=1)
    d = pow(c, 0.5)

    return d
import copy

import numpy as np
from numpy import random

def jingyu(X, K):
    n = len(X)
    Y = []
    y = np.zeros(n - 1)
    costheta = np.zeros(n - 1)
    theta = np.zeros(n - 1)
    k = np.zeros(n - 1)

    for i in range(n - 1):
        Y = np.append(X[0:i + 1], 0)
        y[i] = np.sqrt(np.sum((X[0:i + 2]) ** 2))
        # 计算角度(圈数)
        costheta[i] = (X[0:i + 2] @ Y) / (np.sqrt(np.sum(X[0:i + 2] ** 2)) * np.sqrt(np.sum(Y ** 2)))

        if np.isnan(costheta[i]) == 1:
            costheta[i] = 1
        if X[i + 1] >= 0:
            theta[i] = np.arccos(costheta[i]) / (2 * np.pi)
        else:
            theta[i] = 2 - np.arccos(costheta[i]) / (2 * np.pi)

        theta[i] = theta[i] * 2 * np.pi
        # 自适应调节k
        if y[i] >= 10:
            k[i] = K * np.exp(-2)
        else:
            k[i] = K * np.exp(-y[i] / 5)

    # 位置更新公式,左包围或右包围
    f = []
    l = 0
    yy = copy.deepcopy(y)
    rand = random.random()

    ttheta = copy.deepcopy(theta)
    l = k[0] * rand
    yy[0] = yy[0] * np.exp(-l)
    ttheta[0] = ttheta[0] + l * 2 * np.pi * (-1) ** (random.randint(1, 3))
    f = [yy[0] * np.cos(ttheta[0]), yy[0] * np.sin(ttheta[0])]
    f = np.array(f)

    if n > 2:
        for j in range(n - 2):
            a = (j + 1) % 2
            if a == 1:
                rand = random.random()
                l = k[j + 1] * rand
                yy[j + 1] = yy[j + 1] * np.exp(-l)
                ttheta[j + 1] = ttheta[j + 1] + l * 2 * np.pi * ((-1) ** (random.randint(1, 3)))
                f = np.concatenate((f * abs(np.cos(ttheta[j + 1])), np.array([yy[j + 1] * np.sin(ttheta[j + 1])])))
            elif a == 0:
                rand = random.random()
                l = k[j + 1] * rand
                yy[j + 1] = yy[j + 1] * np.exp(-l)
                ttheta[j + 1] = ttheta[j + 1] + l * 2 * np.pi * ((-1) ** random.randint(1, 3))
                f = np.concatenate((f * abs(np.sin(ttheta[j + 1])), np.array([yy[j + 1] * np.cos(ttheta[j + 1])])))

    f = f.T
    return f
import numpy as np

def fun(data_list):
    arr = np.array(data_list)
    f = sum(pow(arr, 2))

    return f

结果

在这里插入图片描述

请添加图片描述

摘录代码

鲸鱼优化算法(WOA)(学习)_轨迹跟踪杨的博客-CSDN博客_鲸鱼优化算法

%参数初始化,初始时主要设置代理数量和最大迭代次数即可,其他算法相关的参数因为和当前迭代次数相关,需要在迭代中设置。
clc;clear;
dim=2;%变量的维数
SearchAgents_no=30; % 搜索代理数量,种群中个体个数
Max_iteration=500; % 最大迭代次数
ub=15;%上限
lb=-15;%下限
%种群初始化。随机初始化所有代理各个维度上的位置值,需要保证在取值范围内。
Positions=rand(SearchAgents_no,dim).*(ub-lb)+lb;
Leader_score = fobj(Positions(1,:));
for t=1:Max_iteration
    fit(t)=Leader_score;
    %(评估种群中每个代理的目标值,如有某个代理由于当前最优解,则将其设为最优解。)
    for i=1:size(Positions,1)
    % 计算每个代理的目标值
    fitness=fobj(Positions(i,:));
    % 更新最优解
        if fitness < Leader_score % 如果是最大化问题,这里就是">"
        Leader_score=fitness; 
        Leader_pos=Positions(i,:);
        end
    end
    
    
    %(设置和迭代次数相关的算法参数。)
    a=2-t*((2)/Max_iteration); % 等式(3)中a随迭代次数从2线性下降至0 
    %a2从-1线性下降至-2,计算l时会用到
    a2=-1+t*((-1)/Max_iteration);
 
    
    % Update the Position of search agents(对每个代理的每一维度进行位置更新)
    for i=1:size(Positions,1)
        r1=rand(); % r1为[0,1]之间的随机数
        r2=rand(); % r2为[0,1]之间的随机数
 
        A=2*a*r1-a;  % 等式(3)
        C=2*r2;      % 等式(4)
 
        b=1;               %  等式(5)中的常数b
        l=(a2-1)*rand+1;   %  等式(5)中的随机数l
        p = rand();        %  等式(6)中的概率p
        for j=1:size(Positions,2)
            if p<0.5   
                if abs(A)>=1
                rand_leader_index = floor(SearchAgents_no*rand()+1);
                X_rand = Positions(rand_leader_index, :);
                D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % 等式(7)
                Positions(i,j)=X_rand(j)-A*D_X_rand;      % 等式(8)
 
                elseif abs(A)<1
                D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % 等式(1)
                Positions(i,j)=Leader_pos(j)-A*D_Leader;      % 等式(2)
                end
            elseif p>=0.5
 
                distance2Leader=abs(Leader_pos(j)-Positions(i,j));
                % 等式(5)
                Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j);
            end
        end
    end
 
end
k=1:1:500;
plot(k,fit,'r');
function y=fobj(x)
 
 y=2*x(1)^2+x(2)^2-x(1)*x(2)-10*x(1)-4*x(2)+60;
  
end

鲸鱼优化算法Python实现 - 代码先锋网 (codeleading.com)

import numpy as np
import random
import math
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

'''优化函数'''


# y = x^2, 用户可以自己定义其他函数
def fun(X):
    output = sum(np.square(X))
    return output


''' 种群初始化函数 '''


def initial(pop, dim, ub, lb):
    X = np.zeros([pop, dim])
    for i in range(pop):
        for j in range(dim):
            X[i, j] = random.random() * (ub[j] - lb[j]) + lb[j]

    return X, lb, ub


'''边界检查函数'''


def BorderCheck(X, ub, lb, pop, dim):
    for i in range(pop):
        for j in range(dim):
            if X[i, j] > ub[j]:
                X[i, j] = ub[j]
            elif X[i, j] < lb[j]:
                X[i, j] = lb[j]
    return X


'''计算适应度函数'''


def CaculateFitness(X, fun):
    pop = X.shape[0]
    fitness = np.zeros([pop, 1])
    for i in range(pop):
        fitness[i] = fun(X[i, :])
    return fitness


'''适应度排序'''


def SortFitness(Fit):
    fitness = np.sort(Fit, axis=0)
    index = np.argsort(Fit, axis=0)
    return fitness, index


'''根据适应度对位置进行排序'''


def SortPosition(X, index):
    Xnew = np.zeros(X.shape)
    for i in range(X.shape[0]):
        Xnew[i, :] = X[index[i], :]
    return Xnew


'''鲸鱼优化算法'''


def WOA(pop, dim, lb, ub, Max_iter, fun):
    X, lb, ub = initial(pop, dim, ub, lb)  # 初始化种群
    fitness = CaculateFitness(X, fun)  # 计算适应度值
    fitness, sortIndex = SortFitness(fitness)  # 对适应度值排序
    X = SortPosition(X, sortIndex)  # 种群排序
    GbestScore = fitness[0]
    GbestPositon = np.zeros([1,dim])
    GbestPositon[0,:] = X[0, :]
    Curve = np.zeros([MaxIter, 1])
    for t in range(MaxIter):
        Leader = X[0, :]  # 领头鲸鱼
        a = 2 - t * (2 / MaxIter)  # 线性下降权重2 - 0
        a2 = -1 + t * (-1 / MaxIter)  # 线性下降权重-1 - -2
        for i in range(pop):
            r1 = random.random()
            r2 = random.random()

            A = 2 * a * r1 - a
            C = 2 * r2
            b = 1
            l = (a2 - 1) * random.random() + 1

            for j in range(dim):

                p = random.random()
                if p < 0.5:
                    if np.abs(A) >= 1:
                        rand_leader_index = min(int(np.floor(pop * random.random() + 1)), pop - 1)
                        X_rand = X[rand_leader_index, :]
                        D_X_rand = np.abs(C * X_rand[j] - X[i, j])
                        X[i, j] = X_rand[j] - A * D_X_rand
                    elif np.abs(A) < 1:
                        D_Leader = np.abs(C * Leader[j] - X[i, j])
                        X[i, j] = Leader[j] - A * D_Leader
                elif p >= 0.5:
                    distance2Leader = np.abs(Leader[j] - X[i, j])
                    X[i, j] = distance2Leader * np.exp(b * l) * np.cos(l * 2 * math.pi) + Leader[j]

        X = BorderCheck(X, ub, lb, pop, dim)  # 边界检测
        fitness = CaculateFitness(X, fun)  # 计算适应度值
        fitness, sortIndex = SortFitness(fitness)  # 对适应度值排序
        X = SortPosition(X, sortIndex)  # 种群排序
        if fitness[0] <= GbestScore:  # 更新全局最优
            GbestScore = fitness[0]
            GbestPositon[0,:] = X[0, :]
        Curve[t] = GbestScore

    return GbestScore, GbestPositon, Curve


'''主函数 '''
# 设置参数
pop = 50  # 种群数量
MaxIter = 1000  # 最大迭代次数
dim = 30  # 维度
lb = -100 * np.ones([dim, 1])  # 下边界
ub = 100 * np.ones([dim, 1])  # 上边界

GbestScore, GbestPositon, Curve = WOA(pop, dim, lb, ub, MaxIter, fun)
print('最优适应度值:', GbestScore)
print('最优解:', GbestPositon)

# 绘制适应度曲线
plt.figure(1)
plt.plot(Curve, 'r-', linewidth=2)
plt.xlabel('Iteration', fontsize='medium')
plt.ylabel("Fitness", fontsize='medium')
plt.grid()
plt.title('WOA', fontsize='large')

# 绘制搜索空间
fig = plt.figure(2)
ax = Axes3D(fig)
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)
Z = X ** 2 + Y ** 2
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='rainbow')
plt.show()

鲸鱼优化数学原理及Python实现 - 知乎 (zhihu.com)

0. 初始化

import numpy as np
import matplotlib.pyplot as plt

1. 样本点生成模块

def sampleGeneartor():
    X = np.arange(0, 5, 0.01)
    Y = X**3 - 4*X**2 + 1*X - 3
    e = np.random.normal(0, 2, 500)
    Y = Y + e
    plt.scatter(X, Y, 0.5)
    return X, Y

2. WOA优化算法模块

class woa():
    #初始化
    def __init__(self, X_train, Y_train, LB=np.array([-5, -5, -5, -5]),\
                 UB= np.array([5, 5, 5, 5]), dim=4, b=1, whale_num=20, max_iter=500):
        self.X_train = X_train
        self.Y_train = Y_train
        self.LB = LB
        self.UB = UB
        self.dim = dim
        self.whale_num = whale_num
        self.max_iter = max_iter
        self.b = b
        #Initialize the locations of whale
        self.X = np.random.uniform(0, 1, (whale_num, dim))*(UB - LB) + LB
        self.gBest_score = np.inf
        self.gBest_curve = np.zeros(max_iter)
        self.gBest_X = np.zeros(dim) 
    
    #适应度函数  
    def fitFunc(self, input):
        a = input[0]; b = input[1]; c = input[2]; d = input[3]
        Y_Hat = a*self.X_train**3 + b*self.X_train**2 + c*self.X_train + d 
        fitFunc = np.sum((Y_Hat - self.Y_train)**2)/np.shape(Y_Hat)[0]
        return fitFunc   
        
    #优化模块  
    def opt(self):
        t = 0
        while t < self.max_iter:
            for i in range(self.whale_num):
                self.X[i, :] = np.clip(self.X[i, :], self.LB, self.UB) #Check boundries
                fitness = self.fitFunc(self.X[i, :])
                # Update the gBest_score and gBest_X
                if fitness < self.gBest_score:
                    self.gBest_score = fitness
                    self.gBest_X = self.X[i, :].copy()
            
            a = 2*(self.max_iter - t)/self.max_iter
            #Update the location of whales
            for i in range(self.whale_num):
                p = np.random.uniform()
                R1 = np.random.uniform()
                R2 = np.random.uniform()
                A = 2*a*R1 - a
                C = 2*R2
                l = 2*np.random.uniform() - 1
                
                if p >= 0.5:
                    D = abs(self.gBest_X - self.X[i, :])
                    self.X[i, :] = D*np.exp(self.b*l)*np.cos(2*np.pi*l)+self.gBest_X
                else:
                    if abs(A) < 1:
                        D = abs(C*self.gBest_X - self.X[i, :])
                        self.X[i, :] = self.gBest_X - A*D
                    else:
                        rand_index = np.random.randint(low=0, high=self.whale_num)
                        X_rand = self.X[rand_index, :]
                        D = abs(C*X_rand - self.X[i, :])
                        self.X[i, :] = X_rand - A*D
        
            self.gBest_curve[t] = self.gBest_score       
            if (t%100 == 0) :
                print('At iteration: ' + str(t))  
            t+=1 
        return self.gBest_curve, self.gBest_X

4. 主程序

# main
'''
main function
'''
X, Y = sampleGeneartor()
fitnessCurve, para = woa(X, Y, dim=4, whale_num=60, max_iter=2000).opt()
yPre = para[0]*X**3 + para[1]*X**2 + para[2]*X + para[3] 
plt.scatter(X, yPre, 0.5)

plt.figure()
plt.plot(fitnessCurve, linewidth='0.5')
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】鲸鱼算法实现 的相关文章

  • 使用 MongoDB 作为我们的主数据库,我应该使用单独的图数据库来实现实体之间的关系吗?

    我们目前正在为一家专业公司内部实施类似 CRM 的解决方案 由于存储信息的性质以及信息的不同值和键 我们决定使用文档存储数据库 因为它完全适合目的 在本例中我们选择 MongoDB 作为此 CRM 解决方案的一部分 我们希望存储实体之间的关
  • 类的 IPython 表示

    我正在使用我创建的模块尝试 IPython 但它没有显示类对象的实际表示 相反 它显示类似的内容 TheClass module TheClass name I heavily在这个模块中使用元类 我有真正有意义的类表示 应该向用户显示 是
  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 让 VoiceChannel.members 和 Guild.members 返回完整列表的问题

    每当我尝试使用 VoiceChannel members 或 Guild members 时 它都不会提供适用成员的完整列表 我从文本命令的上下文中获取 VoiceChannel 和 Guild 如下所示 bot command name
  • 为什么 dataclasses.astuple 返回类属性的深层副本?

    在下面的代码中astuple函数正在执行数据类的类属性的深层复制 为什么它不能产生与函数相同的结果my tuple import copy import dataclasses dataclasses dataclass class Dem
  • pandas DataFrame.join 的运行时间是多少(大“O”顺序)?

    这个问题更具概念性 理论性 与非常大的数据集的运行时间有关 所以我很抱歉没有一个最小的例子来展示 我有一堆来自两个不同传感器的数据帧 我需要最终将它们连接成两个very来自两个不同传感器的大数据帧 df snsr1 and df snsr2
  • 我应该使用 Python 双端队列还是列表作为堆栈? [复制]

    这个问题在这里已经有答案了 我想要一个可以用作堆栈的 Python 对象 使用双端队列还是列表更好 元素数量较少还是数量较多有什么区别 您的情况可能会根据您的应用程序和具体用例而有所不同 但在一般情况下 列表非常适合堆栈 append is
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • 打印包含字符串和其他 2 个变量的变量

    var a 8 var b 3 var c hello my name is var a and var b bye print var c 当我运行程序时 var c 会像这样打印出来 hello my name is 8 and 3 b
  • 导入错误:没有名为flask.ext.login的模块

    我的flask login 模块有问题 我已经成功安装了flask login模块 另外 从命令提示符我可以轻松运行此脚本 不会出现错误 Python 2 7 r27 82525 Jul 4 2010 07 43 08 MSC v 1500
  • 无法导入 langchain.agents.load_tools

    我正在尝试使用 LangChain Agents 但无法导入 load tools 版本 langchain 0 0 27 我尝试过这些 from langchain agents import initialize agent from
  • Pandas 组合不同索引的数据帧

    我有两个数据框df 1 and df 2具有不同的索引和列 但是 有一些索引和列重叠 我创建了一个数据框df索引和列的并集 因此不存在重复的索引或列 我想填写数据框df通过以下方式 for x in df index for y in df
  • Django REST Framework - CurrentUserDefault 使用

    我正在尝试使用CurrentUserDefault一个序列化器的类 user serializers HiddenField default serializers CurrentUserDefault 文档说 为了使用它 请求 必须作为
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 如何使用 AWS Lambda Python 读取 AWS S3 存储的 Word 文档(.doc 和 .docx)文件内容?

    我的场景是 我尝试使用 python 实现从 Aws Lambda 读取 AWS 存储的 S3 word 文档 doc 和 docx 文件内容 下面的代码是我使用的 我的问题是我可以获取文件名 但无法读取内容 def lambda hand
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 根据 Pandas 中的列表选择数据框行的子集

    我有一个数据框df1并列出x In 22 import pandas as pd In 23 df1 pd DataFrame C range 5 B range 10 20 2 A list abcde In 24 df1 Out 24
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • pytest找不到模块[重复]

    这个问题在这里已经有答案了 我正在关注pytest 良好实践 https docs pytest org en latest explanation goodpractices html test discovery或者至少我认为我是 但是

随机推荐

  • 前端能力八大等级,每一级附送晋升方法

    文章目录 一 入门级 选秀阶段 能够解决一些问题 怎么进阶 二 解决问题 常在阶段 本阶段特征 进阶之路 三 优化方案 贵人阶段 特征 提升之路 四 全局观 嫔位 特征 提升之路 五 深度 妃位 特征 进阶 六 广度 贵妃 特征 晋升 七
  • 微信小程序开发——map地图组件,定位,并手动修改位置偏差。

    环境搭建 注册 获取APPID 没有这个不能真鸡调试 下载微信web开发者工具 挺多bug 将就用 打开微信web开发者工具 扫码登录 新建小程序 输入APPID 勾选创建quick start项目 工程结构 可以看到工程根目录中有个app
  • HTTP长连接、短连接使用及测试

    概念 HTTP短连接 非持久连接 是指 客户端和服务端进行一次HTTP请求 响应之后 就关闭连接 所以 下一次的HTTP请求 响应操作就需要重新建立连接 HTTP长连接 持久连接 是指 客户端和服务端建立一次连接之后 可以在这条连接上进行多
  • 一文秒懂什么是DDoS攻击

    关注 开源Linux 选择 设为星标 回复 学习 有我为您特别筛选的学习资料 DDoS攻击是目前最常见的网络攻击方式之一 其见效快 成本低的特点 让DDoS这种攻击方式深受不法分子的喜爱 DDoS攻击经过十几年的发展 已经 进化 的越来越复
  • Centos7安装lvs——即安装lvs的管理软件ipvsadm

    1 验证当前linux是具备lvs功能 root nginx master ipvsadm 出现上面的错误提示 就证明当前虚拟机不具备实现lvs的功能 2 安装ipvsadm 因为lvs的具体实现是由这个程序来实现的 2 1 检查内核版本
  • Windows应急响应

    账户排查 账户排查主要包含以下几个维度 登录服务器的途径 弱口令 可疑账号 新增账号 隐藏账号 克隆账号 服务器是否存在被远程登录的途径 3389 smb 445 http ftp 数据库 中间件 弱口令排查维度与上述服务器登录一样 弱口令
  • cgi环境变量

    原文地址 http blog sina com cn s blog 65403f9b0100gpt2 html REOUEST METHOD 这个环境变量指出服务器与CGI程序之间的信息传递方式 一般包括两种 POST和GET 这个环境变量
  • 接口测试常用测试点

    接口测试是测试系统组件间接口的一种测试 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点 测试的重点是要检查数据的交换 传递和控制管理过程 以及系统间的相互逻辑依赖关系等 测试的策略 接口测试也是属于功能测试 所以跟我们
  • 如何在Android中以编程方式将HTML转换为PDF?

    在各种情况下 您可能需要将HTML页面转换为PDF格式 另一方面 您可能希望从WYSIWYG HTML编辑器的内容生成PDF 对于这种情况 本文介绍如何在Android应用程序中以编程方式将HTML转换为PDF 此外 还将了解用于自定义HT
  • 微信小程序_0

    微信小程序 0 基础库更新日志 开发者工具更新日志 微信云开发 小程序基础库更新日志 云开发部分 wx server sdk 更新日志 IDE 云开发 云控制台更新日志
  • 51单片机学习笔记(十) - AD/DA转换

    文章目录 一 AD DA基本介绍 二 A D D A转换中的主要概念 三 A D D A转换在系统中存在的方式 四 A D转换原理图及ET2046芯片介绍 1 原理图 2 ET2046芯片介绍 3 开发板接线 五 ET2046芯片SPI时序
  • SSH环境搭建,配置整合初步(一)

    1 新Web工程 并把编码设为utf 8 所有的都是uft8数据库也是 就不会乱码了 2 添加框架环境 Junit Struts2 Hibernate Spring 3 整合SSH Struts2与Spring整合 Hibernate与Sp
  • IDEA 指定消息模板(Class\Interface\Enum\Record\) 导致无法Class 提示Unable to parse template “Class“

    IDEA 为Class Interface Enum Record 设置消息模板 File Settings Editor File and Code Templates 消息模板内容 if PACKAGE NAME PACKAGE NAM
  • STM32 TIM预分频计数器

    预分频器 将送给TIM的输入时钟信号按照预分频器分频系数进行分频 然后再作为TIM的输入时钟 例 当输入频率为72M 周期则是0 0138s 输入时钟每增加0 0138s 计数器增加一次 2分频时 周期为0 027s 输入时钟每增加0 02
  • HTML介绍以及常用代码

    HTML 网页基础 html Hyper Text Markup Language 超文本标 记语言 发明者 Tim Berners lee html主要是定义网页内容和结构的 html是编 写网页的语言 html只能运行在浏览器上面 网页
  • 目标检测中如何定义正负样本,和正负样本在学习过程中loss计算起的作用

    如何定义正负样本 和正负样本在学习过程中loss计算起的作用 正负样本定义 分类和回归head如何学习和利用划分后的正负样本 loss如何计算 正负样本在分类中loss计算的处理 正样本在bbox 回归中的loss计算 在目标检测中 经常说
  • 攻防世界-Morse

    1 下载文件打开得到如下01代码 很明显可以看出是摩斯编码 2 使用摩斯编码解码 得到如下结果 3 根据题目提示我们可以得到flag为cyberpeace morsecodeissointeresting
  • angular4表单—模板式表单

    今天我们继续学习angular4表单的内容 表单是系统中都不可或缺的一部分 所以在angular中提供了表单模块 表单的内容分为以下几个部分 模板表单 模板表单的验证 响应式表单 响应式表单的验证 所以我们也是通过一个小的Demo来一步步完
  • 重做日志缓冲区优化

    2008 05 05skate 重做日志缓冲区优化 学习目标 监视和确定重做日志缓冲区的大小 1 重做日志缓冲区的内容 A 对于每个dml或ddl语句 oracle服务器进程都会用户内存空间的重做条目复制到重做日志缓冲区上 B 重做条目包含
  • 【Python】鲸鱼算法实现

    文章目录 鲸鱼算法 自编代码 结果 摘录代码 鲸鱼算法 自编代码 main py import numpy as np from numpy import random from copy import deepcopy from func