m基于多D2D通信对和多蜂窝用户的LTE预编码技术matlab仿真

news2024/12/23 12:23:56

目录

1.算法描述

2.仿真效果预览

3.MATLAB核心程序

4.完整MATLAB


1.算法描述

    LTE网络中采用MIMO技术增加系统容量,提升吞吐率,从理论上来看,多天线的空分复用能成倍增加系统容量。但实际上并非如此,如,22MIMO的容量C(容量)=22MIMO 小于两倍的SISO容量C(容量)=2SISO,这是因为容量增加了,干扰增大了,干扰主要是由于信道矩阵中信道的相关性造成的,为了消除信道相关性造成影响,需要在接收端对H进行评估,并做线性均衡,最大化MIMO信道矩阵H的容量。

        为了获取更高的MIMO容量,接收机侧需要对MIMO的发射矩阵H中的每个信道都进行均衡处理,消除信道间的影响,这样增加接收机的实现复杂度。如SISO模式,接收机需要线性均衡处理一个信道,而对于一个2*2MIMO模式,接收机需要处理评估4个信道;其次,接收端若将H矩阵中的多个信道相关性评估结果反馈给发射机,这会增加系统开销。另一个是,若通过增加天线空间来消除信道间的影响,但天线近处的杂散环境使实现难度增加。于是提出了通过技术改进解决,这个方法就是预编码(Precoding)。
        因此,预编码(Precoding)的目的是降低接收机消除信道间影响实现的复杂度,同时减少系统开销,最大提升MIMO的系统容量。当然,消除MIMO信道间的影响,可以在接收机侧实现,也可以通过改变发射机的发射方式,对发射信号进行预处理,辅助接收机消除信道间的影响,这种发射方式的改变就是通过预编码实现的。
       为了识别MIMO矩阵H中有用的通道,需要把多个通道(如22MIMO H11\H12\H21\H22)转化成类似于SISO的一对一模式,实现发送信号S1对应接收信号R1,S2对应接收信号R2,也就是将多个MIMO交叉通道转换成多个平行的一对一信道。这个过程通过信道矩阵SVD(奇异值分解)实现。如r=Hs+n,变换为r=UΣ(V*)Ts+n,经过接收端的处理=Σ(V)T*s+UHn,从结果可以发现发射端不再需要知道MIMO信道矩阵H,而知道V(共轭转置矩阵,又叫酉矩阵)即可,此处的V即码本(Codebook),3GPP定义了一系列V矩阵,eNodeB和ue侧均可获得,应用时根据PMI选择一个可以使信道矩阵H容量最大的V。到这里,预编码就很好理解了,实际上就是在发射端对发射信号S乘以V,与后面SVD过程匹配,这样在接收端需要处理的复杂性与开销大大减少了。

       考虑下行链路的蜂窝网络中存在多个D2D通信对和多个蜂窝用户,它们共享相同的频率资源并且蜂窝用户为主用户。

1)传统波束赋形算法1

       该算法是一种最简单传统的波束赋形策略,其原理是对于第k个蜂窝用户,赋形矢量wk,conv是自身方向上的信道增益矢量,公式定义如下:

                                         

       因此,在这个赋形策略中,基站主要针对蜂窝用户进行赋形,并没有对其关联的D2D通信对做干扰消除。

 2)ZF波束赋形算法1

      在ZF波束赋形算法1中,消除了蜂窝用户之间内部的干扰,第k个蜂窝用户传输在其他所有用户信道的零空间。特别是赋形矢量 ,对于第 个用户将会正交其他所有蜂窝用户的信道矢量。公式如(6)所示:

3)ZF波束赋形算法2

     在ZF波束赋形算法中,消除了基站到D2D通信的干扰,第k个蜂窝用户数据传输在所有D2D通信信道的零空间。特别是,第k个蜂窝用户波束赋形矢量 将会正交所有基站到D2D通信对信道矢量。

 

仿真结果与传统波束赋形方法、ZF波束赋形算法1及ZF波束赋形算法2解析结果对比与分析。仿真模型由单个蜂窝小区下,T=4为基站天线数目,K=4为蜂窝用户数量为4,D=4为D2D通信对数量。在仿真场景中,D2D通信对和蜂窝用户到基站的距离固定且采用简单的路径损耗模型。 

2.仿真效果预览

matlab2022a仿真结果如下:

 

 

3.MATLAB核心程序

clc;
clear;
close all;
warning off;
addpath 'func\'
addpath 'func\modulation\'
addpath 'func\estmation\'
addpath 'func\cp\'
addpath 'func\LTEC\'
addpath 'func\precodeing\'
 
 
SNRS      = [0:4:16];
 
for jj = 1:length(SNRS);
    
    Tx_n      = 4;   
    Rx_n      = 4;   
    %整体信噪比
    SNR       = SNRS(jj);  
    Nfft      = 1024;
    Nid       = 17; 
    Sym_Len   = 7;
    CP_length = 144;
    CPNfft    = Nfft+CP_length;
 
    for y=1:100
        y
        SNRS(jj)
        noise     = SNR;
        N0        = 10^(-noise/10);
        %产生信道估计所用的测试信号,功能类似导频
        [subframe,data_v,data_v0,data_v1,data_v2,data_v3] = func_data_gen(Tx_n,Rx_n,Sym_Len,Nid);
        number_length                                     = length(find(subframe == 0));
        %IFFT
        data_ifft1 = zeros(Nfft,2*Sym_Len);
        data_ifft2 = zeros(Nfft,2*Sym_Len);
        data_ifft3 = zeros(Nfft,2*Sym_Len);
        data_ifft4 = zeros(Nfft,2*Sym_Len);
        for i=1:2*Sym_Len
            data_ifft1(:,i) = ifft(data_v0(:,i),Nfft);
            data_ifft2(:,i) = ifft(data_v1(:,i),Nfft);
            data_ifft3(:,i) = ifft(data_v2(:,i),Nfft);
            data_ifft4(:,i) = ifft(data_v3(:,i),Nfft);
        end
        %插入CP
        WithCP_sequence1 = zeros(CPNfft,2*Sym_Len);
        WithCP_sequence2 = zeros(CPNfft,2*Sym_Len);
        WithCP_sequence3 = zeros(CPNfft,2*Sym_Len);
        WithCP_sequence4 = zeros(CPNfft,2*Sym_Len);
 
        for i=1:2*Sym_Len
            WithCP_sequence1(:,i) = func_CP_In(data_ifft1(:,i).',CP_length);
            WithCP_sequence2(:,i) = func_CP_In(data_ifft2(:,i).',CP_length);
            WithCP_sequence3(:,i) = func_CP_In(data_ifft3(:,i).',CP_length);
            WithCP_sequence4(:,i) = func_CP_In(data_ifft4(:,i).',CP_length);
        end
        T1=reshape(WithCP_sequence1,1,CPNfft*2*Sym_Len);
        T2=reshape(WithCP_sequence2,1,CPNfft*2*Sym_Len);
        T3=reshape(WithCP_sequence3,1,CPNfft*2*Sym_Len);
        T4=reshape(WithCP_sequence4,1,CPNfft*2*Sym_Len);
 
        [r1,channel_impulse1,delay_number1,tap_delay1]=func_LTEChan(T1,'EPA');
        [r2,channel_impulse2,delay_number2,tap_delay2]=func_LTEChan(T2,'EPA');
        [r3,channel_impulse3,delay_number3,tap_delay3]=func_LTEChan(T3,'EPA');
        [r4,channel_impulse4,delay_number4,tap_delay4]=func_LTEChan(T4,'EPA');
        [r5,channel_impulse5,delay_number5,tap_delay5]=func_LTEChan(T1,'EPA');
        [r6,channel_impulse6,delay_number6,tap_delay6]=func_LTEChan(T2,'EPA');
        [r7,channel_impulse7,delay_number7,tap_delay7]=func_LTEChan(T3,'EPA');
        [r8,channel_impulse8,delay_number8,tap_delay8]=func_LTEChan(T4,'EPA');
        R1     = (r1+r2+r3+r4);
        R2     = (r5+r6+r7+r8);
        a      = awgn(R1*sqrt(Nfft),noise,'measured');
        b      = awgn(R2*sqrt(Nfft),noise,'measured');
 
        noise1 = a/sqrt(Nfft)-R1;
        noise2 = b/sqrt(Nfft)-R2;
        R1     = a/sqrt(Nfft);
        R2     = b/sqrt(Nfft);
 
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %去CP
        WithCP_sequence_1 = reshape(R1,CPNfft,2*Sym_Len);
        WithCP_sequence_2 = reshape(R2,CPNfft,2*Sym_Len);
        NoCP_sequence1    = zeros(2*Sym_Len,Nfft);
        NoCP_sequence2    = zeros(2*Sym_Len,Nfft);
        for i=1:2*Sym_Len
            NoCP_sequence1(i,:) = func_CP_del(WithCP_sequence_1(:,i),CP_length); 
            NoCP_sequence2(i,:) = func_CP_del(WithCP_sequence_2(:,i),CP_length); 
        end
        NoCP_sequence1=NoCP_sequence1.';
        NoCP_sequence2=NoCP_sequence2.';
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %FFT
        FFTed1=zeros(Nfft,2*Sym_Len);
        FFTed2=zeros(Nfft,2*Sym_Len);
        for i=1:2*Sym_Len
            FFTed1(:,i)=fft(NoCP_sequence1(:,i));
            FFTed2(:,i)=fft(NoCP_sequence2(:,i));
        end
        %信道估计
        [MH10,MH11,MH12,MH13] = func_channel_estmation(FFTed1,0,Nid,1,Tx_n,Sym_Len,Rx_n);
        [MH20,MH21,MH22,MH23] = func_channel_estmation(FFTed2,0,Nid,1,Tx_n,Sym_Len,Rx_n);
 
 
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%信道估计之后开始在正式的链路的仿真%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %产生随机信号
        Din1     = round(rand(1,number_length*2));
        Din2     = round(rand(1,number_length*2));
        %调制
        Din_mod1 = func_QPSK(Din1);
        Din_mod2 = func_QPSK(Din2);
        %码本选择
        for i=1:Tx_n*Rx_n*2*Sym_Len
            H           = [MH10(i) MH11(i) MH12(i) MH13(i);MH20(i) MH21(i) MH22(i) MH23(i)];
            [R,snr]     = func_codebookselect(H,N0);
            r_withRS(i) = R;
        end
        r        = func_rs_del(Tx_n,r_withRS,0,Nid,1,Sym_Len,Rx_n);
        %预编码
        [copreding0,copreding1,copreding2,copreding3] = func_Precoding(Din_mod1,Din_mod2,r);
        %VRB
        k=1;
        for i=1:length(subframe)
            if data_v(i)==0
               data_v0(i)=copreding0(k);
               data_v1(i)=copreding1(k);
               data_v2(i)=copreding2(k);
               data_v3(i)=copreding3(k);
               k=k+1;
            end
        end
 
       IFFTed0_2nd=zeros(Nfft,2*Sym_Len);
       IFFTed1_2nd=zeros(Nfft,2*Sym_Len);
       IFFTed2_2nd=zeros(Nfft,2*Sym_Len);
       IFFTed3_2nd=zeros(Nfft,2*Sym_Len);
 
       for i=1:2*Sym_Len
           IFFTed0_2nd(:,i)=ifft(data_v0(:,i),Nfft);
           IFFTed1_2nd(:,i)=ifft(data_v1(:,i),Nfft);
           IFFTed2_2nd(:,i)=ifft(data_v2(:,i),Nfft);
           IFFTed3_2nd(:,i)=ifft(data_v3(:,i),Nfft);
       end
       %加CP
       WithCP_sequence0_2nd=zeros(CPNfft,2*Sym_Len);
       WithCP_sequence1_2nd=zeros(CPNfft,2*Sym_Len);
       WithCP_sequence2_2nd=zeros(CPNfft,2*Sym_Len);
       WithCP_sequence3_2nd=zeros(CPNfft,2*Sym_Len);
       for i=1:2*Sym_Len
           WithCP_sequence0_2nd(:,i)=func_CP_In(IFFTed0_2nd(:,i).',CP_length);
           WithCP_sequence1_2nd(:,i)=func_CP_In(IFFTed1_2nd(:,i).',CP_length);
           WithCP_sequence2_2nd(:,i)=func_CP_In(IFFTed2_2nd(:,i).',CP_length);
           WithCP_sequence3_2nd(:,i)=func_CP_In(IFFTed3_2nd(:,i).',CP_length);
       end
 
       T0_2nd=reshape(WithCP_sequence0_2nd,1,CPNfft*2*Sym_Len);
       T1_2nd=reshape(WithCP_sequence1_2nd,1,CPNfft*2*Sym_Len);
       T2_2nd=reshape(WithCP_sequence2_2nd,1,CPNfft*2*Sym_Len);
       T3_2nd=reshape(WithCP_sequence3_2nd,1,CPNfft*2*Sym_Len);
 
       [r1_2nd]=func_LTEChannel2(T0_2nd,channel_impulse1,delay_number1,tap_delay1);
       [r2_2nd]=func_LTEChannel2(T1_2nd,channel_impulse2,delay_number2,tap_delay2);
       [r3_2nd]=func_LTEChannel2(T2_2nd,channel_impulse3,delay_number3,tap_delay3);
       [r4_2nd]=func_LTEChannel2(T3_2nd,channel_impulse4,delay_number4,tap_delay4);
       [r5_2nd]=func_LTEChannel2(T0_2nd,channel_impulse5,delay_number5,tap_delay5);
       [r6_2nd]=func_LTEChannel2(T1_2nd,channel_impulse6,delay_number6,tap_delay6);
       [r7_2nd]=func_LTEChannel2(T2_2nd,channel_impulse7,delay_number7,tap_delay7);
       [r8_2nd]=func_LTEChannel2(T3_2nd,channel_impulse8,delay_number8,tap_delay8);
       R1_2nd=r1_2nd+r2_2nd+r3_2nd+r4_2nd;
       R2_2nd=r5_2nd+r6_2nd+r7_2nd+r8_2nd;
 
       R1_2nd=R1_2nd+noise1;
       R2_2nd=R2_2nd+noise2;
       a=awgn(R1_2nd*sqrt(Nfft),noise);
       b=awgn(R2_2nd*sqrt(Nfft),noise);
       R1_2nd=a/sqrt(Nfft);
       R2_2nd=b/sqrt(Nfft);
 
       %去CP
       WithCP_sequence_1_2nd=reshape(R1_2nd,CPNfft,2*Sym_Len);
       WithCP_sequence_2_2nd=reshape(R2_2nd,CPNfft,2*Sym_Len);
       NoCP_sequence1_2nd=zeros(14,Nfft);
       NoCP_sequence2_2nd=zeros(14,Nfft);
 
         for i=1:2*Sym_Len
             NoCP_sequence1_2nd(i,:)=func_CP_del(WithCP_sequence_1_2nd(:,i),CP_length); 
             NoCP_sequence2_2nd(i,:)=func_CP_del(WithCP_sequence_2_2nd(:,i),CP_length); 
         end
 
         NoCP_sequence1_2nd=NoCP_sequence1_2nd.';
         NoCP_sequence2_2nd=NoCP_sequence2_2nd.';
         %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         %FFT
         FFTed1_2nd=zeros(Nfft,2*Sym_Len);
         FFTed2_2nd=zeros(Nfft,2*Sym_Len);
         for i=1:2*Sym_Len
             FFTed1_2nd(:,i)=fft(NoCP_sequence1_2nd(:,i));
             FFTed2_2nd(:,i)=fft(NoCP_sequence2_2nd(:,i));
         end
         prb1=zeros(Tx_n*Rx_n,2*Sym_Len);
         prb2=zeros(Tx_n*Rx_n,2*Sym_Len);
         for i=1:2*Sym_Len
             for k=1:Tx_n*Rx_n
                 prb1(k,i)=FFTed1_2nd(k,i);
                 prb2(k,i)=FFTed2_2nd(k,i);
             end
         end
 
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %均衡
        vrb_1=reshape(prb1,1,Tx_n*Rx_n*2*Sym_Len);
        vrb_2=reshape(prb2,1,Tx_n*Rx_n*2*Sym_Len);
        eqed1=zeros(1,Tx_n*12*2*Sym_Len);
        eqed2=zeros(1,Tx_n*12*2*Sym_Len);
 
        for i=1:length(vrb_1)
            R=r_withRS(i);
            H=[MH10(i) MH11(i) MH12(i) MH13(i);MH20(i) MH21(i) MH22(i) MH23(i)];
            [eqed1(i),eqed2(i)]=func_Equ(vrb_1(i),vrb_2(i),H,N0,R);
        end
 
        Doutf1    = func_rs_del(Tx_n,eqed1,0,Nid,1,Sym_Len,Rx_n);
        Doutf2    = func_rs_del(Tx_n,eqed2,0,Nid,1,Sym_Len,Rx_n);
        %QPSK解调
        out1      = func_DQPSK(Doutf1);
        out2      = func_DQPSK(Doutf2);
        %计算误码
        [En1,En2] = func_error(Din1,Din2,out1,out2);
        err(y)    =(En1+En2)/2;
    end
    BER(jj) = sum(err)/(Tx_n*Rx_n*length(Din1)); 
end
 
figure;
semilogy(SNRS,BER,'b-s');
grid on
xlabel('SNR');
ylabel('Ber');
axis([0,18,5e-3,1e0]);
01-132m

4.完整MATLAB

V

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

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

相关文章

深度学习实验3 - 卷积神经网络

文章目录实验要求数据集定义1 手写二维卷积1.1 自定义卷积通道1.2 自定义卷积层1.3 添加卷积层导模块中1.4 定义超参数1.5 初始化模型、损失函数、优化器1.6 定义模型训练和测试函数,输出训练集和测试集的损失和精确度1.7 训练1.8 loss及acc可视化2 torch.nn 实现二…

一文打通ER图(手把手教你画)

期末了,E-R图也是大学课程设计中经常用到的,也是期末考的重点,毕竟大学生也没什么好考的,最近也有不少同学问,不少单子也扯到E-R图,但是我看了看网上的玩意好像没到手把手的地步,那么我就写一个…

Java面试题总结-ArrayList和LinkedList的区别

ArrayList和LinkedList都实现了List接口,并且两者都不是线程安全的。他们有以下的区别: (1)首先,最最本质的区别是:ArrayList内部使用的是动态数组来存储元素,而LinkedList内部使用的是双向链表…

PS图层+移动工具(3)对齐方式 对齐参照调整

此文为续文 请先查看 PS图层移动工具(2)复制删除快捷键 图层分组 前景色填充 后再查看本文 我们先来多选几个图层 然后上方属性栏 就激活了对应的操作 我们先来一波 左对齐 然后 就左对齐了 值得一提的是 这个左对齐 不是在屏幕的最左侧对齐 而是针对 所有你当前选择的图片…

华为机试 - 查找二叉树节点

题目描述 已知树形结构的所有节点信息,现要求根据输入坐标(x,y)找到该节点保存的内容值,其中x表示节点所在的层数,根节点位于第0层,根节点的子节点位于第1层,依次类推;y表示节点在该层内的相对偏移,从左至右,第一个节点偏移0,第二个节点偏移1,依次类推; 举例:上…

mysql索引失效

一、索引失效 1.当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效 2.使用order by对数据库进行查询时,导致索引失效 ,order by走全表扫描比回表的时间更少 3.主键和唯一索引在同…

算法刷题入门数据结构|二分查找

一.二分查找基础 1、二分查找介绍 二分查找(Binary search)也称折半查找,是一种效率较高的查找方法,时间复杂度。当对查数题目有时间复杂度要求是,首先就要考虑到二分查找。二分查找的思想很简单,属于分治策略的变种情况。但是&am…

贷后催收评分模型中的数据清洗与数据治理细节介绍

数据清洗是一个非常修炼身心的过程,途中你除了需要把所有的数据整业务合到一张宽表里。而这种宽表中所有的字段,是你理解完业务后,细心整理出来的所有适合建模的数据。 今天我们给大家介绍一下,在风控贷后评分模型中,…

C规范编辑笔记(七)

往期文章: C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) C规范编辑笔记(六) 正文: 大家好,今天来分享一下C语言规范编辑笔记的第七篇,分享这个是希望自己后面忘记了可以去复习…

ADI Blackfin DSP处理器-BF533的开发详解26:扩展IO输入的详细讲解(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 硬件设计原理图 功能介绍 ADSP-EDU-BF53x 开发板上扩展接口的 PORT2 和 PORT3 中引出了 6 个扩展 IO 接口输入接口,这些连接到了CPLD…

C. Rooks Defenders Codeforces Round #791 (Div. 2)(树状数组!)

传送门 题意:给你一个的棋盘,然后给你一个t(t只能为1,2,3),对于不同的t产生不同的影响: t1时,给你一个点的坐标x,y,在这个点上生成一辆坦克(保证…

模拟实战从外网打点渗透到内网域控的笔记

信息收集 本次项目是一个是模拟渗透测试 电信诈骗网站,境外人员依赖该网站通过优惠卷诱导受害者进行消费, 诈骗受害人金钱。 前台地址 项目拓扑图 http://ip/user.php?moddo&actlogin&fromtohttp%3A%2F%2F43.143.193.216%2F 后台地址 http…

rabbitmq基础2——rabbitmq二进制安装和docker安装、基础命令

文章目录一、RabbitMQ安装1.1 二进制安装1.2 rabbitmqctl工具1.3 docker安装二、rabbitmq基础命令2.1 多租户与权限类2.1.1 创建虚拟主机2.1.2 查看虚拟主机信息2.1.3 删除虚拟主机2.1.4 给用户授权2.1.5 清除用户权限2.1.6 查看权限2.2 用户管理类2.2.1 创建用户2.2.2 查看用户…

爱心源码动图-Html网页运行

程序示例精选 爱心源码动图-Html网页运行 如需安装运行环境或远程调试,见文章底部微信名片! 前言 Html写的追女生神器-爱心动图,代码整洁,规则,易读,对学习与使用Html有较好的帮助。 文章目录 一、所需工具…

Redis高可用之主从复制、哨兵、cluster集群

Redis高可用之主从复制、哨兵、cluster集群Redis 高可用什么是高可用Redis的高可用技术Redis主从复制主从复制的作用主从复制流程搭建Redis主从复制所有节点安装Redis修改master节点的配置文件修改slave节点的配置文件验证主从效果Redis哨兵模式哨兵模式的作用哨兵结构故障转移…

Redis集群模式

目录 前言 一、集群的作用 二、集群模式的数据分片 三、集群模式的主从复制模型 四、Redis集群模式 Redis集群部署 开启群集功能 修改所有集群服务的配置文件端口,使其不一致 启动集群 集群测试 前言 1、集群,即 Redis Cluster, …

模型效果差?我建议你掌握这些机器学习模型的超参数优化方法

模型优化是机器学习算法实现中最困难的挑战之一。机器学习和深度学习理论的所有分支都致力于模型的优化。 机器学习中的超参数优化旨在寻找使得机器学习算法在验证数据集上表现性能最佳的超参数。超参数与一般模型参数不同,超参数是在训练前提前设置的。举例来说&a…

CKA考试Tips

前言 今年黑五的双证套餐的折扣比双11时还便宜个200多,不到2000,应该是史低吧,反正比前年低。即使考试前看了各种避坑技巧,虽然通过了但是结果还是因为各种问题导致时间不够没做完扣分,于是下面总结一下参加CKA/CKS考试时候的技巧。 报名及考…

[基因遗传算法]进阶之四:实践VRPTW

参考资料: 《旅行商问题(TSP)、车辆路径问题(VRP,MDVRP,VRPTW)模型介绍》 本文对《基于GA算法解决VRPTW》的分析和思考.具体的代码可以参考 《Python实现(MD)VRPTW常见求解算法——遗传算法(GA)》 . 文章目录壹、VRPTW一. 定义类二、数据读取三. 构造初…

JVM调优手段

JDK提供命令工具 jstat 是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟…