2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题全过程文档加程序
2024年第十四届MathorCup高校数学建模挑战赛
A题 移动通信网络中PCI规划问题
原题再现:
物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少物理层的小区间互相干扰(ICI),增加物理下行控制信道(PDCCH)的吞吐量有着重要的作用,尤其是对于基站小区覆盖边缘的用户和发生信号切换的用户,能有效地降低信号干扰,提升用户的体验。
在一个移动通信系统中,PCI的数量是十分有限的,但实际网络中小区的数量巨大,因此必须对PCI进行复用,这就带来了PCI资源的合理复用配置的问题。错误的PCI配置方式会显著地增加下行网络的ICI,从而会严重影响网络质量。为了降低ICI,在进行PCI规划时需要综合地考虑同频邻区之间的三种场景:PCI冲突、PCI混淆以及PCI模3干扰。
在无线通信系统中,如果小区i的主控连接的设备同时可以接收到小区j的信号,则称小区j为小区i的邻区。如果小区j与小区i的频点相同,则小区j是小区i的同频邻区。如果小区i的某主控连接设备接收到小区i的信号强度pi与邻区j的信号强度pj的差小于等于给定门限δ,即pi-pj≤δ,则称小区j为小区i的重叠覆盖邻区。
PCI冲突发生在主控小区和其同频邻区分配了相同的PCI的情况下,如图1所示,小区1和它的一个同频邻小区2被分配了相同的PCI值A,此时便会发生PCI冲突。应被小区1连接的用户设备可能会错误地连接到小区2,但小区1才是真正要连接的目标小区。由于对于用户设备来说很难有效地区分场强相差不大的小区1和小区2的信号,错误的连接判断最终会导致无线信号服务的中断,最终导致下行网络资源的错误分配。
PCI 混淆通常发生在一个主控小区的两个或者多个同频邻区之间,如图 2 所示。设小区 1 的两个邻小区 2 和 3 被分配了相同的 PCI 值 B,当小区 1 中的用户由于移动等原因需要切换连接到小区 2 时,由于小区 2 和小区 3 的 PCI 相同,用户很可能错误的切换到小区 3。PCI 混淆会导致下行网络中的用户在进行服务切换时的信号中断和资源的错误分配。
PCI 模 3 干扰发生在主控小区和其同频重叠覆盖邻区分配的 PCI 模 3
相同的情况下,如图 3 所示,小区 1 和它的一个同频重叠覆盖邻小区 2 被分配了模 3 相同的 PCI 值(例如小区 1 分配的 PCI 是 1,小区 2 分配的 PCI是 7,则小区 1 和 2 的 PCI 模 3 的值相同,都是 1),此时便会发生 PCI 模3 干扰。当 PCI 模 3 干扰现象发生时,由于小区 1 和小区 2 的参考信号的相互叠加,用户设备接收的信号质量会明显的下降,同时这种现象会造成CQI的错误评估和下行网络的延迟。
PCI规划问题的目标就是,给每个小区分配PCI,使网络中的PCI冲突、混淆和模3干扰的尽量的少。
实际网络中,表示PCI冲突混淆和模3干扰数量的方式有很多,可以
用路测数据点的情况,也可以对整个城市进行栅格化用所有栅格的情况,这些方法中,网优部门最常用的就是测量报告(MR)数据。MR数据是UE设备在通信过程中定时上报的报告,每条MR数据中,主要包括UE通信时接入的主控小区及接收到的邻区信息以及相应的信号强度值。由于测量报告是定间隔时间上报,因此MR数据的分布情况基本可以反映业务量的分布情况。同时,由于MR数据在时间和空间上的全面性,因此用MR数据的冲突、混淆和模3干扰的数量,来反映网络中的PCI指标,是比较准确的。
基于MR数据的PCI规划问题具体为:给定N个小区,遍历这些小区的全部MR数据,生成3个N×N的矩阵,分别为:
● 冲突矩阵A=[a_ij]_N×N,其中若小区i和j同频,则a_ij的值为小区i为主控,j为邻区的MR数量,否则a_ij的值为0。
● 混淆矩阵B=[b_ij]_N×N,其中若小区i和j同频,则b_ij的值为小区i和j同时为另一个小区k的邻区的MR数量,否则b_ij的值为0。
● 干扰矩阵C=[c_ij]_N×N,其中若小区i和j同频,则c_ij的值为小区i为主控,j为i的重叠覆盖邻区的MR数量,否则c_ij的值为0。若小区i和j分配相同的PCI值,则冲突数增加a_ij,混淆数增加b_ij+b_ji,如果小区i和j分配的PCI模3的值相同,则模3干扰数增加c_ij+c_ji。实际网络中,总共可分配的PCI是0到1007共1008个。根据附件提供的数据,对某区域中2067个小区进行PCI规划。
问题1:给这2067个小区重新分配PCI,使得这2067个小区之间的冲突MR数、混淆MR数和模3干扰MR数的总和最少。
问题2:考虑冲突、混淆和干扰的不同优先级,给这2067个小区重新分配PCI,也是考虑这2067个小区之间的冲突、混淆和模3干扰。首先保证冲突的MR数降到最低,在此基础上保证混淆的MR数降到最低,最后尽量降低模3干扰的MR数。实际网络中,给这2067个小区重新分配PCI,会对这些小区以外的一些距离较近的小区产生影响,也就是这些小区和外围小区之间会产生冲突、混淆和模3干扰的MR数的变化。
问题3:给这2067个小区重新分配PCI,使得所有可能被影响到的小区间的冲突MR数、混淆MR数和模3干扰MR数的总和最少。
问题4:考虑冲突、混淆和干扰的不同优先级,给这2067个小区重新分配PCI,也是考虑所有可能被影响到的小区间的冲突、混淆和模3干扰。首先保证冲突的MR数降到最低,在此基础上保证混淆的MR数降到最低,最后尽量降低模3干扰的MR数。
整体求解过程概述(摘要)
5G 技术的深化与发展显著提升了通信速度,这种高速通信体验为人们的日常生活和工作带来了极大的便利。PCI是网络中用来标识每个物理小区的数字,它是基站配置的一部分,PCI的选择与规划对网络性能有着重要影响。不合理的PCI分配方案会导致用户设备发生信号干扰、网络拥塞、切换到错误小区等问题。考虑到PCI在无线通信中的重要作用,6G作为未来的通信技术很有可能还会继续沿用,而对于数量有限的PCI码,不可避免地会被不同小区重复使用,因此解决这类问题对提高用户上网体验具有十分重大的现实意义。
本文对待解决的PCI 规划分配的四种问题,均使用模因算法作为主体框架,它是一种结合基于种群的全局搜索和局部搜索的优化技术。在种群的进化中,我们使用基于K-锦标赛的选择方案,通过两种交叉算子,分别为二进制匹配交叉和两点交叉,以及一个变异算子来帮助种群在前中期的快速收敛。并以拉马克进化方式使用我们针对此类问题设计的四个启发式的局部搜索算子对个体进行改进,拉马克进化的思想是后天获取的特征可以遗传给下一代,本算法中体现的是经过四个局部搜索算子改进后的个体,可以参与种群的进化中,这有助于将优质PCI分配方案的特征传递给下一代,同时我们还使用精英策略,这将进一步提升模型的搜索性能。在具体实现上,我们以Visual Studio Code 为主要软件编程求解,在四个待求解问题上取得优异的效果。
针对问题一:构建以最小化待优化小区之间的总PCI冲突MR数、混淆MR数、模3 干扰MR数之和为目标函数的单目标规划模型,并建立相关约束条件。通过上述进化算法框架对目标函数进行优化,经过一定次数的迭代后,我们找到了目标函数值为26833855 的解,并且到最后还有持续降低的趋势,具体收敛过程如图3-10,体现算法模型具备强大的搜索能力。事实上在四个问题所提供的数据上,我们大约都是给计算机1到2小时左右运行得出的结果,通过相关曲线可以明显看出,模型在算法后期仍然具有求得更优质解的能力,这是因为我们在模型中通过各种优质的局部搜索算子与基于种群的全局搜索,它们在邻域空间上形成互补关系,在一定次数后总是存在几率跳出当前的局部最小值,从而向全局最优值更进一步。
针对问题二:我们将模型优化过程分为三个阶段,第一阶段以最小化冲突MR数为目标函数。第二阶段以最小化混淆 MR 数为目标函数,并新增关于冲突 MR 数的约束,即优化过程中保存冲突MR数不大于第一阶段结束时的最小值。第三阶段实现模3干扰MR数的优化,类似的,以前两个阶段的结果作为约束条件进行优化。在三个阶段的优化中,均使用固定的模因算法模型,体现模型在不同场景下的适应性。在一定迭代次数后,我们的模型将冲突MR数和混淆MR数都优化到0,模 3干扰MR数为28079222,并还在持续降低,并非模型所能找到的极限最优解,具体收敛过程如图4-2。
针对问题三:问题三考虑的是所有小区的冲突MR数、混淆MR数以及干扰MR数。由于问题的高度相似性,因此我们在问题一的基础上修改了目标函数设计的部分的算法,即可适用于问题三直接求解。我们同样在随机一次实验上,将目标函数值优化到31374770,且目标函数曲线仍然在持续下降,继续给予时间将获得更优质的解,如图51。
针对问题四:类似的,我们对模型的只需要在问题二的基础上,修改目标函数计算部分的极少量相关算法代码,即可实现问题求解。在一定迭代次数后,我们的模型同样将冲突MR数和混淆MR数都优化到了最优的0,另外模3干扰MR数为31531882,如图6-1。
模型假设:
假设1、各小区的频点不变
假设2、各小区的相对位置和形状不变
假设3、在模型中上传MR信息的用户设备UE所在位置不变
假设4、用户设备UE能及时且准确无误地上传相应MR信息
假设5、通信网络内不发生任何会影响模型计算的设备故障
假设6、MR数据与时间无关
假设7、重新分配PCI码后,MR数据不变
假设8、每个小区都必须且只能分配一个PCI值
问题分析:
问题一的分析
问题一所描述的是一个带约束的单目标组合优化问题,它要求我们给 2067 个小区设计PCI分配方案,使得小区之间产生的PCI冲突MR数、PCI混淆MR数、以及PCI模3干扰MR数之和最少,可以将冲突MR数、混淆MR数和模3干扰MR数之和直接作为目标函数进行优化。在大规模优化问题上,以动态规划、整数规划等为代表的精确算法难以高效求解,启发式或元启发式算法是解决PCI规划问题的较好选择,基于问题解空间的庞大性,设计了一种多模因的模因算法模型来实现此问题,能够很好的做到全局搜索,同时又具备强大的局部求精能力。
问题二的分析
问题二要求我们考虑冲突、混淆、干扰的优先级,需要的是找到一种PCI分配方案,使得冲突MR数达到最小,冲突MR数达到最优的情况下让混淆MR数尽可能小,并且不破坏冲突MR数、混淆MR数最优的前提下最后再优化模3干扰MR数。与第一题的区别在于目标函数的不同,从问题一的单目标优化转变为多目标优化。 在此我们构建一个多层优化模型,PCI分配方案为一个解,首先设计第一个目标函数计算最优的冲突MR数,记录当前的PCI分配方案;在此基础上,设计第二个目标函数,让冲突MR数不再增大的约束下,对PCI分配方案进行更新,尝试找到满足约束条件下的更优解,使得混淆MR数尽可能小,并记录当前最优的PCI分配方案;最后再通过第三个目标函数计算PCI模3干扰的MR数,扰动当前解,找到一个不增加前两个目标函数值情况下使得模3干扰MR数降到最小的解。由此将一个带约束的多层优化问题转化为三个带约束的单目标优化问题,便于高效求解。 所设计的多个模因算子在三个目标函数下发挥的性能不完全相同,我们的优化模型可以灵活的调整不同算子的权重来契合三个目标函数,在这种分层优化模式下模型可以发挥更出色的性能。
问题三的分析
问题三是问题一的扩展,更加符合现实的网络结构,它要求我们考虑附件一中其他小区的情况。在调整给定2067个小区PCI分配方案后,不仅有可能改变这些小区内的PCI 冲突、混淆和模3干扰的状态,而且可能与它们相邻的小区之间发生冲突MR数、混淆MR数和模3干扰MR数的变化。本题只需要在问题一的模型基础上略微修改对PCI 分配方案的评价函数即可。
问题四的分析
同样的,问题四在问题二的基础上,额外考虑了其他小区的情况,求解思路仍然是分层级去优化,与问题三类似地,本题只需要在问题二的基础上,调整对PCI分配方案的评价函数模块即可。
模型的建立与求解整体论文缩略图
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
部分程序代码:
from deap import algorithms, base, creator, tools# 1. 定义目标函数和个体编码
def evaluate(individual):# 计算冲突、混淆、模3干扰MR数return (sum(conflict_mr + confusion_mr + mod3_mr),)creator.create("FitnessMin", base.Fitness, weights=(-1.0,))
creator.create("Individual", list, fitness=creator.FitnessMin)# 2. 注册遗传操作
toolbox = base.Toolbox()
toolbox.register("attr_pci", random.randint, 0, 1007)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_pci, n=小区数量)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)toolbox.register("mate", tools.cxTwoPoint) # 两点交叉
toolbox.register("mutate", tools.mutUniformInt, low=0, up=1007, indpb=0.05) # 均匀变异
toolbox.register("select", tools.selTournament, tournsize=3)
toolbox.register("evaluate", evaluate)import numpy as np
import random
import math
import timeclass PCIOptimizer:def __init__(self, N, PCI_range, A, B, C):self.N = Nself.PCI_range = PCI_rangeself.A = A # 冲突矩阵self.B = B # 混淆矩阵self.C = C # 干扰矩阵# 预处理邻区关系self.conflict_edges = self._preprocess_edges(self.A)self.confusion_edges = self._preprocess_edges(self.B)self.interf_edges = self._preprocess_edges(self.C)def _preprocess_edges(self, matrix):"""将邻接矩阵转换为稀疏邻区列表"""edges = [[] for _ in range(self.N)]for i in range(self.N):for j in range(self.N):if i != j and matrix[i][j] > 0:edges[i].append( (j, matrix[i][j]) )return edgesdef _compute_initial_cost(self, pci):"""计算初始总代价"""total = 0# 冲突代价for i in range(self.N):for j, w in self.conflict_edges[i]:if pci[i] == pci[j]:total += w# 混淆代价for i in range(self.N):for j, w in self.confusion_edges[i]:if j > i and pci[i] == pci[j]:total += w # 避免重复计算# 模3干扰for i in range(self.N):mod_i = pci[i] % 3for j, w in self.interf_edges[i]:if mod_i == (pci[j] % 3):total += wreturn totaldef _compute_delta(self, i, old_pci, new_pci, pci):"""计算单点变更的代价变化"""delta = 0# 冲突变化for j, w in self.conflict_edges[i]:if pci[j] == old_pci:delta -= wif pci[j] == new_pci:delta += w# 混淆变化for j, w in self.confusion_edges[i]:if pci[j] == old_pci:delta -= wif pci[j] == new_pci:delta += w# 模3干扰变化old_mod = old_pci % 3new_mod = new_pci % 3for j, w in self.interf_edges[i]:current_mod = pci[j] % 3if current_mod == old_mod:delta -= wif current_mod == new_mod:delta += wreturn deltadef optimize(self, max_iter=10000, temp=1000, cooling_rate=0.95):"""模拟退火优化"""current_pci = [random.randint(0, self.PCI_range-1) for _ in range(self.N)]current_cost = self._compute_initial_cost(current_pci)best_pci = current_pci.copy()best_cost = current_costfor step in range(max_iter):# 生成新解i = random.randint(0, self.N-1)old_val = current_pci[i]new_val = random.choice([x for x in range(self.PCI_range) if x != old_val])# 计算代价变化delta = self._compute_delta(i, old_val, new_val, current_pci)# 决定是否接受if delta < 0 or math.exp(-delta/(temp + 1e-6)) > random.random():current_pci[i] = new_valcurrent_cost += deltaif current_cost < best_cost:best_pci = current_pci.copy()best_cost = current_cost# 动态降温temp *= cooling_rate# 进度输出if step % 100 == 0:print(f"Iter {step}: Temp={temp:.2f}, Cost={best_cost}")return best_pci, best_cost# 数据加载函数
def load_matrix(file_path, N):matrix = np.zeros((N, N), dtype=int)with open(file_path, 'r') as f:for line in f:parts = line.strip().split()i = int(parts[0])j = int(parts[1])val = int(parts[2])matrix[i][j] = valreturn matrix# 参数设置
N = 2067
PCI_range = 1008
conflict_file = 'conflict.txt'
confusion_file = 'confusion.txt'
interf_file = 'interf.txt'# 加载数据
print("Loading matrices...")
A = load_matrix(conflict_file, N)
B = load_matrix(confusion_file, N)
C = load_matrix(interf_file, N)# 运行优化
optimizer = PCIOptimizer(N, PCI_range, A, B, C)
print("Starting optimization...")
start_time = time.time()
best_pci, best_cost = optimizer.optimize(max_iter=5000, temp=1000, cooling_rate=0.99)
print(f"Optimization completed in {time.time()-start_time:.2f}s")
print(f"Minimum total MR: {best_cost}")# 保存结果
with open('optimized_pci.txt', 'w') as f:for pci in best_pci:f.write(f"{pci}\n")
#### 全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
相关文章:
2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题全过程文档加程序
2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现: 物理小区识别码(PCI)规划是移动通信网络中下行链路层上,对各覆盖小区编号进行合理配置,以避免PCI冲突、PCI混淆以及PCI模3干扰等现象。PCI规划对于减少…...
本周安全速报(2025.3.18~3.24)
合规速递 01 2025欧洲网络安全报告:DDoS攻击同比增长137%,企业应如何应对? 原文: https://hackread.com/european-cyber-report-2025-137-more-ddos-attacks/ 最新的Link11《欧洲网络安全报告》揭示了一个令人担忧的趋势:DDo…...
力扣刷题-热题100题-第23题(c++、python)
206. 反转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-linked-list/solutions/551596/fan-zhuan-lian-biao-by-leetcode-solution-d1k2/?envTypestudy-plan-v2&envIdtop-100-liked 常规法 记录前一个指针,当前指针&am…...
YAML是什么?
YAML(YAML Ain’t Markup Language)是一种以数据为中心、高度可读的序列化语言,广泛应用于配置文件、数据交换和自动化工具中。以下从多个维度对其进行全面解析: 1. 定义与历史演变 全称与定位: YAML的全称最初为“Yet…...
期权交易投资怎么操作?新手期权操作指南
期权就是股票,唯一区别标的物上证指数,会看大盘吧,新手做期权交易两个方向认购做多,认沽做空,双向t0交易没了,跟期货一样,对的,玩的也是合约,唯一区别没有保证金不会爆仓…...
音视频学习(三十):fmp4
FMP4(Fragmented MP4)是 MP4(MPEG-4 Part 14)的扩展版本,它支持流式传输,并被广泛应用于DASH(Dynamic Adaptive Streaming over HTTP)和HLS(HTTP Live Streaming…...
破局AI落地困局 亚信科技“四位一体手术刀“切开产业智能三重枷锁
当全球进入以AI为核心竞争力的新经济周期,政企机构的数字化转型正面临关键转折点:IDC数据显示,2023年超过67%的中国企业在AI落地环节遭遇"技术断层",高昂的试错成本与碎片化解决方案让智能转型陷入僵局。在此背景下&…...
android 去掉状态栏的方法汇总
在 Android 开发中,隐藏或去除状态栏(Status Bar)有多种方法,具体实现方式取决于应用场景和目标 Android 版本。以下是常用的 6 种方法及其代码示例: 在 Android 开发中,隐藏或去除状态栏(Sta…...
jenkins+1panel面板java运行环境自动化部署java项目
本文章不包含1panel面板安装、jenkins部署、jenkins连接git服务器等操作教程,如有需要可以抽空后期补上 jenkins安装插件Publish Over SSH 在系统配置添加服务器 查看项目的工作空间 项目Configure->构Post Steps选择Send files or execute commands over SSH…...
VLAN综合实验报告
一、实验拓扑 网络拓扑结构包括三台交换机(LSW1、LSW2、LSW3)、一台路由器(AR1)以及六台PC(PC1-PC6)。交换机之间通过Trunk链路相连,交换机与PC、路由器通过Access或Hybrid链路连接。 二、实验…...
雷军从 6 楼扔涂有防弹涂层西瓜,西瓜完好无损,这种防弹涂层是什么材质?用在车上效果怎么样?
雷军展示的“防弹涂层”是一种基于第四代高分子材料聚脲(Polyurea)的升级技术,其核心特性是通过纳米级交联结构形成弹性防护层,兼具柔韧性与刚性,能够有效吸收冲击能量并抵御尖锐物体的穿刺。以下是关于该涂层材质及在…...
信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖
信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖 题目背景 WSR 的学校有 B B B 个男生和 G G G 个女生都来到一个巨大的操场上扫地。 题目描述 操场可以看成是 N N N 行 M M M 列的方格矩阵,如下…...
数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server)
数据库联表Sql语句建一个新表(MySQL,Postgresql,SQL server) 如果你想基于 SELECT USERS.ID,USERS.NAME,USERS.EMAIL,USERS.ID_CARD,USERS.V_CARD,USERS.ADDRESS,v_card.type,v_card.amount FROM USERS JOIN v_card on USERS.V_CARDv_card.v_card 这个查询结果创建一个新表&am…...
【Go】结构体的基本使用
go语言不是面向对象的语言 但是结构体类似于面向对象 结构体的定义 package mainimport "fmt"type Student struct {id intname stringage intschool string }func main() {s : Student{1, "luobozi", 18, "znl"}fmt.Println(s) }结构…...
统计可重复列表中的TOP N
文章目录 方案1:HashMap统计 全排序实现步骤:代码实现:优缺点: 方案2:HashMap统计 最小堆(优先队列)实现步骤:代码实现:优缺点: 方案3:Java Str…...
《jQuery Mobile 页面:深入解析与优化实践》
《jQuery Mobile 页面:深入解析与优化实践》 引言 jQuery Mobile 是一个流行的前端框架,专为移动设备设计,提供了丰富的UI组件和简洁的API,使得开发者可以快速构建出美观且响应式的移动页面。本文将深入解析jQuery Mobile的页面构建方法,并探讨一些优化实践,以帮助开发…...
C#中 String类API(函数)
字符串属性 string str "打工人";Console.WriteLine(str);char s str[0];Console.WriteLine(s); 字符串内置API(函数) 1. Concat 拼接字符串 string s1 "打";string s2 "工";string s3 "人";string sthstring.Concat(s1, s2, s…...
【Linux 维测专栏 5 -- linux pstore 使用介绍】
文章目录 Linux pstore 功能简介1. pstore 概述2. pstore 的核心功能3. pstore 的工作原理4. pstore 的使用示例5. pstore 的优势6. 典型应用场景配置示例1)DTS配置2)config配置运行测试及log问题小结Linux pstore 功能简介 1. pstore 概述 pstore(Persistent Storage)是…...
AI赋能:科技写作的革新之路
在当今数字化时代,人工智能(AI)技术正以惊人的速度渗透到各个领域,科技写作也不例外。AI不仅改变了写作的方式,还极大地提升了写作的效率和质量。本文将探讨AI技术在科技写作中的应用,并分享一些实用的AI工…...
如何为你的github开源项目选择合适的开源协议?
如何为你的github开源项目选择合适的开源协议? 导言 在github开源世界中,选择一个合适的开源协议是至关重要的。它不仅定义了他人如何使用你的代码,还决定了你的项目能否被广泛接受和传播,还能避免侵权问题。 然而,面…...
struts2漏洞攻略
S2-057远程执行代码漏洞 靶场: /struts2/s2-057 1,搭建好环境后访问 http://47.108.150.249:8081/struts2-showcase/ 2,在url处进行输⼊ 在url输入http://47.108.150.249:8081/struts2-showcase/${(123123)}/actionChain1.action 后刷新可…...
LVGL学习1
LVGL知识点 架构图 参考:Getting Started — LVGL documentation display、screen、widget的关系 参考: Widget Basics — LVGL documentation Overview — LVGL documentation 简单说,display就是硬件的显示设备,也就是一个一…...
【SpringCloud】微服务的治理以及服务间的远程调用
目录 一、微服务的诞生 二、服务注册和发现 2.1 需求的产生 2.2 注册中心原理 2.3 Nacos注册中心 2.4 Nacos安装部署教程 2.5 配置Nacos 三、OpenFeign 3.1 认识OpenFeign 3.2 快速入门 3.2.1 引入依赖 3.2.2 启动OpenFeign 3.2.3 编写OpenFeign客户端 3.2.4 使…...
钞票准备好了吗?鸿蒙电脑 5 月见
3月20日,在华为 Pura 先锋盛典及鸿蒙智行新品发布会上,华为常务董事、终端BG董事长、智能汽车解决方案BU董事长余承东表示,华为终端全面进入鸿蒙时代,今年5月将推出鸿蒙电脑。 在3月20日的华为Pura先锋盛典及鸿蒙智行新品发布会上…...
【2025】基于springboot+uniapp的企业培训打卡小程序设计与实现(源码、万字文档、图文修改、调试答疑)
基于 Spring Boot uniapp 的企业培训打卡小程序设计与实现 系统功能结构图如下: 一、课题背景 在当今快节奏的商业环境中,企业培训对于员工的成长和企业的发展至关重要。为了满足企业对高效培训管理和员工便捷学习的需求,基于 Spring Boot …...
poetry安装与使用
文章目录 安装方法虚拟环境构建方法* 创建新虚拟环境【新环境使用】* 使用仓库拉取的代码构建虚拟环境【远端仓库拉取使用】 常用命令注意事项 安装方法 安装命令(全局安装,不要在虚拟环境中安装,方便后面创建环境使用) pip3 inst…...
聊聊langchain4j的Code Execution Engine
序 本文主要研究一下langchain4j的Code Execution Engine 步骤 pom.xml <dependency><groupId>dev.langchain4j</groupId><artifactId>langchain4j-code-execution-engine-graalvm-polyglot</artifactId><version>1.0.0-beta2</ver…...
军事级加密通信系统——基于QML的战术地图加密传输
目录 基于QML的战术地图加密传输一、引言二、理论背景与安全需求2.1 战术地图数据的敏感性与安全性要求2.2 QML与PyQt5集成优势2.3 加密算法与数据传输模型三、系统架构与数据流图四、QML前端界面设计与交互功能4.1 QML界面优势与设计理念4.2 功能要求4.3 QML文件示例五、加密传…...
ffmpeg系列(三)—— 音频重采样
SwrContext 一、SwrContext 的重要字段 SwrContext 是音频重采样的核心配置对象,其关键字段决定了重采样的行为和性能。以下是常用字段及其作用: 字段名称类型作用典型值示例in_sample_rateint输入音频的采样率(Hz)。44100out_…...
android Kotlin原理
目录 一,概述 1.1 kotlin协程序原理: 1.2 核心概念 二,协程调度器之Dispatchers 三,协程能进行线程恢复的原理 一,概述 1.1 kotlin协程序原理: 1,内部线程池管理线程使用到了自旋和挂起 2,传统的线程之所以重,是因为线程的执行,等待唤醒需要操作系统来完成 …...
MyBatis-Plus(Ⅲ)IService详解
目录 一、逐一演示 1.save(插入一条) 结果 断言(引入概念) 2.saveBatch(批量插入) 结果 3.saveOrUpdateBatch(批量插入&更新) 结果 4.removeById(通过id删除…...
2024年认证杯SPSSPRO杯数学建模C题(第二阶段)云中的海盐全过程文档及程序
2024年认证杯SPSSPRO杯数学建模 C题 云中的海盐 原题再现: 巴黎气候协定提出的目标是:在2100年前,把全球平均气温相对于工业革命以前的气温升幅控制在不超过2摄氏度的水平,并为1.5摄氏度而努力。但事实上,许多之前的…...
PostgreSQL 存储过程
简介 PostgreSQL 中的存储过程(Stored Procedure)是一种在数据库中定义的可重复使用的程序单元,用于封装复杂的业务逻辑和数据处理操作 示例 简单示例 创建存储过程 CREATE PROCEDURE insert_users (user_account TEXT, hashed_password…...
GGUF 和 llama.cpp 是什么关系
这是个非常关键的问题,咱们来细说下:GGUF 和 llama.cpp 是什么关系,它们各自干什么,如何配合工作。 🔧 一、llama.cpp 是什么? llama.cpp 是 Meta 的开源大语言模型 LLaMA(Language Model from…...
(UI自动化测试web端)第二篇:元素定位的方法_class定位
看代码里的【 driver.find_element_by_class_name( )】()里的路径怎么写? 那我们现在说的就是在元素定位时,根据网页的实际情况来选择适合的元素定位的写法。文章主要介绍了class定位在正常工作当中的使用。 第三种定位 方式:class定位 ⽅法…...
闲聊IT - 面向服务架构(SOA)的发展历史
SOA的发展历史 面向服务架构(SOA)是随着企业信息化进程的发展逐渐形成的,它的出现是为了应对传统软件架构在现代企业复杂需求面前的局限性。SOA的起源和发展过程可以追溯到20世纪90年代末期,并随着互联网技术的普及、分布式计算以…...
31天Python入门——第9天:再学函数
你好,我是安然无虞。 文章目录 再学函数1. 变量在函数中的作用域2. 函数的参数传递.补充学习: 不定长参数*args和**kwargs 3. 值传递和引用传递补充学习: 把函数作为参数传递 4. 匿名函数5. python中内置的常用函数zip()map()filter()all()any() 6. 函数练习 再学函…...
卡特兰数在数据结构上面的运用
原理 Catalan数是一个数列,其第n项表示n个不同结点可以构成的二叉排序树的数量。Catalan数的第n项公式为:  其中,是组合数,表示从2n个元素中选择n个元素的组合数。 Catalan数的原理可以通过以下方式理解&…...
如何分析和解决服务器的僵尸进程问题
### 如何分析和解决服务器的僵尸进程问题 #### **一、僵尸进程的定义与影响** **僵尸进程(Zombie Process)** 是已终止但未被父进程回收资源的进程。其特点: - **状态标识**:在进程列表(如 ps 或 top)中标…...
Kafka分区分配策略详解
Kafka分区分配策略详解 Kafka作为当前最流行的分布式消息队列系统,其分区分配策略直接影响着系统的性能、可靠性和可扩展性。合理的分区分配不仅能够提高数据处理的效率,还能确保系统负载的均衡。 Kafka提供了多种内置的分区分配策略,包括R…...
Vs code搭建uniapp-vue项目
安装vue环境npm install -g vue/clinode版本建议18或者18以上 vue create -p dcloudio/uni-preset-vue 项目名称----正式版vue create -p dcloudio/uni-preset-vue#alpha 项目名称----alpha版Vue3/Vite版 npx degit dcloudio/uni-preset-vue#vite 项目名称---js-正式版npx degi…...
cursor常用快捷键(JetBrains Darcula主题风格)
一、基础操作速查 打开/创建项目 打开项目:Ctrl Shift O(选择文件夹)新建文件:Ctrl N保存文件:Ctrl S关闭当前标签页:Ctrl F4 代码编辑 复制当前行:Ctrl D删除当前行:Ctrl …...
easyExcel2.2.10中为0数据显示为空
在 EasyExcel 2.2.10 中,如果希望将数值为 0 的数据在 Excel 中显示为空(即不显示 0),可以通过以下方法实现: 1. 使用 ExcelProperty 的 format 参数 通过设置单元格格式为 #(# 会忽略 0)&…...
Walrus 经济模型 101
本文作者:Steve_4P,文章仅代表作者观点。 要点总结 2025 年 3 月 20 日,Walrus 基金会宣布成功融资 约 1.4 亿美元,投资方包括 Standard Crypto、a16z 等机构。Walrus 当前估值约 20 亿美元,其中 7% 代币供应量分配给…...
WordPress二次开发中常用到的一些变量和函数
WordPress是一个开源的博客软件平台,由于其强大的功能和灵活性,被广泛用于各种网站的建设。对于开发者来说,了解并掌握WordPress中的常用变量和函数是非常重要的。在WordPress二次开发中,以下是一些常用的变量和函数: …...
【视频】OpenCV:色彩空间转换、灰度转伪彩
1、颜色空间转换 使用OpenCV的函数 cv::applyColorMap 可以将灰度或者正常的RGB格式图片,转换成其它伪彩色,代码很简单: 1)使用 cv::imread 加载图片; 2)使用 std::vector<cv::Mat> matrices 暂存转换后的所有图像; 3)使用 cv::applyColorMap 转换图片颜色; 4)…...
淘宝历史价格数据获取指南:API 与爬虫方案的合法性与效率对比
引言 在淘宝平台的购物生态中,消费者希望通过了解商品历史价格来判断当前价格是否实惠,商家也需要借助历史价格数据制定合理的营销策略、分析市场趋势。获取淘宝商品历史价格数据主要有 API 和爬虫两种方案,它们在合法性与效率上存在显著差异…...
【Redis】高性能内存数据库的多场景应用
在现代互联网应用的开发版图中,Redis 凭借其卓越的性能和丰富的数据结构,成为了众多开发者不可或缺的技术利器。作为一款基于内存的高性能数据库,Redis 不仅能提供快速的数据读写操作,还能在多种复杂的应用场景中发挥关键作用。本…...
Pycharm社区版创建Flask项目详解
一、创建工程项目 二、配置工程目录 新建的空项目下创建目录。 1、新建app.py文件 2、app.py代码如下: from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主页:return: Index.html"&qu…...
鸿蒙NEXT开发案例:程序员计算器
【环境准备】 • 操作系统:Windows 10 • 开发工具:DevEco Studio 5.0.1 Release Build Version: 5.0.5.306 • 目标设备:华为Mate60 Pro • 开发语言:ArkTS • 框架:ArkUI • API版本:API 13 【项目…...