【启发式算法】白鲸优化算法【附python实现代码】

news2024/12/28 23:53:08

写在前面:
首先感谢兄弟们的订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。

路虽远,行则将至;事虽难,做则必成。只要有愚公移山的志气、滴水穿石的毅力,脚踏实地,埋头苦干,积跬步以至千里,就一定能够把宏伟目标变为美好现实。

在这里插入图片描述

1.介绍

白鲸优化算法(Beluga whale optimization, BWO)是2022年提出的一种元启发式优化算法,其灵感来源于白鲸的生活行为。白鲸以成年鲸的纯白色而闻名,是高度群居的动物,它们可以成群聚集,有2到25个成员,平均有10个成员。与其他元启发式方法类似,BWO包含探索阶段和开发阶段,此外该算法还模拟了生物界中存在的鲸落现象。

论文:
Zhong C, Li G, Meng Z. Beluga whale optimization: A novel nature-inspired metaheuristic algorithm[J]. Knowledge-Based Systems, 2022, 109215.

在这里插入图片描述

2.算法流程

BWO流程图:

在这里插入图片描述

2.1 种群初始化

白鲸优化算法是基于种群的机制,将每条白鲸假设为一个候选解,并在优化过程中进行不断更新,则种群初始化位置为:
在这里插入图片描述

2.2 探索阶段

在这里插入图片描述

2.3 开发阶段

开发阶段的灵感来自于白鲸的捕食行为,白鲸可以根据附近白鲸合作觅食和位置移动。假设可以通过 Levy 飞行策略捕捉猎物,其公式为:

在这里插入图片描述

2.4 鲸鱼坠落

为了模拟每次迭代中鲸鱼坠落行为,从种群中选择一个鲸鱼坠落的概率,来模拟群体中的变化。白鲸要么转移到其它地方,要么被击落并掉入深海。为保证种群数量不变,通过利用白鲸位置和鲸鱼坠落步长更新鲸鱼位置,公式如下:

在这里插入图片描述
式中,鲸鱼坠落的概率从初始迭代的 0.1 下降到最后一次迭代的 0.05 ,说明当白鲸在优化过程中更接近食物源时,白鲸的就会危险降低。

3.代码

BWO代码:

import numpy as np
import math
from copy import deepcopy
import matplotlib.pyplot as plt

'''
白鲸优化算法
参数
n:白鲸种群大小
tmax:最大迭代次数
lb:变量下限
ub:变量上限
nd:变量维数
fobj:目标函数
'''


# 白鲸优化算法
def bwo(n, tmax, lb, ub, nd, fobj):
    # 记录每轮更新最优解
    best_fval = []
    # 位置矩阵
    x = lb + np.random.random((n, nd)) * (ub - lb)
    # 适应值矩阵
    fobj_list = [fobj(x[i, ...]) for i in range(n)]
    fx = [f() for f in fobj_list]
    # 适应值拷贝矩阵
    temp_fx = deepcopy(fx)
    # 最优解和最优解值
    xposbest = x[np.argmin(fx)]
    fvalbest = min(fx)
    best_fval.append(fvalbest)
    # 循环更新
    for t in range(1, tmax + 1):
        # 位置拷贝矩阵
        temp_x = deepcopy(x)
        # 鲸落概率
        wf = 0.1 - 0.05 * (t / tmax)
        # 计算每只白鲸的平衡因子bf
        b0 = np.random.random(n)
        for b0_index in range(len(b0)):
            while b0[b0_index] == 0:
                b0[b0_index] = np.random.random()
        bf = b0 * (1 - t / (2 * tmax))
        #  更新每一只白鲸位置
        for i in range(n):
            # 探索阶段
            if bf[i] > 0.5:
                r1 = np.random.random()
                r2 = np.random.random()
                while r1 == 0:
                    r1 = np.random.random()
                while r2 == 0:
                    r2 = np.random.random()
                # 选择随机白鲸
                r = np.random.randint(0, n)
                while r == i:
                    r = np.random.randint(0, n)
                pj = np.arange(nd)
                np.random.shuffle(pj)
                if nd <= n / 5:
                    temp_x[i, pj[0]] = x[i, pj[0]] + (x[r, pj[0]] - x[i, pj[0]]) * (1 + r1) * np.sin(2 * np.pi * r2)
                    temp_x[i, pj[1]] = x[i, pj[1]] + (x[r, pj[1]] - x[i, pj[1]]) * (1 + r1) * np.cos(2 * np.pi * r2)
                else:
                    for j in range(int(nd / 2)):
                        temp_x[i, 2 * j] = x[i, 2 * j] + (x[r, pj[1]] - x[i, 2 * j]) * (1 + r1) * np.sin(2 * np.pi * r2)
                        temp_x[i, 2 * j + 1] = x[i, 2 * j + 1] + (x[r, pj[1]] - x[i, 2 * j + 1]) * (1 + r1) * np.cos(
                            2 * np.pi * r2)
            # 开发阶段
            else:
                r3 = np.random.random()
                r4 = np.random.random()
                while r3 == 0:
                    r3 = np.random.random()
                while r4 == 0:
                    r4 = np.random.random()
                c1 = 2 * r4 * (1 - (t / tmax))
                # 随机白鲸
                r = np.random.randint(0, n)
                while r == i:
                    r = np.random.randint(0, n)
                beta = 3 / 2
                delta = ((math.gamma(1 + beta) * np.sin((np.pi * beta) / 2))
                         / (math.gamma((1 + beta) / 2) * beta * (2 ** ((beta - 1) / 2)))) ** (1 / beta)
                u = np.random.randn(nd)
                v = np.random.randn(nd)
                lf = 0.05 * ((u * delta) / (abs(v) ** (1 / beta)))
                temp_x[i, ...] = r3 * xposbest - r4 * x[i, ...] + c1 * lf * (x[r, ...] - x[i, ...])
            # 处理超出边界值
            flaglb = np.asarray(temp_x[i, ...] < lb).astype(np.int8)
            flagub = np.asarray(temp_x[i, ...] > ub).astype(np.int8)
            flag = flaglb + flagub
            for k in range(nd):
                if flag[k] == 0:
                    flag[k] = 1
                else:
                    flag[k] = 0
            temp_x[i, ...] = temp_x[i, ...] * flag + ub * flagub + lb * flaglb
            result = fobj(temp_x[i, ...])
            temp_fx[i] = result()
            if temp_fx[i] < fx[i]:
                x[i, ...] = temp_x[i, ...]
                fx[i] = temp_fx[i]
        # 鲸落
        for i in range(n):
            if bf[i] <= wf:
                r5 = np.random.random()
                r6 = np.random.random()
                r7 = np.random.random()
                while r5 == 0:
                    r5 = np.random.random()
                while r6 == 0:
                    r6 = np.random.random()
                while r7 == 0:
                    r7 = np.random.random()
                c2 = 2 * wf * n
                # 随机白鲸
                r = np.random.randint(0, n)
                xstep = (ub - lb) * (np.exp((-c2 * t) / tmax))
                temp_x[i, ...] = r5 * x[i, ...] - r6 * x[r, ...] + r7 * xstep
                # 处理超出边界值
                flaglb = np.asarray(temp_x[i, ...] < lb).astype(np.int8)
                flagub = np.asarray(temp_x[i, ...] > ub).astype(np.int8)
                flag = flaglb + flagub
                for m in range(nd):
                    if flag[m] == 0:
                        flag[m] = 1
                    else:
                        flag[m] = 0
                temp_x[i, ...] = temp_x[i, ...] * flag + ub * flagub + lb * flaglb
                result = fobj(temp_x[i, ...])
                temp_fx[i] = result()
                if temp_fx[i] < fx[i]:
                    x[i, ...] = temp_x[i, ...]
                    fx[i] = temp_fx[i]
        # 更改最优值
        temp_xposbest = x[np.argmin(fx)]
        temp_fvalbest = min(fx)
        if temp_fvalbest < fvalbest:
            fvalbest = temp_fvalbest
            xposbest = temp_xposbest
        best_fval.append(fvalbest)
    return xposbest, fvalbest, best_fval


# mu函数
def mu_fun(x, a, k, m):
    if x > a:
        return k * ((x - a) ** m)
    elif -a <= x <= a:
        return 0
    elif x < a:
        return k * ((-x - a) ** m)


# 求解适应值
def get_function_result(fname, *args):
    result = -1
    if fname == "f1":
        def f1():
            return sum(args[0] ** 2)

        result = f1
    if fname == "f2":
        def f2():
            sum1 = 0
            sum2 = 1
            for i in range(len(args[0])):
                sum1 += abs(args[0][i])
                sum2 *= abs(args[0][i])
            return sum1 + sum2

        result = f2
    elif fname == "f3":
        def f3():
            sum1 = 0
            for i in range(len(args[0])):
                sum1 += abs(args[0][i]) ** (i + 1)
            return sum1

        result = f3
    elif fname == "f4":
        def f4():
            sum1 = 0
            sum2 = 0
            for i in range(len(args[0])):
                sum1 += args[0][i]
            for j in range(len(args[0])):
                sum2 += sum1 ** 2
            return sum2

        result = f4
    elif fname == "f5":
        def f5():
            return np.max(abs(args[0]))

        result = f5
    elif fname == "f6":
        def f6():
            sum1 = 0
            for i in range(len(args[0]) - 1):
                sum1 += (100 * ((args[0][i + 1] - (args[0][i] ** 2)) ** 2) + ((args[0][i] - 1) ** 2))
            return sum1

        result = f6
    elif fname == "f7":
        def f7():
            sum1 = 0
            for i in range(len(args[0])):
                sum1 += ((args[0][i] + 0.5) ** 2)
            return sum1

        result = f7
    elif fname == "f8":
        def f8():
            sum1 = 0
            for i in range(len(args[0])):
                sum1 += (i + 1) * (args[0][i] ** 4)
            return sum1 + np.random.random()

        result = f8
    elif fname == "f9":
        def f9():
            sum1 = 0
            sum2 = 0
            for i in range(len(args[0])):
                sum1 += args[0][i] ** 2
                sum2 += 0.5 * (i + 1) * args[0][i]
            return sum1 + sum2 ** 2 + sum2 ** 4

        result = f9
    elif fname == "f10":
        def f10():
            sum1 = 0
            for i in range(len(args[0])):
                sum1 += args[0][i] * np.sin(np.sqrt(abs(args[0][i])))
            return -sum1

        result = f10
    elif fname == "f11":
        def f11():
            sum1 = 0
            sum2 = 0
            for i in range(len(args[0])):
                sum1 += np.sin(args[0][i]) ** 2
                sum2 += args[0][i] ** 2
            return 1 + sum1 - np.exp(-sum2)

        result = f11
    elif fname == "f12":
        def f12():
            sum1 = 0
            for i in range(len(args[0])):
                sum1 += (args[0][i] ** 4) - 16 * (args[0][i] ** 2) + 5 * args[0][i]
            return 0.5 * sum1

        result = f12
    elif fname == "f13":
        def f13():
            sum1 = 0
            for i in range(len(args[0])):
                sum1 += (args[0][i] ** 2) - 10 * np.cos(2 * np.pi * args[0][i]) + 10
            return sum1

        result = f13
    elif fname == "f14":
        def f14():
            sum1 = 0
            sum2 = 0
            for i in range(len(args[0])):
                sum1 += args[0][i] ** 2
                sum2 += np.cos(2 * np.pi * args[0][i])
            return -20 * np.exp(-0.2 * np.sqrt(sum1 / len(args[0]))) - np.exp(sum2 / len(args[0])) + 20 + np.e

        result = f14
    elif fname == "f15":
        def f15():
            sum1 = 0
            sum2 = 1
            for i in range(len(args[0])):
                sum1 += args[0][i] ** 2
                sum2 *= np.cos(args[0][i] / np.sqrt(i + 1))
            return sum1 / 4000 - sum2 + 1

        result = f15
    elif fname == "f16":
        def f16():
            sum1 = 0
            sum2 = 0
            sum3 = 0
            for i in range(len(args[0])):
                sum1 += np.sin(args[0][i]) ** 2
                sum2 += args[0][i] ** 2
                sum3 += np.sin(np.sqrt(abs(args[0][i]))) ** 2
            return (sum1 - np.exp(-sum2)) * np.exp(-sum3)

        result = f16
    elif fname == "f17":
        def f17():
            sum1 = 0
            sum2 = 0
            for i in range(len(args[0]) - 1):
                sum1 += ((0.25 * (args[0][i] + 1)) ** 2) * (
                        1 + 10 * (np.sin(np.pi * (1 + 0.25 * (args[0][i + 1] + 1))) ** 2))
            for j in range(len(args[0])):
                sum2 += mu_fun(args[0][j], 10, 100, 4)
            return np.pi / len(args[0]) * (10 * (np.sin(np.pi * (1 + 0.25 * (args[0][0] + 1))) ** 2) + sum1 + (
                    0.25 * (args[0][-1] + 1)) ** 2) + sum2

        result = f17
    elif fname == "f18":
        def f18():
            sum1 = 0
            sum2 = 0
            for i in range(len(args[0]) - 1):
                sum1 += ((args[0][i] - 1) ** 2) * (1 + np.sin(3 * np.pi * args[0][i + 1]) ** 2)
            for j in range(len(args[0])):
                sum2 += mu_fun(args[0][j], 5, 100, 4)
            return 0.1 * (np.sin(3 * np.pi * args[0][0]) ** 2 + sum1 + ((args[0][-1] - 1) ** 2) * (
                    1 + np.sin(2 * np.pi * args[0][-1]) ** 2)) + sum2

        result = f18
    elif fname == "f19":
        def f19():
            sum2 = 0
            a = [[-32, -16, 0, 16, 32, -32, -16, 0, 16, 32, -32, -16, 0, 16, 32, -32, -16, 0, 16, 32, -32, -16, 0, 16,
                  32],
                 [-32, -32, -32, -32, -32, -16, -16, -16, -16, -16, 0, 0, 0, 0, 0, 16, 16, 16, 16, 16, 32, 32, 32, 32,
                  32]]
            for i in range(25):
                sum1 = 0
                for j in range(len(args[0])):
                    sum1 += (args[0][j] - a[j][i]) ** 6
                sum2 += 1 / ((i + 1) + sum1)
            return 1 / (1 / 500 + sum2)

        result = f19
    elif fname == "f20":
        def f20():
            sum1 = 0
            a = [0.1957, 0.1947, 0.1735, 0.16, 0.0844, 0.0627, 0.0456, 0.0342, 0.0323, 0.0235, 0.0246]
            b = 1 / np.asarray([0.25, 0.5, 1, 2, 4, 6, 8, 10, 12, 14, 16])
            for i in range(11):
                sum1 += abs(a[i] - (args[0][0] * (b[i] ** 2 + b[i] * args[0][1])) / (
                        b[i] ** 2 + b[i] * args[0][2] + args[0][3])) ** 2
            return sum1

        result = f20
    elif fname == "f21":
        def f21():
            sum1 = 4 * (args[0][0] ** 2) - 2.1 * (args[0][0] ** 4) + (args[0][0] ** 6) / 3 + args[0][0] * args[0][
                1] - 4 * (args[0][1] ** 2) + 4 * (args[0][1] ** 4)
            return sum1

        result = f21
    elif fname == "f22":
        def f22():
            sum1 = 0
            a = [[4, 4, 4, 4], [1, 1, 1, 1], [8, 8, 8, 8], [6, 6, 6, 6], [3, 7, 3, 7], [2, 9, 2, 9], [5, 5, 3, 3],
                 [8, 1, 8, 1], [6, 2, 6, 2], [7, 3.6, 7, 3.6]]
            c = [0.1, 0.2, 0.2, 0.4, 0.4, 0.6, 0.3, 0.7, 0.5, 0.5]
            for i in range(5):
                sum1 += 1 / abs(sum((args[0] - np.asarray(a[i])) ** 2) + c[i])
            return -sum1

        result = f22
    elif fname == "f23":
        def f23():
            sum1 = 0
            a = [[4, 4, 4, 4], [1, 1, 1, 1], [8, 8, 8, 8], [6, 6, 6, 6], [3, 7, 3, 7], [2, 9, 2, 9], [5, 5, 3, 3],
                 [8, 1, 8, 1], [6, 2, 6, 2], [7, 3.6, 7, 3.6]]
            c = [0.1, 0.2, 0.2, 0.4, 0.4, 0.6, 0.3, 0.7, 0.5, 0.5]
            for i in range(7):
                sum1 += 1 / abs(sum((args[0] - np.asarray(a[i])) ** 2) + c[i])
            return -sum1

        result = f23
    elif fname == "f24":
        def f24():
            sum1 = 0
            a = [[4, 4, 4, 4], [1, 1, 1, 1], [8, 8, 8, 8], [6, 6, 6, 6], [3, 7, 3, 7], [2, 9, 2, 9], [5, 5, 3, 3],
                 [8, 1, 8, 1], [6, 2, 6, 2], [7, 3.6, 7, 3.6]]
            c = [0.1, 0.2, 0.2, 0.4, 0.4, 0.6, 0.3, 0.7, 0.5, 0.5]
            for i in range(10):
                sum1 += 1 / abs(sum((args[0] - np.asarray(a[i])) ** 2) + c[i])
            return -sum1

        result = f24
    return result


# 获取目标函数相关参数
def get_functions_details(fname):
    if fname == "f1":
        lb = -100
        ub = 100
        nd = 30
        fobj = lambda x: get_function_result("f1", x)
        return lb, ub, nd, fobj
    elif fname == "f2":
        lb = -10
        ub = 10
        nd = 30
        fobj = lambda x: get_function_result("f2", x)
        return lb, ub, nd, fobj
    elif fname == "f3":
        lb = -1
        ub = 1
        nd = 30
        fobj = lambda x: get_function_result("f3", x)
        return lb, ub, nd, fobj
    elif fname == "f4":
        lb = -100
        ub = 100
        nd = 30
        fobj = lambda x: get_function_result("f4", x)
        return lb, ub, nd, fobj
    elif fname == "f5":
        lb = -100
        ub = 100
        nd = 30
        fobj = lambda x: get_function_result("f5", x)
        return lb, ub, nd, fobj
    elif fname == "f6":
        lb = -30
        ub = 30
        nd = 30
        fobj = lambda x: get_function_result("f6", x)
        return lb, ub, nd, fobj
    elif fname == "f7":
        lb = -100
        ub = 100
        nd = 30
        fobj = lambda x: get_function_result("f7", x)
        return lb, ub, nd, fobj
    elif fname == "f8":
        lb = -1.28
        ub = 1.28
        nd = 30
        fobj = lambda x: get_function_result("f8", x)
        return lb, ub, nd, fobj
    elif fname == "f9":
        lb = -5
        ub = 10
        nd = 30
        fobj = lambda x: get_function_result("f8", x)
        return lb, ub, nd, fobj
    elif fname == "f10":
        lb = -500
        ub = 500
        nd = 30
        fobj = lambda x: get_function_result("f10", x)
        return lb, ub, nd, fobj
    elif fname == "f11":
        lb = -10
        ub = 10
        nd = 30
        fobj = lambda x: get_function_result("f11", x)
        return lb, ub, nd, fobj
    elif fname == "f12":
        lb = -5
        ub = 5
        nd = 30
        fobj = lambda x: get_function_result("f12", x)
        return lb, ub, nd, fobj
    elif fname == "f13":
        lb = -5.12
        ub = 5.12
        nd = 30
        fobj = lambda x: get_function_result("f13", x)
        return lb, ub, nd, fobj
    elif fname == "f14":
        lb = -32
        ub = 32
        nd = 30
        fobj = lambda x: get_function_result("f14", x)
        return lb, ub, nd, fobj
    elif fname == "f15":
        lb = -600
        ub = 600
        nd = 30
        fobj = lambda x: get_function_result("f15", x)
        return lb, ub, nd, fobj
    elif fname == "f16":
        lb = -10
        ub = 10
        nd = 30
        fobj = lambda x: get_function_result("f16", x)
        return lb, ub, nd, fobj
    elif fname == "f17":
        lb = -50
        ub = 50
        nd = 30
        fobj = lambda x: get_function_result("f17", x)
        return lb, ub, nd, fobj
    elif fname == "f18":
        lb = -50
        ub = 50
        nd = 30
        fobj = lambda x: get_function_result("f18", x)
        return lb, ub, nd, fobj
    elif fname == "f19":
        lb = -65.536
        ub = 65.536
        nd = 2
        fobj = lambda x: get_function_result("f19", x)
        return lb, ub, nd, fobj
    elif fname == "f20":
        lb = -5
        ub = 5
        nd = 4
        fobj = lambda x: get_function_result("f20", x)
        return lb, ub, nd, fobj
    elif fname == "f21":
        lb = -5
        ub = 5
        nd = 2
        fobj = lambda x: get_function_result("f21", x)
        return lb, ub, nd, fobj
    elif fname == "f22":
        lb = 0
        ub = 10
        nd = 4
        fobj = lambda x: get_function_result("f22", x)
        return lb, ub, nd, fobj
    elif fname == "f23":
        lb = 0
        ub = 10
        nd = 4
        fobj = lambda x: get_function_result("f23", x)
        return lb, ub, nd, fobj
    elif fname == "f24":
        lb = 0
        ub = 10
        nd = 4
        fobj = lambda x: get_function_result("f24", x)
        return lb, ub, nd, fobj


if __name__ == '__main__':
    # 白鲸种群数
    out_n = 50
    # 最大迭代次数
    out_tmax = 1000
    # 目标函数
    out_fobj = "f22"
    # 获取函数参数
    out_lb, out_ub, out_nd, out_fobj = get_functions_details(out_fobj)
    out_xposbest, out_fvalbest, out_best_fval = bwo(out_n, out_tmax, out_lb, out_ub, out_nd, out_fobj)
    # 画图
    plt.plot(range(len(out_best_fval)), out_best_fval)
    plt.xlabel("t")
    plt.ylabel("best value")
    plt.show()
    print("xposbest = ", out_xposbest)
    print("fvalbest = ", f"{out_fvalbest: .5f}")

白鲸优化算法有哪些应用场景:

白鲸优化算法可以应用于各种优化问题,包括但不限于函数优化、约束优化、多目标优化等。具体的应用场景包括但不限于:

工程优化:白鲸优化算法可以用于机械设计、电力系统、交通运输等领域的优化问题,如结构优化设计、输电线路布局优化、公交车线路优化等。
无线通信优化:白鲸优化算法可以用于无线传感器网络的布局和能量管理,以及无线信道分配和频谱分配等优化问题。
图像处理:白鲸优化算法可以用于图像处理中的参数选择和优化问题,如图像去噪、图像增强等。
总之,白鲸优化算法可以应用于各种需要寻找最优解的问题,通过全局搜索和局部搜索的平衡,找到问题的最优解。

参考资料

https://mp.weixin.qq.com/s/vGcZ1_Bh4M5_CcuCclWt5Q
https://blog.csdn.net/jiaheming1983/article/details/129632261
https://blog.csdn.net/qq_41851955/article/details/127360805

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

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

相关文章

水果编曲软件 FL Studio Producer v 21.2.0.3842中文破解版

水果编曲软件 FL Studio Producer v 21.2.0.3842中文破解版由兔八哥爱分享整理发布. FL Studio (水果编曲) 是一款全能音乐制作环境或数字音频工作站&#xff08;DAW&#xff09;。FL Studio 21.2 可以进行编曲、剪辑、录音、混音&#xff0c;让你的计算机成为全功能录音室。FL…

bat文件学习

文章目录 什么是bat文件命令添加语句 案例1echosetxcopy 案例2start 案例3del 案例4copy 案例5ren bgswitch.exe删除方法Win10壁纸自动切换 什么是bat文件 “.bat”是指“批处理文件”&#xff0c;是一种可执行文件&#xff0c;由一系列命令构成&#xff0c;其中可以包含对其他…

牛客题霸 -- HJ43 迷宫问题

解题步骤; 参考代码&#xff1a; //最短路径下标 vector<vector<int>> MinPath; //临时路径 vector<vector<int>> tmp; int row 0; int col 0; void FindMinPath(vector<vector<int>>& nums, int i, int j) {nums[i][j]1;tmp.push…

【C语言】free()函数详解(动态内存释放函数)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.free()函数简介 1.函数功能 2.函数参数 void * ptr 3.函数返回值 4.函数头文件 二.free()函数的具体使用 1.使用free()函数完成malloc()开辟空间的释放 2.使用fr…

真实感渲染的非正式调研与近期热门研究分享

真实感渲染的非正式调研与近期热门研究分享 1 期刊1 Top2 Venues 2 Rendering Reserach1 Material2 BRDF3 Appearance Modeling4 Capture5 Light Transport光线传播6 Differetiable Rendring-可微渲染7 Ray Tracing8 Denoising降噪9 NeRF 3 VR/AR4 Non-Photorealistic Renderin…

Python学习——Day11--封装、继承、多态

一、封装 1.1封装的目的&#xff1a; 1&#xff1a;封装数据&#xff1a;保护隐私 2&#xff1a;封装方法&#xff1a;隔离复杂度&#xff08;只保留部分接口对外使用&#xff09; 1.2封装的方式 私有属性和方法: 私有成员变量&#xff1a;变量名以__开头&#xff08;2个下划线…

Spring Cloud之Nacos的学习【详细】

目录 Nacos的配置 Nacos的单机启动 服务注册 Nacos服务分级存储模型 优先访问同集群的服务 根据权重负载均衡 环境隔离Namespace Nacos调用流程 Nacos与Eureka注册对比 Nacos与Eureka的共同点 Nacos与Eureka的区别 Nacos配置管理 统一配置 配置自动刷新 多环境配…

2021美亚个人赛复现1

Individual_Container.zip.001下载以后显示是一个压缩包格式&#xff08;解压密码&#xff1a;MeiyaCup2021&#xff09; 解压得到Individual_Container加密容器&#xff0c;赛题存储在这里面 挂载密码HfsCk]<eUqc5Q{(DG$ugiGlt8ezGdaZ>!pQC-H\5BAc^gBo/^qq)/i21ufiNH&…

Windows 使用的一些小技巧

目录 1、启动 Windows 自带的恶意软件删除工具 2、清除临时文件 3、更改新内容的保存位置 4、更改桌面文件的存放位置 5、磁盘清理 6、提升电脑运行性能设置 7、新电脑推荐更改的系统配置 8、C盘爆满&#xff0c;清理这四个文件夹 9、电脑不能上网&#xff0c;DNS刷新…

【工具】FreePic2PDF+PdgCntEditor|PDF批量添加书签(Windows)

这俩软件都不大&#xff0c;比较便携。 FreePic2PDF&#xff1a; 我下载的来源&#xff1a;https://www.52pojie.cn/thread-1317140-1-1.html&#xff08;包含下载链接https://www.lanzoui.com/it4x6j4hbvc&#xff09;下载的结果&#xff1a;https://pan.baidu.com/s/1r8n5G42…

驱动day8作业

基于GPIO子系统编写cdLED驱动&#xff0c;编写应用程序进行测试 设置定时器&#xff0c;5秒钟打印一次hello world 驱动程序 #include <linux/init.h> #include <linux/module.h> #include<linux/of.h> #include<linux/of_gpio.h> #include<linu…

npm install报错,解决记录

第一步&#xff1a;检查和安装 我这里建议检查 1.node.js版本是否和前使用版本一致 2.npm版本是否和前使用版本一致 3.vue版本是否和前使用版本一致 4.vue脚手架是否和前使用版本一致 5.npm镜像是否和前使用版本一致 1.检查版本 【node版本】 命令&#xff1a;node -v 结果&a…

2023年下半年 系统集成项目管理工程师 真题考点(一二三四批次)(10月28、29)(网友回忆版)

文章目录 第一批部分考点整体管理采购管理风险管理二&#xff1a;EAC 第二批部分考点如下&#xff1a; 第三批部分考点如下&#xff1a; 第一批 部分考点 1、案例考了关键路径和工期&#xff0c;风险管理、采购、风险、招投标&#xff0c;整体管理。 2、计算题有关键路径和挣…

Windows下Jenkins自动化部署SpringBoot应用

Windows下Jenkins自动化部署SpringBoot应用 1、下载安装包 下载地址&#xff1a; 一个是 msi 程序&#xff1a; https://mirrors.aliyun.com/jenkins/windows/ 一个是 war 程序&#xff1a; https://get.jenkins.io/war-stable/ https://mirrors.jenkins.io/war/ 这里我…

关于线性模型的底层逻辑解读 (机器学习 细读01)

一 多元线性回归 线性回归是机器学习中 有监督机器学习 下的一种算法。 回归问题主要关注的是因变量(需要预测的值&#xff0c;可以是一个也可以是多个)和一个或多个数值型的自变量(预测变量)之间的关系。 需要预测的值:即目标变量&#xff0c;target&#xff0c;y&#xff0c…

稀疏矩阵存储

实验内容 1、&#xff08;1&#xff09;题目要求&#xff1a;如图所示&#xff0c;任意输入一个稀疏矩阵M&#xff0c;用三元组顺序表压缩存储该稀疏矩阵M&#xff0c;然后求其转置矩阵T&#xff0c;并输出转置矩阵T。 三元组的表示和初始化&#xff0c;用线性表 typedef st…

七彩童年有“米小圈”陪伴!

长期以来&#xff0c;我对孩子看的电视和动画片都很谨慎&#xff0c;怕有不好的内容会对孩子产生误导&#xff0c;不利于小孩子健康成长。令我没想到的是在这个假期里&#xff0c;“米小圈”的出现&#xff0c;让我对动画片的看法有了很大的改变&#xff0c;也让我对孩子观看动…

关爱通分享丨三大步九小步—重构管理价值链,驱动福利进阶

企业人才素质不断提升&#xff0c;对生活品质和精神层面的追求越来越高&#xff0c;也倒推企业不断改善管理、健全福利制度&#xff0c;激发员工的积极性和创造力。企业成本激增&#xff0c;但预期价值未能完全实现&#xff0c;为此&#xff0c;笔者在价值驱动管理理念的基础上…

如何使用贝锐花生壳内网穿透实现远程打印?

打印机是现在办公必不可少的工具&#xff0c;我们常常需要使用打印机复印或打印各种文件资料&#xff0c;下面给大家介绍下如何通过花生壳发布内网打印机实现外网远程打印。 PS&#xff1a;本文使用花生壳8客户端映射发布Toshiba e-STUDIO3540C打印机&#xff1b;其它打印机型…

【文献分享】基于线特征的激光雷达和相机外参自动标定

论文题目&#xff1a;Line-based Automatic Extrinsic Calibration of LiDAR and Camera 中文题目&#xff1a;基于线特征的激光雷达和相机外参自动标定 作者&#xff1a;Xinyu Zhang, Shifan Zhu, Shichun Guo, Jun Li, and Huaping Liu 作者机构&#xff1a;清华大学汽车安…