当前位置: 首页 > article >正文

多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频))

  具体完整算法请跳转:多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频))

多目标粒子群优化算法(Multi-Objective Particle Swarm Optimization,MOPSO)是一种基于群体智能的优化算法,用于解决多目标优化问题。以下是对 MOPSO 的具体介绍:

基本原理

  • MOPSO 的基本原理源于对鸟群、鱼群等生物群体觅食等行为的模拟。在 MOPSO 中,每个粒子代表多目标优化问题的一个潜在解,粒子在搜索空间中飞行,通过不断调整自己的位置来寻找最优解。粒子的飞行速度和方向受到自身历史最优位置(个体极值)和群体历史最优位置(全局极值)的影响。

关键要素

  • 粒子表示:每个粒子都有自己的位置和速度。位置向量代表了多目标优化问题中的一个解,速度向量决定了粒子在搜索空间中移动的方向和步长。
  • 适应度评价:对于多目标问题,每个粒子需要根据多个目标函数来评估其适应度。由于多个目标之间往往相互冲突,不能简单地用一个数值来衡量粒子的好坏,通常采用 Pareto 支配关系等概念来比较粒子的优劣。如果一个粒子在所有目标上都不劣于另一个粒子,且在至少一个目标上优于另一个粒子,则称该粒子 Pareto 支配另一个粒子。
  • 个体极值和全局极值:每个粒子会记录自己历史上找到的最优位置,即个体极值。同时,整个群体也会记录群体历史上找到的最优位置集合,即全局极值。在多目标情况下,全局极值通常是一个 Pareto 最优解集,而不是单个最优解。
  • 速度和位置更新:粒子根据自身的速度和位置以及个体极值、全局极值来更新自己的速度和位置。速度更新会使粒子向个体极值和全局极值的方向移动,同时加入一定的随机因素,以保持搜索的多样性。位置更新则根据更新后的速度来改变粒子在搜索空间中的位置。

算法流程

  1. 初始化:随机生成一组粒子,确定它们的初始位置和速度。同时,根据问题的特点设定算法的参数,如最大迭代次数、惯性权重、学习因子等。
  2. 评价:计算每个粒子的适应度,根据多目标函数的值来评估粒子的优劣,并根据 Pareto 支配关系确定每个粒子的个体极值和群体的全局极值。
  3. 更新:根据速度更新公式和位置更新公式,对每个粒子的速度和位置进行更新。
  4. 终止判断:检查是否满足终止条件,如达到最大迭代次数、Pareto 最优解集收敛到一定程度等。如果满足终止条件,则输出当前的 Pareto 最优解集作为问题的近似最优解;否则,返回步骤 2 继续迭代。

应用领域

  • 工程设计:如机械结构设计、电子电路设计等,在满足多个性能指标(如强度、重量、功耗等)的前提下,寻找最优的设计方案。
  • 资源分配:在多资源、多任务的场景下,合理分配资源,以同时满足多个目标,如成本最小化、效益最大化等。
  • 生产调度:制定生产计划和调度方案,考虑交货期、生产成本、设备利用率等多个目标,实现生产过程的优化。
  • 环境科学:在环境治理和资源管理中,平衡经济发展、环境保护等多个目标,制定合理的政策和方案。‘

在机器人路径规划中的应用

  • 路径规划目标
    • 路径长度最短:使机器人能以最快速度到达目标点,减少移动时间和能量消耗。
    • 避障安全:确保机器人在移动过程中与障碍物保持安全距离,避免碰撞,保证自身及周围环境安全。
    • 能量消耗最小:对于依靠电池供电的机器人,合理规划路径可减少不必要的能量损耗,延长工作时间。
  • MOPSO 算法实现方式
    • 粒子编码:将机器人的路径表示为粒子的位置。例如,在二维平面环境中,可将路径离散化为一系列坐标点,粒子位置就由这些坐标点组成的序列表示。
    • 适应度函数设计:根据路径规划的多个目标设计适应度函数。如综合考虑路径长度、与障碍物的距离、能量消耗等因素,为每个目标分配相应权重,计算粒子的适应度值,以评估路径的优劣。
    • 粒子更新:在搜索过程中,粒子根据自身的历史最优位置和群体的全局最优位置来更新自己的速度和位置。通过不断迭代,粒子逐渐向最优路径区域搜索。
  • 优势
    • 高效搜索:能在复杂环境中快速搜索到接近最优的路径,比传统搜索算法如 A * 算法等在处理多目标问题时更具优势。
    • 灵活性:容易与其他算法结合,如与环境感知算法结合,实时根据环境变化调整路径规划。
  • 案例
    • 在仓库物流机器人中,利用 MOPSO 算法规划机器人在货架间的搬运路径,既要保证快速完成搬运任务,又要避免与货架和其他机器人碰撞,同时还要考虑节能,以提高物流效率和降低成本。

在多目标信号处理(图像 / 音频)中的应用

  • 多目标信号处理目标
    • 图像信号处理:在图像去噪的同时,尽可能保留图像的边缘和细节信息,以提高图像的清晰度和视觉效果;对图像进行压缩时,要在保证一定图像质量的前提下,实现压缩比最大化,减少存储空间和传输带宽。
    • 音频信号处理:在音频降噪过程中,既要有效去除噪声,又要保持音频的原有音色和音质,使处理后的音频更清晰、自然;在音频编码中,要在保证音频质量的基础上,提高编码效率,降低数据传输量。
  • MOPSO 算法实现方式
    • 粒子编码:对于图像信号,粒子可表示为图像的某种特征参数或处理算法的参数,如图像滤波的参数、压缩编码的参数等;对于音频信号,粒子可以是音频滤波参数、编码比特率等。
    • 适应度函数设计:针对图像或音频处理的多个目标,设计相应的适应度函数。例如,在图像去噪中,可将图像的信噪比、结构相似性等作为评估指标,构建适应度函数;在音频降噪中,可将音频的信噪比、感知音频质量评价指标等作为依据计算适应度值。
    • 粒子更新:通过 MOPSO 算法的迭代更新机制,调整粒子的位置,即信号处理的参数,使适应度值不断优化,从而找到最优的信号处理参数组合。
  • 优势
    • 全局优化能力:能够在多个目标相互冲突的情况下,找到全局最优或近似全局最优的解决方案,避免陷入局部最优。
    • 并行搜索:可以同时搜索多个可能的解空间,提高了搜索效率,适用于处理复杂的图像和音频信号。
  • 案例
    • 在医学图像处理中,利用 MOPSO 算法优化图像分割算法的参数,实现既准确分割出病变区域,又能保留图像的细微结构,为医生诊断提供更准确的图像依据。在语音识别系统中,运用 MOPSO 算法优化音频预处理参数,提高语音信号的质量,降低噪声对识别准确率的影响。

具体代码及实验结果

clear all; 
clc;% 多目标函数的选择,这里选择了 ZDT1 作为示例,你可以根据需要修改为其他函数
MultiObjFnc = 'ZDT1';switch MultiObjFnccase 'Schaffer'         % SchafferMultiObj.fun = @(x) [x(:).^2, (x(:)-2).^2];MultiObj.nVar = 1;MultiObj.var_min = -5;MultiObj.var_max = 5;load('Schaffer.mat');MultiObj.truePF = PF;case 'Kursawe'          % Kursawe MultiObj.fun = @(x) [-10.*(exp(-0.2.*sqrt(x(:,1).^2+x(:,2).^2)) + exp(-0.2.*sqrt(x(:,2).^2+x(:,3).^2))),...sum(abs(x).^0.8 + 5.*sin(x.^3),2)];MultiObj.nVar = 3;MultiObj.var_min = -5.*ones(1,MultiObj.nVar);MultiObj.var_max = 5.*ones(1,MultiObj.nVar);load('Kursawe.mat');MultiObj.truePF = PF;case 'Poloni'           % Poloni's two-objectiveA1 = 0.5*sin(1)-2*cos(1)+sin(2)-1.5*cos(2);A2 = 1.5*sin(1)-cos(1)+2*sin(2)-0.5*cos(2);B1 = @(x,y) 0.5.*sin(x)-2.*cos(x)+sin(y)-1.5.*cos(y);B2 = @(x,y) 1.5.*sin(x)-cos(x)+2.*sin(y)-0.5.*cos(y);f1 = @(x,y) 1+(A1-B1(x,y)).^2+(A2-B2(x,y)).^2;f2 = @(x,y) (x+3).^2+(y+1).^2;MultiObj.fun = @(x) [f1(x(:,1),x(:,2)), f2(x(:,1),x(:,2))];MultiObj.nVar = 2;MultiObj.var_min = -pi.*ones(1,MultiObj.nVar);MultiObj.var_max = pi.*ones(1,MultiObj.nVar);case 'Viennet2'         % Viennet2f1 = @(x,y) 0.5.*(x-2).^2+(1/13).*(y+1).^2+3;f2 = @(x,y) (1/36).*(x+y-3).^2+(1/8).*(-x+y+2).^2-17;f3 = @(x,y) (1/175).*(x+2.*y-1).^2+(1/17).*(2.*y-x).^2-13;MultiObj.fun = @(x) [f1(x(:,1),x(:,2)), f2(x(:,1),x(:,2)), f3(x(:,1),x(:,2))];MultiObj.nVar = 2;MultiObj.var_min = [-4, -4];MultiObj.var_max = [4, 4];load('Viennet2.mat');MultiObj.truePF = PF;case 'Viennet3'         % Viennet3f1 = @(x,y) 0.5.*(x.^2+y.^2)+sin(x.^2+y.^2);f2 = @(x,y) (1/8).*(3.*x-2.*y+4).^2 + (1/27).*(x-y+1).^2 +15;f3 = @(x,y) (1./(x.^2+y.^2+1))-1.1.*exp(-(x.^2+y.^2));MultiObj.fun = @(x) [f1(x(:,1),x(:,2)), f2(x(:,1),x(:,2)), f3(x(:,1),x(:,2))];MultiObj.nVar = 2;MultiObj.var_min = [-3, -10];MultiObj.var_max = [10, 3];load('Viennet3.mat');MultiObj.truePF = PF;case 'ZDT1'             % ZDT1 (convex)g = @(x) 1+9.*sum(x(:,2:end),2)./(size(x,2)-1);MultiObj.fun = @(x) [x(:,1), g(x).*(1-sqrt(x(:,1)./g(x)))];MultiObj.nVar = 30; MultiObj.var_min = zeros(1,MultiObj.nVar);MultiObj.var_max = ones(1,MultiObj.nVar);load('ZDT1.mat');MultiObj.truePF = PF;case 'ZDT2'             % ZDT2 (non-convex)f = @(x) x(:,1);g = @(x) 1+9.*sum(x(:,2:end),2)./(size(x,2)-1);h = @(x) 1-(f(x).^2./g(x));MultiObj.fun = @(x) [f(x), g(x).*h(x)];MultiObj.nVar = 30; MultiObj.var_min = zeros(1,MultiObj.nVar);MultiObj.var_max = ones(1,MultiObj.nVar);load('ZDT2.mat');MultiObj.truePF = PF;case 'ZDT3'             % ZDT3 (discrete)f = @(x) x(:,1);g  = @(x) 1+(9/size(x,2)-1).*sum(x(:,2:end),2);h  = @(x) 1 - sqrt(f(x)./g(x)) - (f(x)./g(x)).*sin(10.*pi.*f(x));MultiObj.fun = @(x) [f(x), g(x).*h(x)];MultiObj.nVar = 5;MultiObj.var_min = 0.*ones(1,MultiObj.nVar);MultiObj.var_max = 1.*ones(1,MultiObj.nVar);load('ZDT3.mat');MultiObj.truePF = PF;case 'ZDT6'             % ZDT6 (non-uniform)f = @(x) 1 - exp(-4.*x(:,1)).*sin(6.*pi.*x(:,1));g = @(x) 1 + 9.*(sum(x(:,2:end),2)./(size(x,2)-1)).^0.25;h = @(x) 1 - (f(x).^2./g(x));MultiObj.fun = @(x) [f(x), g(x).*h(x)];MultiObj.nVar = 10;MultiObj.var_min = 0.*ones(1,MultiObj.nVar);MultiObj.var_max = 1.*ones(1,MultiObj.nVar);load('ZDT6.mat');MultiObj.truePF = PF;
end% Parameters
params.Np = 200;        % Population size
params.Nr = 200;        % Repository size
params.maxgen = 100;    % Maximum number of generations
params.W = 0.4;         % Inertia weight
params.C1 = 2;          % Individual confidence factor
params.C2 = 2;          % Swarm confidence factor
params.ngrid = 20;      % Number of grids in each dimension
params.maxvel = 5;      % Maxmium vel in percentage
params.u_mut = 0.5;     % Uniform mutation percentage% MOPSO
REP = MOPSO(params,MultiObj);% Display info
display('Repository fitness values are stored in REP.pos_fit');
display('Repository particles positions are store in REP.pos');

具体完整算法请跳转:多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频))

相关文章:

多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频))

具体完整算法请跳转:多目标粒子群优化算法-MOPSO-(机器人路径规划/多目标信号处理(图像/音频)) 多目标粒子群优化算法(Multi-Objective Particle Swarm Optimization,MOPSO)是一种基…...

Unity合批处理优化内存序列帧播放动画

Unity合批处理序列帧优化内存 介绍图片导入到Unity中的处理Unity中图片设置处理Unity中图片裁剪 创建序列帧动画总结 介绍 这里是针对Unity序列帧动画的优化内容,将多个图片合批处理然后为了降低Unity的内存占用,但是相对的质量也会稍微降低。可自行进行…...

LayUi点击查看图片组件layer.photos()用法(图片放大预览后滚动鼠标缩放、底部显示自定义标题)

LayUi官方文档更新后发现图片查看组件layer.photos()没有了 记录一下用法 例&#xff1a; <ul id""><li title"" ng-repeat"(val,item) in Obj" ng-click"gszzxxClick(item)"><img ng-src"{{item.src}}" a…...

DAY07 Collection、Iterator、泛型、数据结构

学习目标 能够说出集合与数组的区别数组:1.是引用数据类型的一种2.可以存储多个元素3.数组的长度是固定的 int[] arr1 new int[10]; int[] arr2 {1,2,3};4.数组即可以存储基本类型的数据,又可以存储引用数据类型的数据int[],double[],String[],Student[]集合:1.是引用数据类…...

k8s集群如何赋权普通用户仅管理指定命名空间资源

文章目录 1. 普通用户2. 创建私钥3. 创建 CertificateSigningRequest4. 批准 CertificateSigningRequest5. 创建 kubeconfig6. 创建角色和角色绑定7. 测试 1. 普通用户 创建用户demo useradd demo2. 创建私钥 下面的脚本展示了如何生成 PKI 私钥和 CSR。 设置 CSR 的 CN 和 …...

DeepSeek与ChatGPT的全面对比

在人工智能&#xff08;AI&#xff09;领域&#xff0c;生成式预训练模型&#xff08;GPT&#xff09;已成为推动技术革新的核心力量。OpenAI的ChatGPT自发布以来&#xff0c;凭借其卓越的自然语言处理能力&#xff0c;迅速占据市场主导地位。然而&#xff0c;近期中国AI初创公…...

C# dynamic 关键字 使用详解

总目录 前言 dynamic 是 C# 4.0 引入的关键字&#xff0c;用于声明动态类型&#xff0c;允许在运行时解析类型和成员&#xff0c;而非编译时。它主要设计用于简化与动态语言&#xff08;如 Python、JavaScript&#xff09;的交互、处理未知结构的数据&#xff08;如 JSON、XML…...

sql server 数据库 锁教程及锁操作

SQL Server数据库 锁的教程 SQL Server 的数据库锁是为了保证数据库的并发性和数据一致性而设计的。锁机制能够确保多个事务不会同时修改同一数据&#xff0c;从而避免数据冲突和不一致的发生。理解 SQL Server 的锁机制对于开发高效、并发性强的数据库应用非常重要。 1. 锁的…...

超全Deepseek资料包,deepseek下载安装部署提示词及本地部署指南介绍

该资料包涵盖了DeepSeek模型的下载、安装、部署以及本地运行的详细指南&#xff0c;适合希望在本地环境中高效运行DeepSeek模型的用户。资料包不仅包括基础的安装步骤&#xff0c;还提供了68G多套独立部署视频教程教程&#xff0c;针对不同硬件配置的模型选择建议&#xff0c;以…...

DeepSeek24小时写作机器人,持续创作高质量文案

内容创作已成为企业、自媒体和创作者的核心竞争力。面对海量的内容需求&#xff0c;人工创作效率低、成本高、质量参差不齐等问题日益凸显。如何在有限时间内产出高质量内容&#xff1f;DeepSeek写作机器人&#xff0c;一款24小时持续创作的智能工具&#xff0c;为企业和个人提…...

用deepseek学大模型08-卷积神经网络(CNN)

yuanbao.tencent.com 从入门到精通卷积神经网络(CNN),着重介绍的目标函数&#xff0c;损失函数&#xff0c;梯度下降 标量和矩阵形式的数学推导&#xff0c;pytorch真实能跑的代码案例以及模型,数据&#xff0c;预测结果的可视化展示&#xff0c; 模型应用场景和优缺点&#xf…...

玩客云 IP查找

1.玩客云使用静态IP在不同网段路由器下不能使用&#xff0c;动态不好找IP地址 1.1使用python3 实现自动获取发送 import requests import os import socket# 从环境变量获取 PushPlus 的 token 和群组编码 PUSH_PLUS_TOKEN os.getenv("PUSH_PLUS_TOKEN") PUSH_PLU…...

【鸿蒙Next】鸿蒙应用发布前的准备

图标生成&#xff1a; https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-apply-generated-icon-V5 debug 与 release使用不同的bundle name 鸿蒙多环境配置 https://segmentfault.com/a/1190000045418731...

【OpenCV】入门教学

&#x1f3e0;大家好&#xff0c;我是Yui_&#x1f4ac; &#x1f351;如果文章知识点有错误的地方&#xff0c;请指正&#xff01;和大家一起学习&#xff0c;一起进步&#x1f440; &#x1f680;如有不懂&#xff0c;可以随时向我提问&#xff0c;我会全力讲解~ &#x1f52…...

嵌入式 lwip http server makefsdata

背景&#xff1a; 基于君正X2000 MCU Freertoslwip架构 实现HTTP server服务&#xff0c;MCU作为HTTP服务器通过网口进行数据包的传输&#xff0c;提供网页服务。其中设计到LWIP提供的工具makefsdata&#xff0c;常用于将文件或目录结构转换为适合嵌入到固件中的二进制格式。 …...

qemu-kvm源码解析-cpu虚拟化

背景 Qemu 虚拟化中&#xff0c;CPU&#xff0c;内存&#xff0c;中断是虚拟化的核心板块。本章主要对CPU虚拟化源码进行分析 而随着技术的发展包括CPU、内存、网卡等常见外设。硬件层面的虚拟化现在已经是云计算的标配。形成了&#xff0c;qemu作为cpu外层控制面&#xff0c…...

【蓝桥杯集训·每日一题2025】 AcWing 6123. 哞叫时间 python

6123. 哞叫时间 Week 1 2月18日 农夫约翰正在试图向埃尔茜描述他最喜欢的 USACO 竞赛&#xff0c;但她很难理解为什么他这么喜欢它。 他说「竞赛中我最喜欢的部分是贝茜说 『现在是哞哞时间』并在整个竞赛中一直哞哞叫」。 埃尔茜仍然不理解&#xff0c;所以农夫约翰将竞赛以…...

数据治理中 大数据处理一般都遵循哪些原则

在数据治理中&#xff0c;大数据处理通常遵循以下原则&#xff1a; 最小化原则&#xff1a;企业应只收集实现特定目的所需的数据&#xff0c;避免数据冗余和安全风险。 合法性原则&#xff1a;企业必须遵守相关法律法规&#xff0c;确保数据处理符合法律要求&#xff0c;降低法…...

Linux 多进程生产者消费者模型实现

Linux 多进程生产者消费者模型实现 一、模型核心组件二、关键代码解析1. 信号量封装类&#xff08;csemp&#xff09;2. 共享内存初始化3. 生产者核心逻辑4. 消费者核心逻辑 三、关键同步机制信号量使用策略操作时序图 四、扩展知识1. System V与POSIX信号量对比2. 共享内存最佳…...

【Python pro】基本数据类型

一、数字类型 1.1 数字类型的组成 1.1.1 整数 &#xff08;1&#xff09;十进制&#xff0c;二进制0b&#xff0c;八进制0o&#xff0c;十六进制0x print(16 0b10000 0o20 0x10) # 输出&#xff1a;True&#xff08;2&#xff09;十进制转其他进制 a bin(16) b oct(1…...

sql server查询IO消耗大的排查sql诊断语句

原文链接&#xff1a; sql server查询IO消耗大的排查sql诊断语句-S3软件[code]select top 50 (total_logical_reads/execution_count) as avg_logical_reads , (total_logical_writes/execution_count) as avg_logical_writes , (tota ... https://blog.s3.sh.cn/thread-120-1…...

Spring Boot 自动装配原理深度剖析

一、引言 在 Java 开发领域&#xff0c;Spring 框架无疑是中流砥柱。而 Spring Boot 的出现&#xff0c;更是极大地简化了 Spring 应用的搭建和开发过程。其中&#xff0c;自动装配原理是 Spring Boot 的核心亮点之一&#xff0c;它让开发者无需手动编写大量繁琐的配置代码&am…...

kubernetes源码分析 kubelet

简介 从官方的架构图中很容易就能找到 kubelet 执行 kubelet -h 看到 kubelet 的功能介绍&#xff1a; kubelet 是每个 Node 节点上都运行的主要“节点代理”。使用如下的一个向 apiserver 注册 Node 节点&#xff1a;主机的 hostname&#xff1b;覆盖 host 的参数&#xff1…...

Golang学习笔记_33——桥接模式

Golang学习笔记_30——建造者模式 Golang学习笔记_31——原型模式 Golang学习笔记_32——适配器模式 文章目录 桥接模式详解一、桥接模式核心概念1. 定义2. 解决的问题3. 核心角色4. 类图 二、桥接模式的特点三、适用场景1. 多维度变化2. 跨平台开发3. 动态切换实现 四、与其他…...

使用EasyExcel和多线程实现高效数据导出

​ 使用EasyExcel和多线程实现高效数据导出 1. 概述 在企业级应用中&#xff0c;数据导出是一个常见的需求。为了提高导出效率&#xff0c;尤其是在处理大量数据时&#xff0c;我们可以结合使用EasyExcel库和多线程技术。本文将详细介绍如何通过EasyExcel和多线程技术实现高…...

告别冷冰冰:如何训练AI写出温暖人心的广告文案

朋友们&#xff0c;你们是不是也好奇过&#xff0c;如果让AI来写广告文案&#xff0c;会是什么效果&#xff1f; 是冷冰冰的数据堆砌&#xff0c;还是也能玩出创意和温度&#xff1f; 别担心&#xff0c;今天我就来给你揭秘&#xff0c;怎么调教AI&#xff0c;让它写出的广告…...

【js逆向_入门】图灵爬虫练习平台 第四题

(base64解码&#xff09;地址&#xff1a;aHR0cHM6Ly9zdHUudHVsaW5ncHl0b24uY24vcHJvYmxlbS1kZXRhaWwvNC8 请求接口带有加密参数&#xff1a; 全局搜索Sign,找到参数生成位置 一目了然&#xff0c;知道参数是怎么构造生成的 调试代码 测试验证思路是否正确 时间&#xff1a; …...

Mybatis后端数据库查询多对多查询解决方案

问题场景&#xff1a; 我开发的是一个论文选择系统。 后端用一个论文表paper来存储论文信息。 论文信息中&#xff0c;包含前置课程&#xff0c;也就是你需要修过这些课程才能选择这个论文。 而一个论文对应的课程有很多个。 这样就造成了一个数据库存储的问题。一个paper…...

记一次 Git Fetch 后切换分支为空的情况

Git Fetch 后切换分支为空的情况 在使用 Git 时&#xff0c;我遇到这样的情况&#xff1a;执行 git fetch 后切换分支&#xff0c;发现工作目录是空的&#xff0c;没有任何文件&#xff0c;所以插眼记录一下。 原因分析 git fetch 的作用&#xff1a;git fetch 只会从远程仓库…...

【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法

【MySQL排错 】mysql: command not found 数据库安装后无法加载的解决办法 A Solution to Solve Error - mysql: command not found After The Installation of MySQL Community Server By JacksonML 本文简要介绍如何在macOS安装完毕MySQL数据库服务器后&#xff0c;针对无…...