【算法】粒子群优化

news2024/11/15 12:11:09

一、引言

        粒子群优化算法(Particle Swarm Optimization, PSO)是一种基于群体智能的优化技术,由Eberhart和Kennedy在1995年提出。它模拟鸟群觅食行为,通过个体与群体的协作来寻找最优解。通过模拟一群粒子的运动来寻找最优解。每个粒子代表一个可能的解,并且根据自身经验和群体经验来更新位置。

二、算法原理

        PSO算法中,每个解被视为搜索空间中的一个“粒子”,每个粒子代表了问题的潜在解,并具有相应的位置和速度。粒子在搜索空间中飞行,通过跟踪两个“极值”来更新自己的位置和速度:

  • 个体极值:粒子自身所找到的最优解。
  • 全局极值:整个粒子群中所有粒子所找到的最优解。

        粒子的位置和速度根据个体极值和全局极值进行更新。

三、数据结构

PSO算法涉及的主要数据结构包括:

  • 粒子(Particle)

    • position: 当前粒子的位置
    • velocity: 当前粒子的速度
    • best_position: 粒子的历史最佳位置
    • best_value: 粒子的最佳适应度值
  • 群体(Swarm)

    • particles: 存储所有粒子的列表
    • global_best_position: 全局最佳位置
    • global_best_value: 全局最佳适应度值
  • 目标函数:粒子优化的目标函数,用于评估解的质量。

四、算法使用场景

PSO算法适用于:

  • 函数优化:连续空间的全局优化问题、寻找函数的最小值或最大值
  • 神经网络训练:作为权重调整的优化算法。

  • 模式识别:特征选择和参数优化。
  • 机器学习参数优化:在训练机器学习模型时,PSO可以用于优化模型参数。
  • 组合优化问题:如旅行商问题(TSP)、排程问题等。
  • 工程设计问题:如结构优化、电路设计等。
  • 路径规划:在机器人和无人机的路径规划中寻找最优路径。
  • 图像处理:图像分割和特征选择等。

五、算法实现

伪代码如下:

function PSO(numParticles, numIterations):
Initialize particles and global best
For each iteration:
For each particle:
Update velocity
Update position
Evaluate the fitness function
Update personal and global bests

六、其他同类算法对比

  • 遗传算法(Genetic Algorithm, GA):基于自然选择和遗传机制的搜索算法。
  • 模拟退火(Simulated Annealing, SA):基于物理退火过程的优化方法。
  • 蚁群算法(Ant Colony Optimization, ACO):模拟蚂蚁觅食行为的启发式搜索算法。

七、多语言代码实现

    Java

import java.util.Random;

class Particle {
    double[] position;
    double[] velocity;
    double[] bestPosition;
    double bestValue;

    public Particle(int dimensions, double lowerBound, double upperBound) {
        position = new double[dimensions];
        velocity = new double[dimensions];
        bestPosition = new double[dimensions];
        Random rand = new Random();

        for (int i = 0; i < dimensions; i++) {
            position[i] = lowerBound + (upperBound - lowerBound) * rand.nextDouble();
            velocity[i] = (rand.nextDouble() - 0.5) * 2; // Random velocity
        }
        bestPosition = position.clone();
        bestValue = Double.POSITIVE_INFINITY;
    }
}

class PSO {
    private Particle[] particles;
    private double[] globalBestPosition;
    private double globalBestValue;
    private int dimensions;
    private double lowerBound;
    private double upperBound;
    private int maxIter;

    public PSO(int numParticles, int dimensions, double lowerBound, double upperBound, int maxIter) {
        this.dimensions = dimensions;
        this.lowerBound = lowerBound;
        this.upperBound = upperBound;
        this.maxIter = maxIter;
        particles = new Particle[numParticles];
        globalBestPosition = new double[dimensions];
        globalBestValue = Double.POSITIVE_INFINITY;

        for (int i = 0; i < numParticles; i++) {
            particles[i] = new Particle(dimensions, lowerBound, upperBound);
        }
    }

    public void optimize() {
        Random rand = new Random();
        for (int iter = 0; iter < maxIter; iter++) {
            for (Particle particle : particles) {
                double value = objectiveFunction(particle.position);

                if (value < particle.bestValue) {
                    particle.bestValue = value;
                    particle.bestPosition = particle.position.clone();
                }

                if (value < globalBestValue) {
                    globalBestValue = value;
                    globalBestPosition = particle.position.clone();
                }
            }

            for (Particle particle : particles) {
                double inertia = 0.5;
                double cognitive = 1.5 * rand.nextDouble() * (particle.bestPosition[0] - particle.position[0]);
                double social = 1.5 * rand.nextDouble() * (globalBestPosition[0] - particle.position[0]);
                for (int i = 0; i < dimensions; i++) {
                    particle.velocity[i] = inertia * particle.velocity[i] + cognitive + social;
                    particle.position[i] += particle.velocity[i];
                    // Bound check
                    if (particle.position[i] < lowerBound) particle.position[i] = lowerBound;
                    if (particle.position[i] > upperBound) particle.position[i] = upperBound;
                }
            }
        }
    }

    private double objectiveFunction(double[] position) {
        double sum = 0;
        for (double v : position) {
            sum += v * v; // Example: sum of squares
        }
        return sum;
    }

    public double[] getGlobalBestPosition() {
        return globalBestPosition;
    }

    public double getGlobalBestValue() {
        return globalBestValue;
    }

    public static void main(String[] args) {
        PSO pso = new PSO(30, 2, -10, 10, 100);
        pso.optimize();
        System.out.println("Best Position: " + Arrays.toString(pso.getGlobalBestPosition()));
        System.out.println("Best Value: " + pso.getGlobalBestValue());
    }
}

C++

#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <limits>
#include <cmath>

class Particle {
public:
    std::vector<double> position;
    std::vector<double> velocity;
    std::vector<double> bestPosition;
    double bestValue;

    Particle(int dimensions, double lowerBound, double upperBound) {
        position.resize(dimensions);
        velocity.resize(dimensions);
        bestPosition.resize(dimensions);
        for (int i = 0; i < dimensions; ++i) {
            position[i] = lowerBound + static_cast<double>(rand()) / RAND_MAX * (upperBound - lowerBound);
            velocity[i] = (static_cast<double>(rand()) / RAND_MAX - 0.5) * 2; // Random velocity
        }
        bestPosition = position;
        bestValue = std::numeric_limits<double>::infinity();
    }
};

class PSO {
private:
    std::vector<Particle> particles;
    std::vector<double> globalBestPosition;
    double globalBestValue;
    int dimensions;
    double lowerBound;
    double upperBound;
    int maxIter;

public:
    PSO(int numParticles, int dimensions, double lowerBound, double upperBound, int maxIter)
        : dimensions(dimensions), lowerBound(lowerBound), upperBound(upperBound), maxIter(maxIter) {
        particles.reserve(numParticles);
        globalBestValue = std::numeric_limits<double>::infinity();
        for (int i = 0; i < numParticles; ++i) {
            particles.emplace_back(dimensions, lowerBound, upperBound);
        }
    }

    void optimize() {
        for (int iter = 0; iter < maxIter; ++iter) {
            for (auto& particle : particles) {
                double value = objectiveFunction(particle.position);

                if (value < particle.bestValue) {
                    particle.bestValue = value;
                    particle.bestPosition = particle.position;
                }

                if (value < globalBestValue) {
                    globalBestValue = value;
                    globalBestPosition = particle.position;
                }
            }

            for (auto& particle : particles) {
                double inertia = 0.5;
                double cognitive = 1.5 * static_cast<double>(rand()) / RAND_MAX * (particle.bestPosition[0] - particle.position[0]);
                double social = 1.5 * static_cast<double>(rand()) / RAND_MAX * (globalBestPosition[0] - particle.position[0]);
                for (int i = 0; i < dimensions; ++i) {
                    particle.velocity[i] = inertia * particle.velocity[i] + cognitive + social;
                    particle.position[i] += particle.velocity[i];
                    // Bound check
                    if (particle.position[i] < lowerBound) particle.position[i] = lowerBound;
                    if (particle.position[i] > upperBound) particle.position[i] = upperBound;
                }
            }
        }
    }

    double objectiveFunction(const std::vector<double>& position) {
        double sum = 0;
        for (double v : position) {
            sum += v * v; // Example: sum of squares
        }
        return sum;
    }

    const std::vector<double>& getGlobalBestPosition() const {
        return globalBestPosition;
    }

    double getGlobalBestValue() const {
        return globalBestValue;
    }
};

int main() {
    srand(static_cast<unsigned>(time(0)));
    PSO pso(30, 2, -10, 10, 100);
    pso.optimize();
    const auto& bestPosition = pso.getGlobalBestPosition();
    std::cout << "Best Position: ";
    for (const auto& pos : bestPosition) {
        std::cout << pos << " ";
    }
    std::cout << "\nBest Value: " << pso.getGlobalBestValue() << std::endl;
    return 0;
}

Python

import numpy as np

class Particle:
    def __init__(self, bounds):
        self.position = np.random.uniform(bounds[0], bounds[1], size=(len(bounds)//2,))
        self.velocity = np.random.uniform(-1, 1, size=(len(bounds)//2,))
        self.best_position = self.position.copy()
        self.best_value = float('inf')

class PSO:
    def __init__(self, func, bounds, num_particles, max_iter):
        self.func = func
        self.bounds = bounds
        self.num_particles = num_particles
        self.max_iter = max_iter
        self.particles = [Particle(bounds) for _ in range(num_particles)]
        self.global_best_position = None
        self.global_best_value = float('inf')

    def optimize(self):
        for _ in range(self.max_iter):
            for particle in self.particles:
                value = self.func(particle.position)
                
                if value < particle.best_value:
                    particle.best_value = value
                    particle.best_position = particle.position.copy()
                
                if value < self.global_best_value:
                    self.global_best_value = value
                    self.global_best_position = particle.position.copy()

            for particle in self.particles:
                r1, r2 = np.random.rand(2)
                inertia = 0.5
                cognitive = 1.5 * r1 * (particle.best_position - particle.position)
                social = 1.5 * r2 * (self.global_best_position - particle.position)
                particle.velocity = inertia * particle.velocity + cognitive + social
                particle.position += particle.velocity
                
                # Bound check
                particle.position = np.clip(particle.position, self.bounds[0], self.bounds[1])

        return self.global_best_position, self.global_best_value

# Example usage
def objective_function(x):
    return sum(x**2)

bounds = [-10, 10]
pso = PSO(objective_function, bounds, num_particles=30, max_iter=100)
best_position, best_value = pso.optimize()
print(f"Best Position: {best_position}, Best Value: {best_value}")

 Go

package main

import (
    "fmt"
    "math/rand"
    "time"
)

type Particle struct {
    position     []float64
    velocity     []float64
    bestPosition []float64
    bestValue    float64
}

type PSO struct {
    particles          []Particle
    globalBestPosition []float64
    globalBestValue    float64
    dimensions         int
    lowerBound         float64
    upperBound         float64
    maxIter            int
}

func NewParticle(dimensions, lowerBound, upperBound float64) Particle {
    position := make([]float64, dimensions)
    velocity := make([]float64, dimensions)
    bestPosition := make([]float64, dimensions)

    for i := 0; i < int(dimensions); i++ {
        position[i] = lowerBound + rand.Float64()*(upperBound-lowerBound)
        velocity[i] = (rand.Float64() - 0.5) * 2 // Random velocity
    }
    copy(bestPosition, position)
    return Particle{position, velocity, bestPosition, 1e10}
}

func NewPSO(numParticles, dimensions int, lowerBound, upperBound float64, maxIter int) *PSO {
    particles := make([]Particle, numParticles)
    for i := 0; i < numParticles; i++ {
        particles[i] = NewParticle(float64(dimensions), lowerBound, upperBound)
    }
    return &PSO{particles, nil, 1e10, dimensions, lowerBound, upperBound, maxIter}
}

func (pso *PSO) objectiveFunction(position []float64) float64 {
    sum := 0.0
    for _, v := range position {
        sum += v * v // Example: sum of squares
    }
    return sum
}

func (pso *PSO) Optimize() {
    for iter := 0; iter < pso.maxIter; iter++ {
        for i := range pso.particles {
            particle := &pso.particles[i]
            value := pso.objectiveFunction(particle.position)

            if value < particle.bestValue {
                particle.bestValue = value
                particle.bestPosition = make([]float64, len(particle.position))
                copy(particle.bestPosition, particle.position)
            }

            if value < pso.globalBestValue {
                pso.globalBestValue = value
                pso.globalBestPosition = make([]float64, len(particle.position))
                copy(pso.globalBestPosition, particle.position)
            }
        }

        for i := range pso.particles {
            particle := &pso.particles[i]
            inertia := 0.5
            cognitive := 1.5 * rand.Float64() * (particle.bestPosition[0] - particle.position[0])
            social := 1.5 * rand.Float64() * (pso.globalBestPosition[0] - particle.position[0])

            for j := 0; j < pso.dimensions; j++ {
                particle.velocity[j] = inertia*particle.velocity[j] + cognitive + social
                particle.position[j] += particle.velocity[j]
                // Bound check
                if particle.position[j] < pso.lowerBound {
                    particle.position[j] = pso.lowerBound
                }
                if particle.position[j] > pso.upperBound {
                    particle.position[j] = pso.upperBound
                }
            }
        }
    }
}

func main() {
    rand.Seed(time.Now().UnixNano())
    pso := NewPSO(30, 2, -10, 10, 100)
    pso.Optimize()
    fmt.Printf("Best Position: %v\n", pso.globalBestPosition)
    fmt.Printf("Best Value: %v\n", pso.globalBestValue)
}

八、实际服务应用场景与代码框架

        实现一个供应链优化系统,使用粒子群优化算法来确定最优的货物分配策略。

系统架构

        问题定义:定义货物分配的优化目标和约束条件。

        粒子初始化:初始化粒子群,每个粒子代表一种可能的货物分配方案。

        评估与更新:评估每个粒子的适应度,并根据PSO算法更新粒子的位置和速度。

        最优解获取:经过多次迭代后,获取最优的货物分配方案。

代码框架

以下是使用Python实现的供应链优化系统的代码框架:

class SupplyChainOptimizer:
    def __init__(self, num_particles, dimensions, lower_bound, upper_bound):
        self.pso = PSO(num_particles, dimensions, lower_bound, upper_bound)

    def evaluate_fitness(self, particle):
        # 评估货物分配方案的适应度
        pass

    def optimize(self, iterations):
        for _ in range(iterations):
            self.pso.update_velocity_position()
            self.pso.evaluate()

    def get_best_solution(self):
        # 获取最优解
        pass

# 使用示例
optimizer = SupplyChainOptimizer(num_particles=30, dimensions=5, lower_bound=-10, upper_bound=10)
optimizer.optimize(100)
best_solution = optimizer.get_best_solution()
print(f"Best solution: {best_solution}")

   数据准备

import numpy as np
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score

# Load dataset
data = load_iris()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

定义目标函数

def objective_function(params):
    C, gamma = params
    model = SVC(C=C, gamma=gamma)
    model.fit(X_train, y_train)
    predictions = model.predict(X_test)
    return -accuracy_score(y_test, predictions)  # Minimize negative accuracy

粒子群优化实现

class Particle:
    def __init__(self, bounds):
        self.position = np.random.uniform(bounds[0], bounds[1], size=(len(bounds)//2,))
        self.velocity = np.random.uniform(-1, 1, size=(len(bounds)//2,))
        self.best_position = self.position.copy()
        self.best_value = float('inf')

class PSO:
    def __init__(self, func, bounds, num_particles, max_iter):
        self.func = func
        self.bounds = bounds
        self.num_particles = num_particles
        self.max_iter = max_iter
        self.particles = [Particle(bounds) for _ in range(num_particles)]
        self.global_best_position = None
        self.global_best_value = float('inf')

    def optimize(self):
        for _ in range(self.max_iter):
            for particle in self.particles:
                value = self.func(particle.position)
                
                if value < particle.best_value:
                    particle.best_value = value
                    particle.best_position = particle.position.copy()
                
                if value < self.global_best_value:
                    self.global_best_value = value
                    self.global_best_position = particle.position.copy()

            for particle in self.particles:
                r1, r2 = np.random.rand(2)
                inertia = 0.5
                cognitive = 1.5 * r1 * (particle.best_position - particle.position)
                social = 1.5 * r2 * (self.global_best_position - particle.position)
                particle.velocity = inertia * particle.velocity + cognitive + social
                particle.position += particle.velocity
                
                # Bound check
                particle.position = np.clip(particle.position, self.bounds[0], self.bounds[1])

        return self.global_best_position, self.global_best_value

 执行优化

bounds = [[0.1, 100], [0.0001, 1]]  # C and gamma bounds
pso = PSO(objective_function, bounds, num_particles=30, max_iter=100)
best_params, best_value = pso.optimize()
print(f"Best Parameters: C={best_params[0]}, gamma={best_params[1]}, Best Value: {best_value}")

        过去与现在:PSO最初应用于函数优化问题,随着研究的深入,逐渐扩展到机器学习、数据挖掘、图像处理等多个领域。近年来,研究者对PSO进行了多种改进,如引入混沌理论、模糊逻辑等,以增强其全局搜索能力和收敛速度。

        优势:PSO具有简单易懂的结构和较少的参数设置,适用于多种优化问题。它能够有效地处理非线性、多峰值和高维问题,且收敛速度较快,适合实时优化。

        缺点:尽管PSO表现出色,但仍存在一些不足之处,如易陷入局部最优解、对参数设置敏感等。此外,在处理高维复杂问题时,可能会出现收敛速度减慢的问题。

        粒子群优化算法凭借其灵活性和有效性,已成为优化领域的重要工具,仍有广阔的发展空间。

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

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

相关文章

uniapp微信小程序 分享功能

uniapp https://zh.uniapp.dcloud.io/api/plugins/share.html#onshareappmessage export default {onShareAppMessage(res) {if (res.from button) {// 来自页面内分享按钮console.log(res.target)}return {title: 自定义分享标题,path: /pages/test/test?id123}} }需要再真机…

通过运动延寿:对于普通人最佳的延寿运动是球拍类运动

文章目录 I 通过运动延寿1. 练多久?一周锻炼几次?——45~60 分钟,一周 3~5 次2. 练什么?重点锻炼什么?——有氧运动+力量训练3. 怎么练?锻炼到什么强度?——要达到中等强度运动II 运动类型与寿命之间的关联在男性中在女性中普通人最佳的延寿运动: 球拍类I 通过运动延…

使用shell命令写一个简单的购物小票

1、代码实现 #!/bin/bash goodName1"钢笔" goodName2"泡面" echo "请输入$goodName1的价格?" read price1 echo "请输入$goodName1的数量?" read num1 total$(expr $price1 \* $num1) echo $total echo "$goodName1:价格…

【Oracle点滴积累】Oracle 19c安装Critical Patch Update for January 2023

广告位招租&#xff01; 知识无价&#xff0c;人有情&#xff0c;无偿分享知识&#xff0c;希望本条信息对你有用&#xff01; 今天和大家分享如何为Oracle 19c(未启用RMAN的单实例)安装Critical Patch Update(Patch Number:34771828)&#xff0c;本指引不包含Roll Back部分&a…

连锁店收银系统源码-线下收银多端视频展示

千呼新零售2.0系统由零售行业连锁店一体化收银系统和多商户入驻平台商城两个板块组成&#xff0c;打造门店平台的本地生活即时零售模式。 其中连锁店收银系统包括线下收银私域商城连锁店管理ERP管理商品管理供应商管理会员营销等功能为一体&#xff0c;线上线下数据全部打通。…

如何完美备份自己的微博,即使是封号之后

感谢 https://github.com/Chilfish/Weibo-archiver 工具和环境 可以用chrome插件的浏览器&#xff0c; 比如opera安装篡改猴插件安装nodejsvscode 第一步&#xff0c;安装浏览器插件 安装Tampermonkey 然后打开https://raw.githubusercontent.com/Chilfish/Weibo-archiver/m…

拼车系统开发方案

一、项目背景 随着城市化进程的加快和私家车数量的激增&#xff0c;交通拥堵和环境污染问题日益严峻。拼车作为一种绿色、经济的出行方式&#xff0c;逐渐成为缓解这些问题的重要途径。开发一个高效、安全、便捷的拼车系统不仅有助于提升出行效率&#xff0c;还能减少交通拥堵…

roles、通过roles实现lamp及lnmp、数据库的高可用和负载均衡的实现

roles(难点) 1、介绍 roles(⻆⾊): 就是通过分别将variables, tasks及handlers等放置于单独的⽬录中,并可以便捷地调⽤它们的⼀种机制。假设我们要写⼀个playbook来安装管理lamp环境&#xff0c;那么这个playbook就会写很⻓。所以我们希望把这个很⼤的⽂件分成多个功能拆分, …

Android SDK 遇到的坑之 AIUI(星火大模型)

目录 一、AIUI 二、常见错误 2.1 唤醒无效 2.2 错误码:600103 1、存放唤醒词等资源的路径 2、aiui_phone.cfg 文件配置 3、vtn.ini 文件配置 2.3 错误码:600022 相关推荐 一、AIUI 需要给桌面机器人(医康养)应用做语音指引/控制/健康咨询等功能&#xff0c;根据调研选择A…

【Midjourney】Midjourney全面开放网站版,所有用户每天可免费生成25次

Midjourney一直作为AI文生图领域的龙头老大&#xff0c;最近对面对市场上日益增长的竞争压力&#xff0c;尤其是来自 Flux 的挑战&#xff0c;终于向所有用户开放官方网站。尽管还处于早期阶段&#xff0c;但为了吸引更多用户体验&#xff0c;它暂时是完全免费的。 下面是Midj…

河道非法采砂智能检测系统:采砂船识别监测系统

一、引言 随着科技的不断发展&#xff0c;河道非法采砂问题日益严重&#xff0c;不仅破坏了河床生态平衡&#xff0c;还危及河道沿岸人民的生命财产安全。因此&#xff0c;建立一个高效、智能的河道非法采砂检测系统势在必行。本文将重点介绍一种基于智能识别的河道非法采砂检…

Autosar(Davinci) --- 新增一帧CAN报文

前言 这里我们简单讲解以下如何通过DBC配置,新增一帧CAN报文,并发送到上位机。 一、修改DBC 首先在Demo工程dbc的基础上,我们新增一个Signal,Message, 然后将这个Message绑定到某一个Network node下,这里我放在了MyECU这个节点下。 这里dbc怎么新建Signal,Message什么的,…

并行程序设计基础——组通信(2)

目录 一、组收集 二、全互换 三、同步 四、规约 五、预定义的归约操作 上一节内容我们介绍了MPI组通信的基本概念和广播、收集、散发接口调用。本节我们继续介绍其余的组通信接口。 一、组收集 MPI_GATHER是将数据收集到ROOT进程,MPI_ALLGATHER相当于每一个进程…

Unity 资源 之 Photon Inventory 2 (Game Creator 2)

免费获取资源&#xff1a; 有2种方式可免费获取资源&#xff1a; 在后台回复**“UnityAssetStore**“ 或 ”Unity资源”。在Unity官方地址&#xff1a;https://assetstore.unity.com/publisher-sale &#xff0c;兑换码&#xff1a;NINJUTSUGAMES 【本周限定】 关注我每周&a…

微软 Azure 推出文本到语音虚拟人;英伟达发布 8B 小语言模型,可在 RTX 工作站部署丨 RTE 开发者日报

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文…

ArrayList底层扩容机制详解保姆级

我们对下面代码进行debug&#xff0c;当我们使用无参构造器时&#xff0c;也就是没用指定ArrayList的容量的时候他他是空的&#xff0c;当我们第一次添加的时候才会扩容为10&#xff0c;当容量满之后每次会以1.5倍进行扩容。 当我们new之后elementData是空的 &#xff0c;只有执…

存储数据(变量)

变量&#xff1a;专门用来存储数据的容器 let title&#xff1a;string //console.log(消息说明,打印的内容) //console.log(我说,hello world) //变量的存储和修改&#xff08;string number boolean&#xff09; //1.变量存储 //1.1 字符串 string 类型 //注意点1&#xff1a…

C语言 之 memcpy函数的内存重叠问题 及解决该问题的思路

文章目录 函数原型&#xff1a;例子&#xff1a; 解决方式整体思路如下&#xff1a; 内存重叠问题主要是使用函数memcpy的时候会发生的 函数原型&#xff1a; void * memcpy ( void * destination, const void * source, size_t num);这个函数能够在source指向的空间中拷贝nu…

基于YOLOv8的高效滑动验证码滑块缺口检测模型研究与应用

在当今互联网高速发展的时代&#xff0c;滑动验证码作为一种有效的安全验证手段&#xff0c;广泛应用于各类网站和应用中&#xff0c;以防范自动化攻击和恶意登录。然而&#xff0c;随着技术的不断进步&#xff0c;滑动验证码的破解难度也在逐渐提升。为了应对这一挑战&#xf…

Ubuntu 22.04 某次重启后nvidia-smi 失效

Ubuntu 22.04 某次重启后nvidia-smi 失效 某次重启后失效&#xff0c;遂在网上寻找答案&#xff1a; 方案一&#xff1a;使用dkms进行安装相应模块 具体的可以参考链接 dkms 但是我试了一下并不好用&#xff0c;并且报错如下&#xff1a; Building module:cleaning build a…