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

禁忌搜索算法:从原理到实战的全解析

禁忌搜索算法:从原理到实战的全解析

一、算法起源与核心思想

禁忌搜索(Tabu Search, TS)由美国工程院院士Fred Glover于1986年正式提出,其灵感源于人类的记忆机制——通过记录近期的搜索历史(禁忌表),避免重复访问无效区域,从而在解空间中实现更高效的探索。与模拟退火的概率接受机制不同,禁忌搜索采用确定性的“禁止-释放”策略,通过动态维护禁忌列表来规避循环搜索,引导算法聚焦于优质解的邻域开发。

算法的核心要素包括:

  1. 禁忌表(Tabu List):存储近期执行过的“移动”(解的变换操作),禁止重复使用以避免来回震荡。
  2. 藐视准则(Aspiration Criterion):若某个禁忌移动产生历史最优解,则打破禁忌限制,强制接受该解。
  3. 邻域结构:定义解的变换方式(如交换、插入、反转等),直接影响搜索效率。

二、算法流程详解

1. 初始化阶段

  • 初始解生成:可随机生成或采用启发式方法(如最近邻法求解TSP)。
  • 禁忌表初始化:设定禁忌长度(通常为10-100),创建空列表存储禁忌移动。
  • 最优解记录:保存当前找到的最优解及其目标函数值。

2. 迭代搜索阶段

步骤1:生成邻域解

根据定义的邻域结构,对当前解进行变换(如TSP中交换两个城市位置),生成所有可能的邻域解。
例:当前解为[1,3,2,4],邻域解可通过交换任意两个位置生成,共C(n,2)个候选解。

步骤2:筛选候选解
  • 从邻域解中排除处于禁忌表中的移动(即对应的变换操作在禁忌期内)。
  • 若候选解为空,则放宽禁忌限制(如缩短禁忌长度)。
步骤3:应用藐视准则

若某个被禁忌的移动生成的解优于历史最优解,则忽略禁忌限制,强制接受该解并更新最优解。

步骤4:选择最优候选解

在可用候选解中选择目标函数最优的解作为新当前解。若所有候选解均不如当前解,可采用“次优选择”策略避免搜索停滞。

步骤5:更新禁忌表

将当前执行的移动(解的变换操作)加入禁忌表,若禁忌表长度超过预设值,移除最早加入的禁忌项。禁忌表通常记录移动的关键特征(如交换的城市对)而非完整解,以减少存储开销。

3. 终止条件

  • 达到预设的最大迭代次数。
  • 最优解在若干代内未更新(停滞判据)。
  • 解的质量达到预期精度要求。

三、关键技术点解析

1. 禁忌表设计

  • 禁忌对象:通常选择“移动”作为禁忌对象(如TSP中的交换操作(i,j)),而非解本身,避免过度限制搜索空间。
  • 禁忌长度
    • 固定长度:如设为20,简单但缺乏适应性。
    • 动态调整:根据问题规模和搜索状态自动调整(如当前解邻域质量差时缩短禁忌长度)。
      工程经验:禁忌长度一般取问题规模的1%-5%,如TSP中城市数n=100时,禁忌长度设为5-10。

2. 邻域结构设计

  • 有效性:邻域应包含足够多的潜在优质解,同时避免规模过大导致计算复杂。
    例:TSP中常用的2-opt(交换两条边)邻域规模为O(n²),3-opt为O(n³),需在解质量和计算效率间权衡。
  • 针对性:根据问题特性设计专用变换操作,如调度问题中的工序交换、神经网络中的权重微调。

3. 藐视准则实现

  • 触发条件:当候选解的目标函数值优于历史最优解时,无论是否禁忌均接受。
  • 扩展应用:也可基于相对改进幅度(如比当前解优5%)触发,避免过度频繁打破禁忌。

四、典型应用场景

1. 组合优化领域

  • 旅行商问题(TSP):通过交换城市顺序的禁忌移动,有效避免重复路径,相比贪心算法能获得更优解。
  • 车辆路径规划(VRP):处理带容量限制的多车辆调度,禁忌表记录车辆分配和节点访问顺序的调整。
  • 生产调度:优化车间作业顺序,减少最大完工时间,禁忌对象为机器分配或工序排序的调整。

2. 机器学习与数据科学

  • 特征选择:禁忌表记录特征的添加/删除操作,避免来回切换导致的震荡,快速找到最优特征子集。
  • 超参数调优:将超参数的调整视为“移动”,如学习率的乘性调整、网络层数的增减,结合藐视准则加速收敛。

3. 工程设计与资源分配

  • 电路布局优化:减少芯片引脚连线长度,禁忌表存储模块位置的移动操作。
  • 无线传感器网络覆盖:优化节点部署位置,禁忌表记录节点的移动方向和距离。

五、算法实现:以TSP问题为例

import randomdef create_initial_route(num_cities):"""生成随机初始路径"""route = list(range(num_cities))random.shuffle(route)return routedef calculate_distance(route, distance_matrix):"""计算路径总距离"""return sum(distance_matrix[route[i]][route[i+1]] for i in range(len(route)-1))def generate_neighbors(route):"""生成邻域解(2-opt交换)"""neighbors = []n = len(route)for i in range(n-1):for j in range(i+1, n):if j - i == 1:  # 相邻节点交换,避免无效操作continuenew_route = route[:i] + route[i:j+1][::-1] + route[j+1:]neighbors.append(new_route)return neighborsdef tabu_search(tsp_matrix, max_iter=1000, tabu_size=10):num_cities = len(tsp_matrix)current_route = create_initial_route(num_cities)current_route.append(current_route[0])  # 闭合路径best_route = current_route.copy()best_distance = calculate_distance(current_route, tsp_matrix)tabu_list = []  # 存储禁忌的交换操作(i,j)for iter_idx in range(max_iter):neighbors = generate_neighbors(current_route[:-1])  # 去除闭合节点candidates = []for neighbor in neighbors:neighbor.append(neighbor[0])  # 闭合路径move = find_move(current_route[:-1], neighbor[:-1])  # 找出交换的i,jif move is not None and move in tabu_list:continue  # 禁忌移动,跳过distance = calculate_distance(neighbor, tsp_matrix)candidates.append((distance, neighbor, move))if not candidates:  # 无可用候选解,清空禁忌表tabu_list = []continue# 按距离排序,选择最优候选解candidates.sort()best_candidate_dist, best_candidate_route, move = candidates[0]# 应用藐视准则:若优于历史最优,打破禁忌if best_candidate_dist < best_distance:best_distance = best_candidate_distbest_route = best_candidate_route.copy()# 即使move在禁忌表中,仍接受if move is not None and move in tabu_list:tabu_list.remove(move)  # 从禁忌表中移除,避免重复记录# 更新当前解和禁忌表current_route = best_candidate_routeif move is not None:tabu_list.append(move)if len(tabu_list) > tabu_size:tabu_list.pop(0)  # 移除最早的禁忌项return best_route[:-1], best_distancedef find_move(original, new_route):"""找出两个路径的差异对应的交换操作(i,j)"""for i in range(len(original)):if original[i] != new_route[i]:j = new_route.index(original[i])return (min(i,j), max(i,j))return None  # 无差异(理论上不会出现)# 示例运行(假设距离矩阵为对称矩阵)
if __name__ == "__main__":# 生成随机TSP距离矩阵(10个城市)num_cities = 10distance_matrix = [[0]*num_cities for _ in range(num_cities)]for i in range(num_cities):for j in range(i+1, num_cities):dist = random.randint(10, 100)distance_matrix[i][j] = distance_matrix[j][i] = distbest_route, best_dist = tabu_search(distance_matrix)print(f"最优路径: {best_route}")print(f"最短距离: {best_dist}")

六、优缺点对比与适用场景

优点缺点
1. 避免循环搜索,有效跳出局部最优
2. 聚焦优质解邻域,后期搜索精度高
3. 可结合问题特性设计专用邻域结构
1. 邻域规模较大时计算复杂度高(O(n²)~O(n³))
2. 参数敏感性强(禁忌长度、邻域结构影响显著)
3. 依赖初始解质量(优质初始解可加速收敛)

适用场景

  • 目标函数不可微或离散(如组合优化问题)。
  • 解空间存在大量局部最优(如TSP、VRP)。
  • 对解质量要求较高,允许一定计算时间的场景。

七、工程优化策略

1. 禁忌表优化

  • 双禁忌表机制:同时维护短期禁忌表(避免重复移动)和长期禁忌表(记录历史优质解特征,引导搜索方向)。
  • 自适应禁忌长度:根据搜索效率动态调整,如连续50代未更新最优解时,将禁忌长度从10缩短至5。

2. 邻域搜索改进

  • 子集邻域生成:当邻域规模过大时,随机采样部分邻域解(如取100个最优候选),平衡精度与效率。
  • 动态邻域结构:前期使用粗放邻域(如2-opt)快速探索,后期切换为精细邻域(如3-opt)局部优化。

3. 混合算法设计

  • 与遗传算法结合:利用遗传算法的交叉变异生成初始解池,再通过禁忌搜索精细优化。
  • 与局部搜索结合:在禁忌搜索迭代中,对当前解先进行局部搜索(如爬山法),再生成邻域解。

八、实践经验与参数调优

  1. 初始解构造

    • 优先使用启发式算法(如最近邻法、贪心算法)生成高质量初始解,减少搜索时间。
    • 对小规模问题可随机生成多个初始解,取最优解作为搜索起点。
  2. 禁忌表参数

    • 禁忌长度建议通过实验确定:从问题规模的1%开始,逐步增加直至解质量稳定。
    • 禁忌对象应选择最易导致循环的移动特征(如TSP中的边交换,而非节点顺序)。
  3. 终止条件

    • 结合迭代次数和停滞代数(如连续200代最优解不变则终止),避免过度搜索。

九、总结

禁忌搜索作为启发式优化算法的经典代表,凭借“记忆-规避-释放”的核心机制,在复杂组合优化问题中展现出卓越的性能。其优势在于可定制化的邻域结构和禁忌策略,允许算法针对具体问题进行深度优化。尽管存在参数调优和计算效率的挑战,但通过合理设计邻域操作、动态调整禁忌表,能够在工程实践中发挥重要作用。对于求解TSP、调度问题等NP难问题,禁忌搜索是兼具理论深度与实用价值的优选方案。

相关文章:

禁忌搜索算法:从原理到实战的全解析

禁忌搜索算法&#xff1a;从原理到实战的全解析 一、算法起源与核心思想 禁忌搜索&#xff08;Tabu Search, TS&#xff09;由美国工程院院士Fred Glover于1986年正式提出&#xff0c;其灵感源于人类的记忆机制——通过记录近期的搜索历史&#xff08;禁忌表&#xff09;&…...

从加密到信任|密码重塑车路云一体化安全生态

目录 一、密码技术的核心支撑 二、典型应用案例 三、未来发展方向 总结 车路云系统涉及海量实时数据交互&#xff0c;包括车辆位置、传感器信息、用户身份等敏感数据。其安全风险呈现三大特征&#xff1a; 开放环境威胁&#xff1a;V2X&#xff08;车与万物互联&#xff0…...

【ffmpeg】SPS与PPS的概念

PPS&#xff08;Picture Parameter Set&#xff09;详解 PPS&#xff08;图像参数集&#xff09;是H.264/H.265视频编码标准中的关键数据结构&#xff0c;与SPS&#xff08;序列参数集&#xff09;共同组成视频的解码配置信息&#xff0c;直接影响视频的正确解码和播放。以下是…...

Java垃圾回收与JIT编译优化

1. Java中的垃圾回收 垃圾回收是Java内存管理的核心,负责自动回收不再被应用程序引用的对象内存,从而防止内存泄漏并优化资源使用。以下详细介绍垃圾回收的机制、算法及优化实践。 1.1 垃圾回收的必要性 垃圾回收解决了手动内存管理中的常见问题,如内存泄漏和悬空指针。它…...

mmaction2——tools文件夹下

build_rawframes.py 用法示例 python tools/data/build_rawframes.py data/videos data/frames --task rgb --level 2 --ext mp4 --use-opencv --num-worker 8总结&#xff1a; 只需要 RGB 帧&#xff0c;推荐 --use-opencv&#xff0c;简单高效&#xff0c;无需额外依赖。 …...

论文阅读:Next-Generation Database Interfaces:A Survey of LLM-based Text-to-SQL

地址&#xff1a;Next-Generation Database Interfaces: A Survey of LLM-based Text-to-SQL 摘要 由于用户问题理解、数据库模式解析和 SQL 生成的复杂性&#xff0c;从用户自然语言问题生成准确 SQL&#xff08;Text-to-SQL&#xff09;仍是一项长期挑战。传统的 Text-to-SQ…...

Devicenet主转Profinet网关助力改造焊接机器人系统智能升级

某汽车零部件焊接车间原有6台焊接机器人&#xff08;采用Devicenet协议&#xff09;需与新增的西门子S7-1200 PLC&#xff08;Profinet协议&#xff09;组网。若更换所有机器人控制器或上位机系统&#xff0c;成本过高且停产周期长。 《解决方案》 工程师选择稳联技术转换网关…...

【HTML-5】HTML 实体:完整指南与最佳实践

1. 什么是 HTML 实体&#xff1f; HTML 实体是一种在 HTML 文档中表示特殊字符的方法&#xff0c;这些字符如果直接使用可能会与 HTML 标记混淆&#xff0c;或者无法通过键盘直接输入。实体由 & 符号开始&#xff0c;以 ; 分号结束。 <p>这是一个小于符号的实体&am…...

MySQL 索引详解与原理分析

MySQL 索引详解与原理分析 一、什么是索引&#xff1f; 索引&#xff08;Index&#xff09;是数据库表中一列或多列的值进行排序的一种数据结构&#xff0c;可以加快数据的检索速度。索引类似于书本的目录&#xff0c;通过目录可以快速定位到想要的内容&#xff0c;而不用全书…...

游戏引擎学习第303天:尝试分开对Y轴和Z轴进行排序

成为我们自己的代码精灵α 所以现在应该可以正常使用了。不过&#xff0c;这两周我们没办法继续处理代码里的问题&#xff0c;而之前留在代码里的那个问题依然存在&#xff0c;没有人神奇地帮我们修复&#xff0c;这让人挺无奈的。其实我们都希望有个神奇的“代码仙子”&#…...

javaweb-html

1.交互流程&#xff1a; 浏览器向服务器发送http请求&#xff0c;服务器对浏览器进行回应&#xff0c;并发送字符串&#xff0c;浏览器能对这些字符串&#xff08;html代码&#xff09;进行解释&#xff1b; 三大web语言&#xff1a;&#xff08;1&#xff09;html&#xff1a…...

3.2.3

# 导入必要的库 import onnx import numpy as np from PIL import Image import onnxruntime as ort # 定义预处理函数&#xff0c;用于将图片转换为模型所需的输入格式 def preprocess(image_path): input_shape (1, 1, 64, 64) # 模型输入期望的形状&#xff0c;这里…...

Redis 8.0 GA,重回开源

在数字化浪潮的推动下&#xff0c;实时数据处理已成为现代应用的核心需求。作为全球广泛使用的 NoSQL 数据库&#xff0c;Redis 8.0 不仅通过 30 余项性能改进重新定义了实时数据处理的速度极限&#xff0c;更通过整合社区资源与开放授权模式&#xff0c;进一步巩固其在开源生态…...

心联网(社群经济)视角下开源AI智能名片、链动2+1模式与S2B2C商城小程序源码的协同创新研究

摘要&#xff1a;在心联网&#xff08;社群经济&#xff09;理论框架下&#xff0c;本文构建了开源AI智能名片、链动21模式与S2B2C商城小程序源码的技术协同体系&#xff0c;提出"情感连接-利益驱动-生态裂变"三维创新模型。通过实证分析与案例研究&#xff0c;验证该…...

【图像大模型】Hunyuan-DiT:腾讯多模态扩散Transformer的架构创新与工程实践

Hunyuan-DiT&#xff1a;腾讯多模态扩散Transformer的架构创新与工程实践 一、架构设计与技术创新1.1 核心架构解析1.2 关键技术突破1.2.1 多粒度训练策略1.2.2 动态路由MoE 二、系统架构解析2.1 完整生成流程2.2 性能对比 三、实战部署指南3.1 环境配置3.2 基础推理代码3.3 高…...

TASK04【Datawhale 组队学习】构建RAG应用

目录 将LLM接入LangChain构建检索问答链运行成功图遇到的问题 langchain可以便捷地调用大模型&#xff0c;并将其结合在以langchain为基础框架搭建的个人应用中。 将LLM接入LangChain from langchain_openai import ChatOpenAI实例化一个 ChatOpenAI 类,实例化时传入超参数来…...

YOLOv11旋转目标检测Hrsc2016

from ultralytics import YOLOmodel YOLO(/kaggle/input/model-v11-obb/yolo11n-obb.pt) model.train(data/kaggle/input/hrscobb4/HRSC-YOLO/data.yaml, epochs30) 1使用的训练平台为Kaggle 数据集&#xff1a;HRSC的三种形式 一级分类&#xff1a;船 有水平框版本&…...

Debian重装系统后

安装配置java环境 手动安装 下载openJDK&#xff1a;openJDK 设置替代项 sudo update-alternatives --install /usr/bin/java java /opt/jdk-21.0.2/bin/java 1 sudo update-alternatives --install /usr/bin/javac javac /opt/jdk-21.0.2/bin/javac 1 sudo update-alternat…...

野火鲁班猫(arrch64架构debian)从零实现用MobileFaceNet算法进行实时人脸识别(四)安装RKNN Toolkit Lite2

RKNN Toolkit Lite2 是瑞芯微专为RK系列芯片开发的NPU加速推理API。若不使用该工具&#xff0c;计算任务将仅依赖CPU处理&#xff0c;无法充分发挥芯片高达6TOPS的NPU算力优势。 按照官方文档先拉一下官方代码库&#xff0c;然后通过whl文件安装&#xff0c;因为我是python3.1…...

ElasticSearch导读

ElasticSearch 简介&#xff1a;ElasticSearch简称ES是一个开源的分布式搜素和数据分析引擎。是使用Java开发并且是当前最流行的开源的企业级搜索引擎&#xff0c;能够达到近实时搜索&#xff0c;它专门设计用于处理大规模的文本数据和实现高性能的全文搜索。它基于 Apache Luc…...

【STM32】自定义打印函数

STM32 学习笔记&#xff1a;理解 my_printf 与 va_start 在嵌入式开发中&#xff0c;我们常常需要实现类似标准 C 中 printf 的调试输出功能。为了支持“任意数量参数”的传递&#xff0c;C 语言提供了对 可变参数&#xff08;variable arguments&#xff09; 的支持。其中&am…...

基于 STM32 的 PC ARGB 风扇控制器设计与实现

一、项目背景 最近购入的 X99 系列主板&#xff0c;没有风扇的 ARGB 彩灯接口&#xff0c;并且在 Ubuntu 系统上 4pin 的风扇接口调速也是非常的难用&#xff0c;sensor 扫描不到传感器&#xff0c;于是决定手搓一个风扇控制器&#xff0c;来实现转速自定义和彩灯控制。 我控制…...

【软件设计师】计算机网络考点整理

以下是软件设计师考试中 ​​计算机网络​​ 的核心考点总结&#xff0c;帮助您高效备考&#xff1a; ​​一、网络体系结构与协议​​ ​​OSI七层模型 & TCP/IP四层模型​​ 各层功能&#xff08;物理层-数据链路层-网络层-传输层-会话层-表示层-应用层&#xff09;对应协…...

在 Qt 中实现动态切换主题(明亮和暗黑)

目录 步骤 1&#xff1a;准备主题文件步骤 2&#xff1a;将 QSS 文件加入资源系统步骤 3&#xff1a;创建主题管理类步骤 4&#xff1a;在应用程序中切换主题步骤 5&#xff1a;处理自定义控件和动态资源步骤 6&#xff1a;保存用户主题偏好步骤 7&#xff1a;处理图片资源切换…...

JavaEE 初阶文件操作与 IO 详解

一、文件操作基础&#xff1a;File 类 作用&#xff1a;操作文件或目录&#xff08;创建、删除、获取信息&#xff09;。 核心方法&#xff1a; exists()&#xff1a;文件是否存在createNewFile()&#xff1a;创建新文件mkdir()&#xff1a;创建目录delete()&#xff1a;删除…...

基于Qt的app开发第十天

写在前面 笔者昨天刚刚收到课设的截止时间要求&#xff0c;距离写这篇博客的时间还有一个月&#xff0c;我从申请自命题课设到今天已经27天了&#xff0c;先用两周时间学Qt&#xff0c;然后就开始做这个项目&#xff0c;现在已经快把基础功能全部实现了。 目前的打算是完成基础…...

QT中信号和事件的区别

好的&#xff0c;简单来说&#xff0c;Qt 的信号&#xff08;Signal&#xff09;和事件&#xff08;Event&#xff09;虽然都用于组件间通信和交互&#xff0c;但它们的机制和用途是不同的&#xff1a; 1. 信号&#xff08;Signal&#xff09; 概念&#xff1a;信号是对象发出的…...

AUTOSAR图解==>AUTOSAR_SRS_PWMDriver

AUTOSAR PWM驱动模块详解 基于AUTOSAR 4.4.0 SRS 规范文档 目录 1. PWM驱动概述2. PWM驱动架构3. PWM驱动配置4. PWM驱动API接口5. PWM驱动状态管理6. PWM驱动典型应用场景7. 总结1. PWM驱动概述 AUTOSAR PWM驱动是AUTOSAR基础软件中的一个重要组件,属于微控制器抽象层(MCAL)…...

SQL数据处理流程

一、数据处理 1、数据清洗 对空值处理&#xff1a;删除/填充为0 -- 用 0 填充 NULL SELECT COALESCE(sales, 0) AS sales FROM orders;-- 删除含 NULL 的记录 DELETE FROM users WHERE email IS NULL; COALESCE(bonus, 0) 相当于IF(bonus IS NULL, 0, bonus)&#xff0c;当…...

Mysql差异备份与恢复

1.练习差异备份 差异备份&#xff1a;备份完全备份后&#xff0c;新产生的数据。 在192.168.88.50主机完成差异备份 步骤一&#xff1a;练习差异备份//周一完全备份 mysql> select * from test.one; --------------------- | name | age | sex | ------------------…...

目标检测 Lite-DETR(2023)详细解读

文章目录 迭代高级特征跨尺度融合高效的低层次特征跨尺度融合KDA&#xff1a;Key-aware Deformable Attention 论文翻译&#xff1a; CVPR 2023 | Lite DETR&#xff1a;计算量减少60%&#xff01;高效交错多尺度编码器-CSDN博客 DINO团队的 &#xff08;Lightweight Transfo…...

【Java学习方法】类变量

类变量 引出关键字&#xff1a;static 又名&#xff1a;静态变量&#xff0c;静态字段&#xff0c;类字段&#xff08;字段又名属性&#xff0c;成员方法&#xff09;&#xff0c;类属性 是什么&#xff1f; 供该&#xff08;同一个类&#xff09;的所有对象共享的变量 &am…...

智能手表为什么需要做 EN 18031 认证?

EN 18031 是欧盟针对电磁兼容性&#xff08;EMC&#xff09;中人体暴露于电磁场的安全要求制定的标准&#xff0c;全称为 《Electromagnetic compatibility (EMC) - Standards for protective measures against electromagnetic fields with regard to human exposure》&#x…...

什么是 Agent 的 Message

Messages 2.4.1 概述 什么是 Agent 的 Message&#xff1f; 当你和朋友聊天、在网上搜索信息或是对手机语音助手说“帮我查一下天气”时&#xff0c;其实你都在向某个“代理者(Agent)”发送一条“信息(Message)”。这里的“代理者”既可以是一个人&#xff0c;也可以是一个能执…...

如何用JAVA手写一个Tomcat

一、初步理解Tomcat Tomcat是什么&#xff1f; Tomcat 是一个开源的 轻量级 Java Web 应用服务器&#xff0c;核心功能是 运行 Servlet/JSP。 Tomcat的核心功能&#xff1f; Servlet 容器&#xff1a;负责加载、实例化、调用和销毁 Servlet。 HTTP 服务器&#xff1a;监听端口…...

WebRTC与RTSP|RTMP的技术对比:低延迟与稳定性如何决定音视频直播的未来

引言 音视频直播技术已经深刻影响了我们的生活方式&#xff0c;尤其是在教育、医疗、安防、娱乐等行业中&#xff0c;音视频技术成为了行业发展的重要推动力。近年来&#xff0c;WebRTC作为一种开源的实时通信技术&#xff0c;成为了音视频领域的重要选择&#xff0c;它使得浏览…...

COMPUTEX 2025 | 广和通创新解决方案共筑AI交互新纪元

5月20日至23日&#xff0c;广和通携多领域创新解决方案亮相2025年台北国际电脑展&#xff08;COMPUTEX 2025&#xff09;&#xff0c;台北南港展览馆#K0727a展位。此次展会&#xff0c;广和通围绕“Advancing Connectivity Intelligent Future”为主题&#xff0c;设置四大核心…...

COMPUTEX 2025 | 广和通率先发布基于MediaTek T930 平台的5G模组FG390

5月19日&#xff0c;全球领先的无线通信模组和AI解决方案提供商广和通率先发布基于MediaTek T930平台的5G模组FG390系列。FG390系列模组为以5G固定无线接入&#xff08;Fixed Wireless Access&#xff0c;FWA&#xff09;为代表的MBB终端产品而设计&#xff0c;将在CPE&#xf…...

Power Integrations 汽车电源管理方案:为汽车应用增加系统价值

在新能源汽车产业蓬勃发展的当下&#xff0c;高效的电源管理方案成为提升汽车性能与可靠性的关键。近期&#xff0c;Power Integrations 举办线上交流会&#xff0c;介绍了基于其 1700V InnoSwitch3-AQ 反激式开关 IC 的五款全新参考设计&#xff0c;旨在为 800V 纯电动汽车提供…...

汽车转向系统行业2025数据分析报告

汽车转向系统市场概况 2024年全球汽车转向系统市场规模约为2769.4亿元&#xff0c;预计到2031年将增长至3296.3亿元&#xff0c;年均复合增长率&#xff08;CAGR&#xff09;为2.5%。这一增长主要得益于汽车行业的持续发展以及转向系统技术的不断进步。 市场驱动因素 汽车转…...

Tiny C 编译器中,如何实现宏展开和头文件包含的预处理逻辑?

首先&#xff0c;预处理的主要功能包括宏展开、头文件包含、条件编译等。用户的问题主要集中在宏展开和头文件包含&#xff0c;所以需要分别考虑这两个部分。 关于宏展开&#xff0c;首先需要解析#define指令。编译器在预处理阶段需要维护一个符号表&#xff0c;用来存储宏的名…...

谈谈 Kotlin 中的构造方法,有哪些注意事项?

在 Kotlin 中&#xff0c;构造方法分为主构造方法&#xff08;Primary Constructor&#xff09;和次构造方法&#xff08;Secondary Constructor&#xff09;。 1 主构造方法 主构造方法是类的核心构造方法&#xff0c;直接在类头声明&#xff0c;位于类名之后。 1.1 基本语…...

Elasticsearch常用命令

以下是 Elasticsearch 查看集群状态配置和索引完整操作流程的详细命令: 一、查看集群状态与配置 1. 集群健康状态 curl -X GET "localhost:9200/_cluster/health?pretty" 关键参数: level=indices:显示每个索引的健康状态 level=shards:显示每个分片的详细状…...

深入解读RTP协议:RFC 3550的技术分析与应用

引言 实时传输协议&#xff08;RTP&#xff09;&#xff0c;作为一项重要的技术规范&#xff0c;在多媒体通信中扮演着至关重要的角色。尤其在音视频传输中&#xff0c;RTP为媒体流提供了端到端的传输机制&#xff0c;能够支持高质量、低延迟的音视频数据流传输。随着互联网及…...

使用 electron-builder 打包与发布 Electron 应用

基于 electron-vite-vue 项目结构 本文将基于 electron-vite-vue 脚手架&#xff0c;详细介绍如何使用 electron-builder 实现&#xff1a; ✅ 多平台打包&#xff08;Windows / macOS / Linux&#xff09;✅ 自动更新发布配置✅ 常用构建脚本与输出结构 &#x1f4c1; 项目结…...

命令行删除node_modules

文章目录 前言一、linux二、windows 前言 最近公司在重构项目&#xff0c;使用的monorepo&#xff0c;这就导致多个项目有多个node_modules。所以在主项目的package.json中写一个清除所有项目的node_modules。第一次研究命令行的代码&#xff0c;记录一下。但我感觉我写的不太…...

naive-ui切换主题

1、在App.vue文件中使用 <script setup lang"ts"> import Dashboard from ./views/dashboard/index.vue import { NConfigProvider, NGlobalStyle, darkTheme } from naive-ui import { useThemeStore } from "./store/theme"; // 获取存储的主题类…...

开源Vue表单设计器FcDesigner中组件联动的配置教程

在用FcDesigner表单开发中&#xff0c;经常需要实现组件之间的联动行为&#xff0c;例如当某个输入框的值满足特定条件时&#xff0c;动态显示或隐藏其他组件。FormCreate 提供了强大的组件联动功能&#xff0c;通过 control 配置项实现组件的加载、显示、禁用和必填等状态控制…...

使用 Shadcn UI 构建 Java 桌面应用

许多桌面应用程序&#xff0c;如 Slack、Notion、Microsoft Teams 和 Linear&#xff0c;都采用基于 Web 的用户界面。这已成为现代软件开发中的常见做法&#xff0c;开发者可以借助熟悉的 Web 技术构建应用&#xff0c;从而简化开发流程。 在本篇文章中&#xff0c;我们将向您…...

25_05_19Linux实战篇、第一章_01若依前后端部署之路(后端)

Linux_实战篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;若依前后端动静分离(后端 ) 版本号: 1.0,0 作者: 老王要学习 日期: 2025.05.20 适用环境: Rocky9.5 文档说明 本文围绕 Linux 实战展开&#x…...