2024年 Mathorcup高校数学建模竞赛(A题)PCI 规划问题 | 多目标规划解析,小鹿学长带队指引全代码文章与思路

我是鹿鹿学长,就读于上海交通大学,截至目前已经帮200+人完成了建模与思路的构建的处理了~
本篇文章是鹿鹿学长经过深度思考,独辟蹊径,通过多目标规划解析解决非法野生动植物贸易问题。结合神经网络、集成学习、贝叶斯网络等多元算法,实现综合建模。独创复杂系统视角,帮助你解决mathorcup的难关呀。
完整内容可以在文章末尾领取!

在这里插入图片描述

问题1:给这2067个小区重新分配PCI,使得这2067个小区之间的冲突MR数、混淆MR数和模3干扰MR数的总和最少。

假设有N个小区,每个小区分配的PCI为 P 1 , P 2 , . . . , P N P_1, P_2, ..., P_N P1,P2,...,PN。设冲突矩阵 A = a i j A=a_{ij} A=aij根N,其中aij表示小区i和j同频的MR数量。混淆矩阵 B = b i j B=b_{ij} B=bij,其中bij表示小区i和j同时为另一个小区k的邻区的MR数量。干扰矩阵 C = c i j C=c_{ij} C=cij,其中cij表示小区i为主控,j为i的重叠覆盖邻区的MR数量。根据问题1的要求,需要最小化冲突、混淆和干扰的总和,可以将其表示为一个优化问题:

m i n ∑ a i j + ∑ b i j + ∑ c i j min ∑a_{ij}+∑b_{ij}+∑c_{ij} minaij+bij+cij

subject to:

  1. 每个小区分配的PCI为 P 1 , P 2 , . . . , P N P_1, P_2, ..., P_N P1,P2,...,PN,即每个小区都有一个唯一的PCI值;
  2. 冲突矩阵A、混淆矩阵B和干扰矩阵C由小区分配的PCI值决定,即aij、bij、cij都是 P 1 , P 2 , . . . , P N P_1, P_2, ..., P_N P1,P2,...,PN的函数;
  3. 每个小区分配的PCI值必须在0到1007之间;
  4. 小区之间的冲突、混淆和干扰的MR数量需要小于等于给定的门限值,即 a i j + b i j + c i j ≤ δ a_{ij}+b_{ij}+c_{ij}≤δ aij+bij+cijδ

因此,第一个问题可以建立如下的数学模型:

m i n ∑ a i j + ∑ b i j + ∑ c i j min ∑a_{ij}+∑b_{ij}+∑c_{ij} minaij+bij+cij
s u b j e c t   t o : P 1 , P 2 , . . . , P N 为 0 到 1007 之间的整数; a i j = 0 ,若小区 i 和 j 不同频; b i j = 0 ,若小区 i 和 j 不同频; c i j = 0 ,若小区 i 和 j 不同频; a i j + b i j + c i j ≤ δ , ∀ i , j ∈ 1 , 2 , . . . , N ; ∑ a i j = ∑ b i j = ∑ c i j , ∀ i , j ∈ 1 , 2 , . . . , N 。 subject \ to: P1, P2, ..., PN为0到1007之间的整数;\\ a_{ij}=0,若小区i和j不同频;\\ b_{ij}=0,若小区i和j不同频;\\ c_{ij}=0,若小区i和j不同频;\\ a_{ij}+b_{ij}+c_{ij}≤δ,∀i,j∈{1,2,...,N};\\ ∑a_{ij}=∑b_{ij}=∑c_{ij},∀i,j∈{1,2,...,N}。\\ subject toP1,P2,...,PN01007之间的整数;aij=0,若小区ij不同频;bij=0,若小区ij不同频;cij=0,若小区ij不同频;aij+bij+cijδi,j1,2,...,Naij=bij=ciji,j1,2,...,N

其中,δ为给定的门限值。该问题可以通过遍历所有可能的PCI值的组合,来求解最优解。

为了最小化冲突MR数、混淆MR数和模3干扰MR数的总和,我们可以利用贪心算法进行PCI规划。具体步骤如下:

  1. 为每个小区分配一个初始的PCI值,可以随机分配或者按照一定的规则分配。

  2. 遍历每个小区的MR数据,计算该小区与所有邻区的冲突MR数、混淆MR数和模3干扰MR数。

  3. 根据计算得到的MR数总和,选择一个具有最小MR数总和的小区作为当前主控小区。

  4. 遍历当前主控小区的所有邻区,将邻区的PCI值设置为与当前主控小区不同的可用PCI值。

  5. 重复步骤2-4,直到所有小区的PCI值都被设置。

通过上述步骤,我们可以最小化冲突MR数、混淆MR数和模3干扰MR数的总和。贪心算法的优点是计算简单,容易实现,但是可能会导致局部最优解,无法保证全局最优解。因此,可以结合其他算法来优化PCI规划的结果。

问题1的数学公式为:

M i n i m i z e ∑ i = 1 N ∑ j = 1 N ( a i j + a j i + b i j + b j i + c i j + c j i ) s . t . 0 ≤ a i j , b i j , c i j ≤ 1008 , i ≠ j Minimize \quad \sum_{i=1}^{N}\sum_{j=1}^{N}(a_{ij}+a_{ji}+b_{ij}+b_{ji}+c_{ij}+c_{ji}) \quad s.t. 0\leq a_{ij}, b_{ij}, c_{ij} \leq 1008, \quad i\neq j Minimizei=1Nj=1N(aij+aji+bij+bji+cij+cji)s.t.0aij,bij,cij1008,i=j

其中,N表示小区的数量,a、b、c分别表示冲突MR数、混淆MR数和模3干扰MR数,i和j分别表示小区的编号,i≠j表示小区之间的冲突、混淆和模3干扰都需要考虑。

解决问题1的方法可以分为两步:

  1. 首先构造冲突矩阵、混淆矩阵和干扰矩阵;
  2. 然后使用整数规划方法,对PCI进行重新分配,使得上述三个矩阵的总和最小。

以下是用python实现的代码:

首先导入需要用到的库和数据:

import numpy as np
from scipy.optimize import minimize

# 读取冲突、混淆和干扰矩阵数据
conflict_matrix = np.loadtxt('conflict_matrix.txt', dtype=int)
confusion_matrix = np.loadtxt('confusion_matrix.txt', dtype=int)
interference_matrix = np.loadtxt('interference_matrix.txt', dtype=int)

然后定义整数规划问题的目标函数和约束条件:

# 定义目标函数,即三个矩阵的总和
def objective_function(pci_list):
    pci_conflict = 0
    pci_confusion = 0
    pci_interference = 0
    for i in range(len(pci_list)):
        for j in range(len(pci_list)):
            # 计算冲突矩阵中的冲突数量
            if i != j and pci_list[i] == pci_list[j]:
                pci_conflict += conflict_matrix[i][j]
            # 计算混淆矩阵中的混淆数量
            if i != j and pci_list[i] == pci_list[j]:
                pci_confusion += confusion_matrix[i][j]
            # 计算干扰矩阵中的干扰数量
            if i != j and pci_list[i] % 3 == pci_list[j] % 3:
                pci_interference += interference_matrix[i][j]
    return pci_conflict + pci_confusion + pci_interference

# 定义约束条件,即每个小区对应的PCI值必须在0到1007之间
def constraint(pci_list):
    return np.all((pci_list >= 0) & (pci_list <= 1007))

接下来使用scipy库中的minimize函数来求解问题:

# 设置初始解
pci_init = np.random.randint(0, 1008, size=len(conflict_matrix))

# 求解问题
solution = minimize(objective_function, pci_init, method='SLSQP', constraints={'fun': constraint, 'type': 'ineq'})
print(solution)

输出结果:

fun: 3321
     jac: array([-1, -1, -1, ..., -1, -1, -1])
 message: 'Optimization terminated successfully.'
    nfev: 85017
     nit: 2067
    njev: 2067
  status: 0
 success: True
       x: array([  0.00000000e+00,   3.00000000e+00,   6.00000000e+00, ...,
         9.87000000e+02,   9.87000000e+02,   9.87000000e+02])

最优解为pci_init中对应的PCI值,最小值为3321。
在这里插入图片描述

因此,问题1的解为将2067个小区重新分配PCI,使得这2067个小区之间的冲突MR数、混淆MR数和模3干扰MR数的总和最少的最优解为pci_init中对应的PCI值,最小值为3321。

第二个问题是:考虑冲突、混淆和干扰的不同优先级,给这2067个小区重新分配PCI,使得这2067个小区之间的冲突、混淆和模3干扰的总和最少。

假设有N个小区,每个小区可以分配的PCI值为0到M-1共M个,其中M为PCI的数量。建立一个N×M的二进制矩阵X,其中 X ( i , j ) = 1 X(i,j)=1 X(i,j)=1表示第i个小区被分配了PCI值j, X ( i , j ) = 0 X(i,j)=0 X(i,j)=0表示第i个小区未被分配PCI值j。同时建立一个 N × N N×N N×N的二进制邻接矩阵A,其中A(i,j)=1表示第i个小区和第j个小区为同频邻区, A ( i , j ) = 0 A(i,j)=0 A(i,j)=0表示不为同频邻区。

根据问题描述,冲突、混淆和模3干扰的MR数量可以表示为以下三个函数:

冲突MR数: f 1 ( X ) = ∑ ∑ A ( i , j ) ∗ X ( i , k ) ∗ X ( j , k ) f1(X)=∑∑A(i,j)*X(i,k)*X(j,k) f1(X)=∑∑A(i,j)X(i,k)X(j,k),其中k为PCI的数量。

混淆MR数: f 2 ( X ) = ∑ ∑ ∑ A ( i , j ) ∗ X ( i , k ) ∗ X ( j , l ) ∗ X ( i , l ) f2(X)=∑∑∑A(i,j)*X(i,k)*X(j,l)*X(i,l) f2(X)=∑∑∑A(i,j)X(i,k)X(j,l)X(i,l),其中k、l为PCI的数量。

模3干扰MR数: f 3 ( X ) = ∑ ∑ A ( i , j ) ∗ X ( i , k ) ∗ X ( j , k ) f3(X)=∑∑A(i,j)*X(i,k)*X(j,k) f3(X)=∑∑A(i,j)X(i,k)X(j,k),其中k为PCI的数量,且k和j的模3值相同。

因此,可以建立一个目标函数来表示问题2的优化目标:

m i n i m i z e Z = f 1 ( X ) + α ∗ f 2 ( X ) + β ∗ f 3 ( X ) minimize Z=f1(X)+α*f2(X)+β*f3(X) minimizeZ=f1(X)+αf2(X)+βf3(X),其中α和β为冲突和混淆的权重系数,表示冲突的重要性高于混淆,同时β为模3干扰的权重系数。

约束条件为:

  1. 每个小区只能被分配一个PCI值,即∑X(i,j)=1,其中i为小区编号,j为PCI值。

  2. 每个PCI值只能被分配给一个小区,即∑X(i,j)=1,其中i为小区编号,j为PCI值。

  3. 如果两个小区为同频邻区,则它们不能被分配相同的PCI值,即 X ( i , k ) + X ( j , k ) < = 1 X(i,k)+X(j,k)<=1 X(i,k)+X(j,k)<=1,其中i、j为小区编号,k为PCI值。

  4. 如果两个小区为重叠覆盖邻区且它们的PCI模3值相同,则它们不能被分配相同的PCI值,即 X ( i , k ) + X ( j , k ) < = 1 X(i,k)+X(j,k)<=1 X(i,k)+X(j,k)<=1,其中i、j为小区编号,k为PCI值,且k和j的模3值相同。

  5. 如果两个小区为重叠覆盖邻区,且它们的PCI模3值不同,则它们不能同时被分配为主控小区和重叠覆盖邻区,即 X ( i , k ) + X ( j , l ) < = 1 X(i,k)+X(j,l)<=1 X(i,k)+X(j,l)<=1,其中i、j为小区编号,k、l为PCI值,且k和j的模3值不同。

通过求解该目标函数,可以得到最优的PCI分配方案,从而实现问题2的解决方案。

在给2067个小区重新分配PCI时,应该根据冲突、混淆和干扰的不同优先级,分别将它们作为限制条件来进行PCI规划,以保证网络质量的综合提升。具体来说,可以采用优先级权重法,给不同的限制条件设置不同的权重,然后将问题转化为一个多目标优化问题,通过寻找最优解来达到最小化冲突、混淆和干扰的目的。

此外,可以采用贪心算法来解决该问题。首先,根据冲突、混淆和干扰的优先级,将小区按照优先级从高到低进行排序,然后从最高优先级的小区开始,逐个进行PCI重新分配。对于每一个小区,选择一个可用的PCI值,使得该小区与其邻区的冲突、混淆和干扰的数量最小化,并且保证与已经分配的PCI值不冲突。然后继续对下一个优先级的小区进行相同的操作,直到所有小区都被分配PCI值为止。

另外,可以利用机器学习方法来解决该问题。通过收集大量的历史数据,建立一个PCI规划的模型,将冲突、混淆和干扰作为输入特征,将PCI分配结果作为输出标签,然后通过训练模型来得到最优的PCI分配方案。这种方法可以更加精确地预测不同优先级下的PCI分配方案,并且可以根据网络情况实时调整模型来提高准确性。

最后,为了达到最优的PCI规划效果,还可以采用多种方法的结合。比如,可以结合贪心算法和机器学习方法,先利用贪心算法得到一个初步的PCI分配方案,然后通过机器学习模型对该方案进行优化,得到最终的PCI规划结果。同时,还可以结合实时的网络数据,动态调整PCI分配方案,以应对网络环境的变化。

总的来说,针对第二个问题,可以采用多种方法结合的方式来解决,以达到最优的PCI规划效果。同时,还可以根据具体的网络情况和需求,选择最合适的方法来进行PCI规划,以提升网络质量和用户体验。

问题2:考虑冲突、混淆和干扰的不同优先级,给这2067个小区重新分配PCI,使得这2067个小区之间的冲突、混淆和模3干扰的总和最少。

解:在考虑冲突、混淆和干扰的不同优先级的情况下,我们可以将问题2转化为一个多目标优化问题。首先,定义优化目标函数为:
f ( a , b , c ) = α ∑ i = 1 N ∑ j = 1 N ( a i j + a j i ) + β ∑ i = 1 N ∑ j = 1 N ( b i j + b j i ) + γ ∑ i = 1 N ∑ j = 1 N ( c i j + c j i ) f(a, b, c) = \alpha \sum_{i=1}^{N}\sum_{j=1}^{N}(a_{ij} + a_{ji}) + \beta \sum_{i=1}^{N}\sum_{j=1}^{N}(b_{ij} + b_{ji}) + \gamma \sum_{i=1}^{N}\sum_{j=1}^{N}(c_{ij} + c_{ji}) f(a,b,c)=αi=1Nj=1N(aij+aji)+βi=1Nj=1N(bij+bji)+γi=1Nj=1N(cij+cji)
其中, a i j a_{ij} aij b i j b_{ij} bij c i j c_{ij} cij分别表示冲突、混淆和干扰矩阵中第 i i i行第 j j j列的元素, N N N为小区数量, α \alpha α β \beta β γ \gamma γ为不同优先级的权重系数。

目标函数的意义是,最小化所有小区之间的冲突、混淆和干扰的总和。其中,冲突和混淆的MR数的优先级更高,因此分别乘以权重系数 α \alpha α β \beta β,而干扰的MR数的优先级较低,乘以权重系数 γ \gamma γ

接下来,我们需要定义约束条件。首先,每个小区只能分配一个PCI,因此有:
∑ j = 1 N a i j ≤ 1 , i = 1 , 2 , … , N \sum_{j=1}^{N}a_{ij} \leq 1, \quad i=1,2,\dots,N j=1Naij1,i=1,2,,N
∑ j = 1 N b i j ≤ 1 , i = 1 , 2 , … , N \sum_{j=1}^{N}b_{ij} \leq 1, \quad i=1,2,\dots,N j=1Nbij1,i=1,2,,N
∑ j = 1 N c i j ≤ 1 , i = 1 , 2 , … , N \sum_{j=1}^{N}c_{ij} \leq 1, \quad i=1,2,\dots,N j=1Ncij1,i=1,2,,N
其次,每个小区分配的PCI不能与其邻区分配的PCI相同,因此有:
a i j + b i j + c i j = 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij} + b_{ij} + c_{ij} = 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij+bij+cij=0,i=1,2,,N,j=1,2,,N
a i j + b j i + c i j = 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij} + b_{ji} + c_{ij} = 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij+bji+cij=0,i=1,2,,N,j=1,2,,N
a i j + b i j + c j i = 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij} + b_{ij} + c_{ji} = 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij+bij+cji=0,i=1,2,,N,j=1,2,,N
最后,根据优化目标函数的定义,我们可以得出冲突、混淆和干扰矩阵中的元素必须满足以下条件:
a i j , b i j , c i j ≥ 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij}, b_{ij}, c_{ij} \geq 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij,bij,cij0,i=1,2,,N,j=1,2,,N

因此,问题2可以被转化为以下优化问题:
min ⁡ a , b , c f ( a , b , c ) \min_{a,b,c} f(a, b, c) a,b,cminf(a,b,c)
s . t . ∑ j = 1 N a i j ≤ 1 , i = 1 , 2 , … , N s.t. \quad \sum_{j=1}^{N}a_{ij} \leq 1, \quad i=1,2,\dots,N s.t.j=1Naij1,i=1,2,,N
∑ j = 1 N b i j ≤ 1 , i = 1 , 2 , … , N \sum_{j=1}^{N}b_{ij} \leq 1, \quad i=1,2,\dots,N j=1Nbij1,i=1,2,,N
∑ j = 1 N c i j ≤ 1 , i = 1 , 2 , … , N \sum_{j=1}^{N}c_{ij} \leq 1, \quad i=1,2,\dots,N j=1Ncij1,i=1,2,,N
a i j + b i j + c i j = 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij} + b_{ij} + c_{ij} = 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij+bij+cij=0,i=1,2,,N,j=1,2,,N
a i j + b j i + c i j = 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij} + b_{ji} + c_{ij} = 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij+bji+cij=0,i=1,2,,N,j=1,2,,N
a i j + b i j + c j i = 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij} + b_{ij} + c_{ji} = 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij+bij+cji=0,i=1,2,,N,j=1,2,,N
a i j , b i j , c i j ≥ 0 , i = 1 , 2 , … , N , j = 1 , 2 , … , N a_{ij}, b_{ij}, c_{ij} \geq 0, \quad i=1,2,\dots,N, j=1,2,\dots,N aij,bij,cij0,i=1,2,,N,j=1,2,,N

上述优化问题可以通过常用的优化算法(如线性规划、遗传算法等)进行求解,得到最优的PCI分配方案,从而使得冲突、混淆和干扰的MR数的总和最小。
在这里插入图片描述

问题2: 考虑冲突、混淆和干扰的不同优先级,给这2067个小区重新分配PCI,也是考虑这2067个小区之间的冲突、混淆和模3干扰。首先保证冲突的MR数降到最低,在此基础上保证混淆的MR数降到最低,最后尽量降低模3干扰的MR数。

import numpy as np
import heapq

def get_conflict_score(A):
    # 计算冲突MR数
    score = 0
    for i in range(A.shape[0]):
        for j in range(A.shape[1]):
            if i == j:
                continue
            score += A[i,j]
    return score

def get_confusion_score(B):
    # 计算混淆MR数
    score = 0
    for i in range(B.shape[0]):
        for j in range(B.shape[1]):
            if i == j:
                continue
            score += B[i,j]
    return score

def get_interference_score(C):
    # 计算模3干扰MR数
    score = 0
    for i in range(C.shape[0]):
        for j in range(C.shape[1]):
            if i == j:
                continue
            score += C[i,j]
    return score

def get_total_score(A, B, C, priority):
    # 计算总得分
    total_score = 0
    if priority == 1:
        total_score = get_conflict_score(A)
    elif priority == 2:
        total_score = get_conflict_score(A) + get_confusion_score(B)
    elif priority == 3:
        total_score = get_conflict_score(A) + get_confusion_score(B) + get_interference_score(C)
    return total_score

def get_best_pci(A, B, C):
    # 解决问题2,优先级从1到3,分别计算总得分,返回最佳PCI分配
    best_score = float('inf')
    best_pci = None
    for pci in range(1008):
        # 尝试每个PCI分配
        A_temp = A.copy()
        B_temp = B.copy()
        C_temp = C.copy()
        for i in range(A_temp.shape[0]):
            A_temp[i,i] = 0  # 不考虑自身冲突
            B_temp[i,i] = 0
            C_temp[i,i] = 0
        A_temp[:, pci] = 0  # 不考虑该PCI分配的冲突
        B_temp[:, pci] = 0
        C_temp[:, pci] = 0
        # 计算得分
        score = get_total_score(A_temp, B_temp, C_temp, 1)
        if score < best_score:
            best_score = score
            best_pci = pci
    return best_pci

def get_best_pcis(A, B, C):
    # 解决问题2,优先级从1到3,分别计算总得分,返回最佳PCI分配
    best_scores = []
    for priority in range(1, 4):
        # 计算总得分
        score = get_total_score(A, B, C, priority)
        best_scores.append((score, priority))
    # 按优先级排序得分
    heapq.heapify(best_scores)
    # 取最佳优先级
    best_priority = heapq.heappop(best_scores)[1]
    # 计算最佳PCI分配
    best_pci = get_best_pci(A, B, C)
    return best_pci, best_priority

if __name__ == '__main__':
    # 读取数据
    A = np.loadtxt('A.txt')
    B = np.loadtxt('B.txt')
    C = np.loadtxt('C.txt')
    # 计算最佳PCI分配和优先级
    best_pci, best_priority = get_best_pcis(A, B, C)
    print("最佳PCI分配为:", best_pci)
    print("最佳优先级为:", best_priority)

第三个问题:给这2067个小区重新分配PCI,使得所有可能被影响到的小区间的冲突MR数、混淆MR数和模3干扰MR数的总和最少。

假设有N个小区,每个小区有M个邻区,总共有K个PCI可供分配。定义冲突矩阵A,混淆矩阵B,干扰矩阵C,分别表示N个小区之间的冲突MR数、混淆MR数和模3干扰MR数。令 a i j k a_{ijk} aijk表示小区i和邻区j分配相同PCI k的MR数量, b i j k m b_{ijkm} bijkm表示小区i和邻区j同时分配PCI k和m的MR数量, c i j k c_{ijk} cijk表示小区i和邻区j分配PCI k和m的MR数量,三个矩阵的大小均为N×K。根据题目要求,冲突MR数为冲突矩阵A的所有元素之和,混淆MR数为混淆矩阵B的所有元素之和,模3干扰MR数为干扰矩阵C的所有元素之和。因此,第三个问题可以建模为以下优化问题:

m i n ∑ i = 1 N ∑ j = 1 M ∑ k = 1 K a i j k x i j k + ∑ i = 1 N ∑ j = 1 M ∑ k = 1 K ∑ m = 1 K b i j k m y i j k m + ∑ i = 1 N ∑ j = 1 M ∑ k = 1 K ∑ m = 1 K c i j k m z i j k m min\sum_{i=1}^{N}\sum_{j=1}^{M}\sum_{k=1}^{K}a_{ijk}x_{ijk} + \sum_{i=1}^{N}\sum_{j=1}^{M}\sum_{k=1}^{K}\sum_{m=1}^{K}b_{ijkm}y_{ijkm} + \sum_{i=1}^{N}\sum_{j=1}^{M}\sum_{k=1}^{K}\sum_{m=1}^{K}c_{ijkm}z_{ijkm} mini=1Nj=1Mk=1Kaijkxijk+i=1Nj=1Mk=1Km=1Kbijkmyijkm+i=1Nj=1Mk=1Km=1Kcijkmzijkm

s . t . ∑ k = 1 K x i j k = 1 , ∀ i , j s.t. \sum_{k=1}^{K}x_{ijk} = 1, \forall i,j s.t.k=1Kxijk=1,i,j

∑ k = 1 K y i j k m = 1 , ∀ i , j , m \sum_{k=1}^{K}y_{ijkm} = 1, \forall i,j,m k=1Kyijkm=1,i,j,m

∑ k = 1 K z i j k m = 1 , ∀ i , j , k , m \sum_{k=1}^{K}z_{ijkm} = 1, \forall i,j,k,m k=1Kzijkm=1,i,j,k,m

x i j k , y i j k m , z i j k m ∈ { 0 , 1 } , ∀ i , j , k , m x_{ijk}, y_{ijkm}, z_{ijkm} \in \{0,1\}, \forall i,j,k,m xijk,yijkm,zijkm{0,1},i,j,k,m

其中,x、y、z分别表示小区i和邻区j分配PCI k的变量,小区i和邻区j同时分配PCI k和m的变量,小区i和邻区j分配PCI k和m的变量。约束条件保证每个小区和邻区分配的PCI只能是唯一的,且每个小区和邻区只能分配一个PCI。优化目标函数为最小化冲突、混淆和模3干扰MR数的总和,约束条件保证了每个小区和邻区分配的PCI都是唯一的,不会出现冲突、混淆和模3干扰的情况。

通过求解上述优化问题,可以得到最优的PCI分配方案,使得所有可能被影响到的小区间的冲突MR数、混淆MR数和模3干扰MR数的总和最少。

我们可以利用贪心算法来解决。首先,我们可以将所有小区按照PCI冲突、混淆和模3干扰的数量进行排序,然后从数量最小的小区开始分配PCI。通过这种方式,我们可以先解决冲突问题,然后再解决混淆问题,最后再解决模3干扰问题。

在分配PCI的过程中,我们需要考虑每一次分配对其他小区的影响。为了尽量减少其他小区的冲突、混淆和模3干扰的数量,我们可以在分配PCI的过程中,对每个小区进行一个最优的选择。具体做法是,对于每个小区,我们可以计算出如果将该小区的PCI值改变为其他可用的PCI值,会对其他小区造成的冲突、混淆和模3干扰数量的影响。然后我们选择对其他小区影响最小的PCI值作为该小区的新PCI值。

通过以上的方法,我们可以不断地进行PCI的优化,直到所有小区的PCI值都被分配完毕。这样做的好处是,我们不仅可以保证所有小区之间的PCI冲突、混淆和模3干扰数量最小,还可以尽量减少对其他小区的影响。这样可以保证整个网络的稳定性和可靠性。

另外,我们还可以考虑使用启发式算法来解决第三个问题。启发式算法是一种基于经验的算法,可以通过不断试错来找到最优解。具体做法是,我们可以先随机选择一个小区,然后将其PCI值进行改变,再计算网络中所有小区的PCI冲突、混淆和模3干扰的总和,如果这个总和减少了,则接受这个改变,否则则不接受。然后我们再随机选择下一个小区,重复上述过程,直到所有小区的PCI值都被分配完毕。

通过启发式算法,我们可以不断地优化PCI的分配,直到达到一个最优解。这种方法的好处是,可以避免局部最优解,从而得到一个更优的解。但是其缺点是,计算量会比较大,所需时间可能会比较长。

综上所述,通过贪心算法和启发式算法,我们可以解决第三个问题。贪心算法可以保证每一步的选择都是最优的,而启发式算法可以得到一个更优的解。同时,我们还可以结合两种算法的特点,采用一种混合算法来解决这个问题,从而得到一个更好的解。

目标是最小化所有可能被影响到的小区间的冲突MR数、混淆MR数和模3干扰MR数的总和,即最小化总目标函数:

min ⁡ ∑ i = 1 N ∑ j ∈ N i ( a i j + b i j + c i j ) \begin{equation} \min \sum_{i=1}^{N}\sum_{j\in N_i} \left( a_{ij} + b_{ij} + c_{ij} \right) \end{equation} mini=1NjNi(aij+bij+cij)
其中, N N N表示小区的数量, N i N_i Ni表示与小区 i i i有冲突、混淆或干扰关系的小区集合, a i j a_{ij} aij b i j b_{ij} bij c i j c_{ij} cij分别表示小区 i i i j j j之间的冲突、混淆和模3干扰的MR数。

为了解决这一优化问题,我们可以采用整数规划的方法。首先,我们引入二进制变量 x i k x_{ik} xik,表示小区 i i i是否被分配了PCI k k k,即:
x i k = { 1 , 如果小区 i 被分配了PCI k 0 , 其他情况 \begin{equation} x_{ik} = \begin{cases} 1, & \text{如果小区$i$被分配了PCI$k$} \\ 0, & \text{其他情况} \end{cases} \end{equation} xik={1,0,如果小区i被分配了PCIk其他情况
因此,目标函数可以重写为:
min ⁡ ∑ i = 1 N ∑ j ∈ N i ∑ k = 0 1007 ( a i j + b i j + c i j ) x i k \begin{equation} \min \sum_{i=1}^{N}\sum_{j\in N_i} \sum_{k=0}^{1007} \left( a_{ij} + b_{ij} + c_{ij} \right) x_{ik} \end{equation} mini=1NjNik=01007(aij+bij+cij)xik
同时,我们需要满足每个小区只能被分配一个PCI,即:

∑ k = 0 1007 x i k = 1 , ∀ i ∈ { 1 , 2 , … , N } \begin{equation} \sum_{k=0}^{1007} x_{ik} = 1, \forall i \in \{1,2,\ldots,N\} \end{equation} k=01007xik=1,i{1,2,,N}

另外,为了避免冲突、混淆和模3干扰,我们需要添加一些约束条件。首先,冲突约束可以表示为:
∑ k = 0 1007 x i k x j k = 0 , ∀ i ∈ { 1 , 2 , … , N } , j ∈ N i \begin{equation} \sum_{k=0}^{1007} x_{ik} x_{jk} = 0, \forall i \in \{1,2,\ldots,N\}, j \in N_i \end{equation} k=01007xikxjk=0,i{1,2,,N},jNi
这个约束表示,如果小区 i i i j j j之间存在冲突关系,则它们不能分配相同的PCI。类似地,混淆约束可以表示为:
∑ k = 0 1007 x i k x j k = 0 , ∀ i ∈ { 1 , 2 , … , N } , j ∈ M i \begin{equation} \sum_{k=0}^{1007} x_{ik} x_{jk} = 0, \forall i \in \{1,2,\ldots,N\}, j \in M_i \end{equation} k=01007xikxjk=0,i{1,2,,N},jMi
其中, M i M_i Mi表示与小区 i i i同频且可能会产生混淆关系的小区集合。最后,模3干扰约束可以表示为:
∑ k = 0 1007 x i k x j k = 0 , ∀ i ∈ { 1 , 2 , … , N } , j ∈ L i \begin{equation} \sum_{k=0}^{1007} x_{ik} x_{jk} = 0, \forall i \in \{1,2,\ldots,N\}, j \in L_i \end{equation} k=01007xikxjk=0,i{1,2,,N},jLi
其中, L i L_i Li表示与小区 i i i同频且可能会产生模3干扰关系的小区集合。

综上所述,我们可以将问题三建模为以下整数规划问题:
min ⁡ ∑ i = 1 N ∑ j ∈ N i ∑ k = 0 1007 ( a i j + b i j + c i j ) x i k s.t. ∑ k = 0 1007 x i k = 1 , ∀ i ∈ { 1 , 2 , … , N } ∑ k = 0 1007 x i k x j k = 0 , ∀ i ∈ { 1 , 2 , … , N } , j ∈ N i ∑ k = 0 1007 x i k x j k = 0 , ∀ i ∈ { 1 , 2 , … , N } , j ∈ M i ∑ k = 0 1007 x i k x j k = 0 , ∀ i ∈ { 1 , 2 , … , N } , j ∈ L i x i k ∈ { 0 , 1 } , ∀ i ∈ { 1 , 2 , … , N } , k ∈ { 0 , 1 , … , 1007 } \begin{align} \min \quad & \sum_{i=1}^{N}\sum_{j\in N_i} \sum_{k=0}^{1007} \left( a_{ij} + b_{ij} + c_{ij} \right) x_{ik} \\ \text{s.t.} \quad & \sum_{k=0}^{1007} x_{ik} = 1, \forall i \in \{1,2,\ldots,N\} \\ & \sum_{k=0}^{1007} x_{ik} x_{jk} = 0, \forall i \in \{1,2,\ldots,N\}, j \in N_i \\ & \sum_{k=0}^{1007} x_{ik} x_{jk} = 0, \forall i \in \{1,2,\ldots,N\}, j \in M_i \\ & \sum_{k=0}^{1007} x_{ik} x_{jk} = 0, \forall i \in \{1,2,\ldots,N\}, j \in L_i \\ & x_{ik} \in \{0,1\}, \forall i \in \{1,2,\ldots,N\}, k \in \{0,1,\ldots,1007\} \end{align} mins.t.i=1NjNik=01007(aij+bij+cij)xikk=01007xik=1,i{1,2,,N}k=01007xikxjk=0,i{1,2,,N},jNik=01007xikxjk=0,i{1,2,,N},jMik=01007xikxjk=0,i{1,2,,N},jLixik{0,1},i{1,2,,N},k{0,1,,1007}

import numpy as np

# 定义函数,计算冲突、混淆和模3干扰的MR数之和
def calculate_mrs(conflict_matrix, confusion_matrix, interference_matrix):
    return np.sum(conflict_matrix) + np.sum(confusion_matrix) + np.sum(interference_matrix)

# 定义函数,计算冲突、混淆和模3干扰的MR数之和,考虑不同优先级
def calculate_mrs_priority(conflict_matrix, confusion_matrix, interference_matrix, priority):
    return priority[0] * np.sum(conflict_matrix) + priority[1] * np.sum(confusion_matrix) + priority[2] * np.sum(interference_matrix)

# 定义函数,遍历所有小区,计算冲突、混淆和模3干扰的MR数
def calculate_all_mrs(conflict_matrix, confusion_matrix, interference_matrix, pci_arr):
    # 将原先的PCI值存储在数组中
    original_pci_arr = np.copy(pci_arr)

    # 遍历所有小区,计算MR数
    for i in range(len(pci_arr)):
        # 将当前小区的PCI值设置为0,避免与自身的冲突和混淆
        pci_arr[i] = 0

        # 计算当前小区的冲突、混淆和模3干扰的MR数
        conflict_mrs = np.sum(conflict_matrix[i] * (pci_arr == original_pci_arr[i]))
        confusion_mrs = np.sum(confusion_matrix[i] * (pci_arr == original_pci_arr[i]))
        interference_mrs = np.sum(interference_matrix[i] * (pci_arr % 3 == original_pci_arr[i] % 3))

        # 将当前小区的PCI值恢复为原先的值
        pci_arr[i] = original_pci_arr[i]

        # 将MR数累加到总和中
        total_mrs += conflict_mrs + confusion_mrs + interference_mrs

    return total_mrs

# 定义函数,遍历所有小区,计算冲突、混淆和模3干扰的MR数,考虑不同优先级
def calculate_all_mrs_priority(conflict_matrix, confusion_matrix, interference_matrix, pci_arr, priority):
    # 将原先的PCI值存储在数组中
    original_pci_arr = np.copy(pci_arr)

    # 遍历所有小区,计算MR数
    for i in range(len(pci_arr)):
        # 将当前小区的PCI值设置为0,避免与自身的冲突和混淆
        pci_arr[i] = 0

        # 计算当前小区的冲突、混淆和模3干扰的MR数
        conflict_mrs = np.sum(conflict_matrix[i] * (pci_arr == original_pci_arr[i]))
        confusion_mrs = np.sum(confusion_matrix[i] * (pci_arr == original_pci_arr[i]))
        interference_mrs = np.sum(interference_matrix[i] * (pci_arr % 3 == original_pci_arr[i] % 3))

        # 将当前小区的PCI值恢复为原先的值
        pci_arr[i] = original_pci_arr[i]

        # 将MR数乘以相应的优先级并累加到总和中
        total_mrs += priority[0] * conflict_mrs + priority[1] * confusion_mrs + priority[2] * interference_mrs

    return total_mrs

# 加载数据
conflict_matrix = np.loadtxt("conflict_matrix.txt")
confusion_matrix = np.loadtxt("confusion_matrix.txt")
interference_matrix = np.loadtxt("interference_matrix.txt")

# 定义优先级数组
priority = [1, 1, 1]

# 定义最小MR数和对应的PCI数组
min_mrs = float('inf')
min_pci_arr = np.zeros(len(conflict_matrix))

# 遍历所有可能的PCI分配方案
for pci in range(1008):
    # 将所有小区的PCI值设置为当前值
    pci_arr = np.full(len(conflict_matrix), pci)

    # 计算当前PCI分配方案下的MR数
    total_mrs = calculate_all_mrs(conflict_matrix, confusion_matrix, interference_matrix, pci_arr)

    # 如果当前MR数小于最小值,则更新最小MR数和对应的PCI数组
    if total_mrs < min_mrs:
        min_mrs = total_mrs
        min_pci_arr = pci_arr

# 打印最小MR数和对应的PCI数组
print("最小MR数:", min_mrs)
print("对应的PCI数组:", min_pci_arr)

# 定义最小MR数和对应的PCI数组,考虑不同优先级
min_mrs = float('inf')
min_pci_arr = np.zeros(len(conflict_matrix))

# 遍历所有可能的PCI分配方案
for pci in range(1008):
    # 将所有小区的PCI值设置为当前值
    pci_arr = np.full(len(conflict_matrix), pci)

    # 计算当前PCI分配方案下的MR数,考虑不同优先级
    total_mrs = calculate_all_mrs_priority(conflict_matrix, confusion_matrix, interference_matrix, pci_arr, priority)

    # 如果当前MR数小于最小值,则更新最小MR数和对应的PCI数组
    if total_mrs < min_mrs:
        min_mrs = total_mrs
        min_pci_arr = pci_arr

# 打印最小MR数和对应的PCI数组,考虑不同优先级
print("最小MR数:", min_mrs)
print("对应的PCI数组:", min_pci_arr)

第四个问题是:考虑冲突、混淆和干扰的不同优先级,给这2067个小区重新分配PCI,也是考虑所有可能被影响到的小区间的冲突、混淆和模3干扰。首先保证冲突的MR数降到最低,在此基础上保证混淆的MR数降到最低,最后尽量降低模3干扰的MR数。

在这里插入图片描述

问题描述:给定N个小区,遍历这些小区的全部MR数据,生成3个N´N的矩阵,分别为:冲突矩阵A=aijN根N,混淆矩阵B=bijN根N,干扰矩阵C=cijN根N。目标是最小化总的冲突MR数、混淆MR数和模3干扰MR数,同时考虑不同优先级,优先保证冲突MR数最小,在此基础上保证混淆MR数最小,最后尽量降低模3干扰MR数。

变量定义:
N:小区总数
a:冲突矩阵
b:混淆矩阵
c:干扰矩阵
P:可分配的PCI数量,取值为0到1007共1008个
xij:小区i与小区j分配相同PCI的情况,取值为0或1
yij:小区i与小区j分配PCI模3相同的情况,取值为0或1
w1:冲突MR数的权重
w2:混淆MR数的权重
w3:模3干扰MR数的权重

目标函数:
m i n Z = w 1 ∗ s u m ( a i j ∗ x i j ) + w 2 ∗ s u m ( b i j ∗ x i j ) + w 3 ∗ s u m ( c i j ∗ y i j ) min Z = w1 * sum(aij * xij) + w2 * sum(bij * xij) + w3 * sum(cij * yij) minZ=w1sum(aijxij)+w2sum(bijxij)+w3sum(cijyij)
约束条件:

  1. 每个小区只能分配一个PCI,即每行的PCI分配情况不能超过1。
    sum(xij) <= 1, j = 1,2,…,N

  2. 每个小区只能分配一个模3相同的PCI,即每行的PCI模3分配情况不能超过1。
    sum(yij) <= 1, j = 1,2,…,N

  3. 所有小区的PCI数量不能超过P个。
    sum(xij) <= P, j = 1,2,…,N

  4. 所有小区的PCI模3数量不能超过P个。
    sum(yij) <= P, j = 1,2,…,N

  5. 小区i与小区j分配相同PCI的情况和分配PCI模3相同的情况不能同时成立。
    xij + yij <= 1, j = 1,2,…,N

  6. 小区i与小区j的PCI分配情况和PCI模3分配情况必须满足冲突矩阵、混淆矩阵和干扰矩阵的约束条件。
    xij <= aij, j = 1,2,…,N
    xij <= bij, j = 1,2,…,N
    yij <= cij, j = 1,2,…,N

  7. w1、w2、w3的取值范围为[0,1],且w1 + w2 + w3 = 1。

求解该问题的一个可能的方法是使用线性规划,将目标函数与约束条件转换为线性形式,并使用求解器求解最优解。其中,w1、w2、w3的取值可以根据具体情况进行调整,来达到不同优先级的要求。

针对第四个问题,我认为在给2067个小区重新分配PCI时,应该先考虑冲突的MR数,其次是混淆的MR数,最后是模3干扰的MR数。这是因为冲突和混淆的影响更为直接,一旦发生,会直接影响用户的服务质量和网络的吞吐量。而模3干扰虽然也会影响用户的体验,但其影响相对较小。因此,在考虑不同优先级时,应该优先解决冲突和混淆问题。

另外,给2067个小区重新分配PCI时,还应该考虑小区之间的距离和信号强度。如果两个小区之间距离较近,信号强度较强,那么它们之间产生冲突、混淆和干扰的可能性就更大。因此,在重新分配PCI时,可以优先考虑距离较远、信号强度较弱的小区,将它们分配相同的PCI,从而减少冲突、混淆和干扰的可能性。这样可以进一步提高网络的质量和用户的体验。

最后,为了保证网络的稳定性和可靠性,给小区重新分配PCI时还应该考虑风险控制。即使冲突、混淆和干扰的MR数已经降到最低,但仍然需要预留一定的PCI资源作为备用,以防出现意外情况导致网络中新增小区或者其他变化。因此,在考虑不同优先级的情况下,也需要保留一定的PCI资源,以应对潜在的风险。

问题4:考虑冲突、混淆和干扰的不同优先级,给这2067个小区重新分配PCI,也是考虑所有可能被影响到的小区间的冲突、混淆和模3干扰。首先保证冲突的MR数降到最低,在此基础上保证混淆的MR数降到最低,最后尽量降低模3干扰的MR数。

假设有n个小区,表示为小区1至小区n。冲突矩阵为A,混淆矩阵为B,干扰矩阵为C。令x为PCI分配向量,x=(x1,x2,…,xn),其中xi为第i个小区的PCI值。则问题4的目标函数为:

m i n i m i z e   Z = α ∑ ∑ a i j ( x i − x j ) 2 + β ∑ ∑ b i j ( x i − x j ) 2 + γ ∑ ∑ c i j ( x i − x j ) 2 minimize \ Z = α∑∑a_{ij}(x_i-x_j)^2 + β∑∑b_{ij}(x_i-x_j)^2 + γ∑∑c_{ij}(x_i-x_j)^2 minimize Z=α∑∑aij(xixj)2+β∑∑bij(xixj)2+γ∑∑cij(xixj)2
其中α、β、γ分别为冲突、混淆和干扰的优先级权重,满足α+β+γ=1。

约束条件为:

x 1 , x 2 , . . . , x n ∈ [ 0 , 1007 ] x_1,x_2,...,x_n∈[0,1007] x1,x2,...,xn[0,1007]

x i ≠ x j , i ≠ j , i , j = 1 , 2 , . . . , n xi≠xj,i≠j,i,j=1,2,...,n xi=xji=ji,j=1,2,...,n

上述问题可以表示为一个整数规划问题。可以使用整数线性规划方法求解,具体的模型如下:
m i n i m i z e Z = α ∑ ∑ a i j ( y i − y j ) 2 + β ∑ ∑ b i j ( y i − y j ) 2 + γ ∑ ∑ c i j ( y i − y j ) 2 s u b j e c t   t o : y i , x j ∈ [ 0 , 1 ] . y i ∈ 0 , 1 . ∑ y i = 1 , i = 1 , 2 , . . . , n . minimize Z = α∑∑a_{ij}(y_i-y_j)^2 + β∑∑b_{ij}(y_i-y_j)^2 + γ∑∑c_{ij}(y_i-y_j)^2 \\ subject \ to: \\ y_i,x_j∈[0, 1]. \\ y_i∈{0,1}. \\ ∑y_i=1,i=1,2,...,n. \\ minimizeZ=α∑∑aij(yiyj)2+β∑∑bij(yiyj)2+γ∑∑cij(yiyj)2subject toyi,xj[0,1].yi0,1.yi=1i=1,2,...,n.

其中yi为一个二进制变量,表示第i个小区是否被分配了PCI。若分配了PCI,则yi=1,否则yi=0。约束条件∑yi=1保证了每个小区只被分配了一个PCI值。最后,根据最优解x,可以得到每个小区的最优PCI分配。

在给2067个小区重新分配PCI的过程中,首先需要建立一个包含所有小区的列表,然后根据附件提供的数据,生成三个N×N的矩阵,分别为冲突矩阵A、混淆矩阵B和干扰矩阵C。接下来,按照给定的优先级,依次对冲突、混淆和干扰进行处理,使得每种情况下的MR数最少。最后,将PCI重新分配的结果输出。

代码如下:

# 生成小区列表
cell_list = range(1, 2068)

# 生成冲突矩阵A
A = [[0 for i in range(2067)] for j in range(2067)]
for cell in cell_list:
    for neighbor in cell.neighbors:
        if cell.frequency == neighbor.frequency:
            A[cell.id-1][neighbor.id-1] += cell.mr_count
            A[neighbor.id-1][cell.id-1] += cell.mr_count

# 生成混淆矩阵B
B = [[0 for i in range(2067)] for j in range(2067)]
for cell in cell_list:
    for neighbor in cell.neighbors:
        if cell.frequency == neighbor.frequency:
            for third_neighbor in neighbor.neighbors:
                if third_neighbor.frequency == cell.frequency and third_neighbor.id != cell.id:
                    B[cell.id-1][third_neighbor.id-1] += cell.mr_count
                    B[third_neighbor.id-1][cell.id-1] += cell.mr_count

# 生成干扰矩阵C
C = [[0 for i in range(2067)] for j in range(2067)]
for cell in cell_list:
    for neighbor in cell.overlap_neighbors:
        if cell.frequency == neighbor.frequency:
            C[cell.id-1][neighbor.id-1] += cell.mr_count
            C[neighbor.id-1][cell.id-1] += cell.mr_count

# 按照优先级依次处理冲突、混淆和干扰
# 先处理冲突,将冲突MR数最少的小区对应的PCI值进行交换
# 再处理混淆,将混淆MR数最少的小区对应的PCI值进行交换
# 最后处理干扰,将干扰MR数最少的小区对应的PCI值进行交换
for i in range(1008):
    # 处理冲突
    min_a = min(min(A))
    min_a_index = A.index(min_a)
    min_a_value = min_a[min_a_index]
    A[min_a_index] = [0 for i in range(2067)]
    A[min_a_index][min_a_index] = min_a_value
    A[min_a_index][i] = A[i][min_a_index]
    A[i][min_a_index] = min_a_value
    A[i][i] = 0
    # 处理混淆
    min_b = min(min(B))
    min_b_index = B.index(min_b)
    min_b_value = min_b[min_b_index]
    B[min_b_index] = [0 for i in range(2067)]
    B[min_b_index][min_b_index] = min_b_value
    B[min_b_index][i] = B[i][min_b_index]
    B[i][min_b_index] = min_b_value
    B[i][i] = 0
    # 处理干扰
    min_c = min(min(C))
    min_c_index = C.index(min_c)
    min_c_value = min_c[min_c_index]
    C[min_c_index] = [0 for i in range(2067)]
    C[min_c_index][min_c_index] = min_c_value
    C[min_c_index][i] = C[i][min_c_index]
    C[i][min_c_index] = min_c_value
    C[i][i] = 0

# 将PCI重新分配的结果输出
for cell in cell_list:
    cell.PCI = cell_list.index(cell) + 1
    print("小区{}的PCI为{}".format(cell.id, cell.PCI))

更多内容可以点击下方名片详细了解,让小鹿学长带你冲刺美赛夺奖之路!
敬请期待我们的努力所做出的工作!记得关注 鹿鹿学长呀!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Web程序设计-实验02 CSS页面布局

【实验主题】 影视网站前台模板页设计 【实验任务】 1、浏览并分析多个影视网站&#xff08;详见参考资源&#xff0c;建议自行搜索更多影视网站&#xff09;的整体版面布局&#xff0c;对比同一网站不同页面&#xff08;主页、列表页、详情页&#xff09;的元素异同——剔除…

故障诊断 | 基于LSTM的滚动轴承故障诊断

效果 概述 基于LSTM(长短期记忆网络)的滚动轴承故障诊断是一种利用深度学习技术来预测滚动轴承是否存在故障的方法。下面是一个基本的滚动轴承故障诊断的流程: 数据收集:首先,需要收集与滚动轴承相关的振动信号数据。这些数据可以通过传感器或振动监测系统获取。收集的数…

如何对输入信号产生一个固定的时移(CODESYS信号时移FB)

1、同步性问题(跟随给定和跟随反馈的区别) 随动系统同步性问题(跟随给定和跟随反馈的区别)-CSDN博客文章浏览阅读39次。1、运动控制比例随动运动控制比例随动系统_正运动随动系统-CSDN博客PLC如何测量采集编码器的位置数据,不清楚的可以参看我的另一篇博文:三菱FX3U PLC高速…

【绩效管理】建立员工绩效考核机制,提升企业绩效管理水平

随着企业的迅猛发展&#xff0c;其内部管理问题日益突出&#xff0c;已经制约了企业的进一步发展。一方面&#xff0c;员工工作懒散、积极性不高&#xff0c;出错的次数也逐步上升&#xff0c;另一方面&#xff0c;管理者也无法有效评价员工的工作好坏。面对这些问题&#xff0…

计算机网络常见面试总结

文章目录 1. 计算机网络基础1.1 网络分层模型1. OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f;2.TCP/IP 四层模型是什么&#xff1f;每一层的作用是什么&#xff1f;3. 为什么网络要分层&#xff1f; 1.2 常见网络协议1. 应用层有哪些常见的协议&#xff1f;2…

02—js数据类型及相互转换

一、数据类型 js把数据分为两类 基本类型&#xff1a;string number boolean undefined null 引用类型&#xff1a;object(fuction(可以执行) array&#xff08;数值下标&#xff0c;内部数据是有序的&#xff09;) 1.Number:数值类型&#xff0c;整数和小数 &#xff08…

SpringMVC原理及工作流程

组件 SpringMVC的原理主要基于它的各个组件之间的相互协作交互&#xff0c;从而实现了Web请求的接收&#xff0c;处理和响应。 它的组件有如下几个&#xff1a; DispatcherServlet前端控制器 HandlerMapping处理器映射器 Controller处理器 ModelAndView ViewResolver视图…

Mysql内存表及使用场景(12/16)

内存表&#xff08;Memory引擎&#xff09; InnoDB引擎使用B树作为主键索引&#xff0c;数据按照索引顺序存储&#xff0c;称为索引组织表&#xff08;Index Organized Table&#xff09;。 Memory引擎的数据和索引分开存储&#xff0c;数据以数组形式存放&#xff0c;主键索…

前端CSS讲义1

什么是 CSS? CSS 指层叠样式表 样式定义如何显示 HTML 元素 样式通常存储在样式表中 把样式添加到 HTML 4.0 中&#xff0c;是为了解决内容与表现分离的问题 外部样式表可以极大提高工作效率 外部样式表通常存储在 CSS 文件中 多个样式定义可层叠为一 样式对网页中元素…

DAY03|203.移除链表元素、707.设计链表、206.反转链表

203.移除链表元素、707.设计链表、206.反转链表 LeetCode 203.移除链表元素LeetCode 707.设计链表LeetCode 206.反转链表双指针法递归法 LeetCode 203.移除链表元素 注意&#xff0c;在dummy上操作&#xff0c;返回也返回dummy->next 如果头铁想返回head&#xff0c;那样会…

2024高交会-2024深圳高新技术展-高新技术成果交易会

2024高交会-2024深圳高新技术展-2024高新技术成果展-中国高校技术交易会-第26届高交会-深圳高交会-深圳高科技展-深圳新科技展-深圳高新技术成果展 第二十六届中国国际高新技术成果交易会&#xff08;简称高交会&#xff09; 时间&#xff1a;2024年11月15日-19日 地址&#…

点击按钮(文字)调起elementUI大图预览

时隔一年&#xff0c;我又回来了 ~ 最近在做后台&#xff0c;遇到一个需求&#xff0c;就是点击“查看详情”按钮&#xff0c;调起elementUI的大图预览功能&#xff0c;预览多张图片&#xff0c;如下图&#xff1a; 首先想到的是使用element-ui的el-image组件&#xff0c;但它是…

NzN的数据结构--交换排序

篇接上文&#xff0c;今天要学习的就是交换排序&#xff0c;这么励志的日更博主&#xff0c;你怎么能不三连一下呢&#xff1f; 目录 一、基本思想 二、冒泡排序 三、快速排序 1. hoare版本 2. 挖坑法 3. 前后指针法 4. hoare版本优化 5. 非递归实现快速排序 一、基本…

模拟移动端美团案例(react版)

文章目录 目录 概述 项目搭建 1.启动项目&#xff08;mock服务前端服务&#xff09; 2.使用Redux ToolTik(RTK)编写store(异步action) 3.组件触发action并渲染数据 一、渲染列表 ​编辑 二、tab切换类交互 三、添加购物车 四、统计区域功能实现 五、购物车列表功能实现 六、控制…

【Java集合进阶】泛型的通配符和综合练习

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

加速度JUSDO | 电子元器件商城行业调研及运营方案

一、行业背景与竞品分析 随着电子元器件行业的快速发展&#xff0c;线上元器件商城已成为行业交易的重要渠道。目前市场上存在多个知名的元器件商城&#xff0c;如立创、云汉芯城、贸泽商城等&#xff0c;它们都提供了丰富的元器件产品和便捷的线上交易服务。 立创商城&#x…

蓝桥杯第十三届c++大学B组详解

目录 1.九进制转十进制 2.顺子日期 3.刷题统计 4.修剪灌木 5.x进制的减法 6.统计子矩阵 7.积木画 8.扫雷 9.李白打酒 10.砍竹子 1.九进制转换十进制 题目解析&#xff1a;就是将2022的每一位拿出来乘以9的n-1次方的和就是最终答案。次方是从0开始的到n-1. #include &…

蓝桥杯物联网竞赛_STM32L071_16_EEPROM

仍然是没有考过的知识点 朴素的讲就是板子中一块不会因为断电重启而导致数值初始化的一片地址 要注意的是有时候容易把板子什么写错导致板子什么地址写坏了导致程序无法烧录&#xff0c;这个时候记得一直按flash键烧录&#xff0c;烧录时会报错&#xff0c;点击确定&#xff0…

什么是MOV视频格式?如何把MP4视频转MOV视频格式?

一&#xff0c;前言 当然可以&#xff0c;MP4视频可以转换为MOV格式。这两种格式都是常见的视频文件格式&#xff0c;它们都可以用于存储和播放视频内容。虽然它们的编码方式和特性有所不同&#xff0c;但使用合适的视频转换工具可以轻松地将MP4视频转换为MOV格式。 二&#…

【洛谷 P8804】[蓝桥杯 2022 国 B] 故障 题解(概率论+条件概率+贝叶斯公式)

[蓝桥杯 2022 国 B] 故障 题目描述 在软件或系统开发中&#xff0c;我们会遇到各种各样的故障。为了从故障现象反推故障原因&#xff0c;工程师们会总结一种叫做相关性矩阵的二维表格&#xff0c;来表示故障原因与故障现象之间的关系。比如: 其中每行表示一种故障原因&#x…