• 基于PSO优化VIC算法的WORM蠕虫检测matlab仿真


    目录

    一、理论基础

    二、案例背景

    1.问题描述

    2.思路流程

    三、部分MATLAB程序

    四、仿真结论分析

    五、算法相关应用

    六、参考文献


    一、理论基础

    根据参考文献:

     初始条件

    计算曲率

    角度的计算公式 

         

    那么对于坐标点,其满足如下的计算公式,

    二、案例背景

    1.问题描述

           给定一组初始值,构造出虚拟图。初始值就是如下图图一 x0, y0, θ(0)那行,给出曲线的初始点和初始角度,构造出曲线。曲线中的current point x的坐标可以由θ(s)求出,θ(s)可以由初始值求出。 如下图一所示 K(s)是一条曲线的曲率,用傅里叶级数表达然后求出角θ(s),这样,这条曲线就被描绘出来了,然后用这条曲线构造一个virtual object,如图二所示。 这个object 是曲线以半径r外扩得到的长条形曲面,如图所示。

    2.思路流程

          本课题我们主要通过VIC算法检测得到曲线的中线,然后根据这个中线进行扩展,得到光滑曲线体,本课题的这个研究过程和实际的蠕虫建模方法非常的接近,这是由于光滑曲线体和蠕虫的建模,他们都是通过中线检测进行的。此外,本课题还对传统的VIC算法进行了改进,通过使用PSO粒子群优化算法,从而大大提供的光滑曲线的建模精度。

          通过PSO粒子群优化算法,对原有的VIC算法进行参数进行优化,从而得到更高精度的虚拟曲线的建模。通过仿真对比可知,采用优化算法之后的虚拟曲线,其精度比原算法的精度提高了10倍以上。

    三、部分MATLAB程序

    VIC算法部分:

    1. function I2 = func_Virtual_Image(X,Y,X_img,Y_img,L,Ls,r,theta);
    2. %然后用这条曲线构造一个virtual object,如图二所示。 这个object 是曲线以半径r外扩得到的长条形曲面,如图所示。
    3. %进行扩展
    4. I2 = 50*ones(L,L);
    5. for kk = 1:r
    6. X1 = zeros(L/Ls,1);
    7. Y1 = zeros(L/Ls,1);
    8. X2 = zeros(L/Ls,1);
    9. Y2 = zeros(L/Ls,1);
    10. for i = 1:L/Ls
    11. if mod(sum(theta(1:i)),180) < 0
    12. X1(i) = X(i) + kk*cos(pi*theta(i)/180);
    13. Y1(i) = Y(i) - kk*sin(pi*theta(i)/180);
    14. X2(i) = X(i) - kk*cos(pi*theta(i)/180);
    15. Y2(i) = Y(i) + kk*sin(pi*theta(i)/180);
    16. else
    17. X1(i) = X(i) + kk*cos(pi/2 - pi*theta(i)/180);
    18. Y1(i) = Y(i) - kk*sin(pi/2 - pi*theta(i)/180);
    19. X2(i) = X(i) - kk*cos(pi/2 - pi*theta(i)/180);
    20. Y2(i) = Y(i) + kk*sin(pi/2 - pi*theta(i)/180);
    21. end
    22. end
    23. %将X和Y曲线变化为实际图像信息
    24. for i = 1:L/Ls
    25. Xp1(i) = floor(X1(i));
    26. Yp1(i) = floor(Y1(i));
    27. Xp2(i) = floor(X2(i));
    28. Yp2(i) = floor(Y2(i));
    29. end
    30. X_img1 = L-Yp1;
    31. Y_img1 = Xp1;
    32. X_img2 = L-Yp2;
    33. Y_img2 = Xp2;
    34. for i = 1:L/Ls
    35. I2(X_img(i),Y_img(i)) = 255;
    36. if r==1
    37. I2(X_img1(i),Y_img1(i)) = 255 - kk*120;
    38. I2(X_img2(i),Y_img2(i)) = 255 - kk*120;
    39. end
    40. if r==2
    41. I2(X_img1(i),Y_img1(i)) = 255 - kk*90;
    42. I2(X_img2(i),Y_img2(i)) = 255 - kk*90;
    43. end
    44. if r==3
    45. I2(X_img1(i),Y_img1(i)) = 255 - kk*80;
    46. I2(X_img2(i),Y_img2(i)) = 255 - kk*80;
    47. end
    48. if r==4
    49. I2(X_img1(i),Y_img1(i)) = 255 - kk*60;
    50. I2(X_img2(i),Y_img2(i)) = 255 - kk*60;
    51. end
    52. if r==5
    53. I2(X_img1(i),Y_img1(i)) = 255 - kk*50;
    54. I2(X_img2(i),Y_img2(i)) = 255 - kk*50;
    55. end
    56. if r==6
    57. I2(X_img1(i),Y_img1(i)) = 255 - kk*40;
    58. I2(X_img2(i),Y_img2(i)) = 255 - kk*40;
    59. end
    60. if r==7
    61. I2(X_img1(i),Y_img1(i)) = 255 - kk*35;
    62. I2(X_img2(i),Y_img2(i)) = 255 - kk*35;
    63. end
    64. if r==8
    65. I2(X_img1(i),Y_img1(i)) = 255 - kk*30;
    66. I2(X_img2(i),Y_img2(i)) = 255 - kk*30;
    67. end
    68. if r==9
    69. I2(X_img1(i),Y_img1(i)) = 255 - kk*25;
    70. I2(X_img2(i),Y_img2(i)) = 255 - kk*25;
    71. end
    72. if r==10
    73. I2(X_img1(i),Y_img1(i)) = 255 - kk*25;
    74. I2(X_img2(i),Y_img2(i)) = 255 - kk*25;
    75. end
    76. if r==11
    77. I2(X_img1(i),Y_img1(i)) = 255 - kk*23;
    78. I2(X_img2(i),Y_img2(i)) = 255 - kk*23;
    79. end
    80. if r==12
    81. I2(X_img1(i),Y_img1(i)) = 255 - kk*21;
    82. I2(X_img2(i),Y_img2(i)) = 255 - kk*21;
    83. end
    84. if r==13
    85. I2(X_img1(i),Y_img1(i)) = 255 - kk*19;
    86. I2(X_img2(i),Y_img2(i)) = 255 - kk*19;
    87. end
    88. if r==14
    89. I2(X_img1(i),Y_img1(i)) = 255 - kk*18;
    90. I2(X_img2(i),Y_img2(i)) = 255 - kk*18;
    91. end
    92. if r==15
    93. I2(X_img1(i),Y_img1(i)) = 255 - kk*17;
    94. I2(X_img2(i),Y_img2(i)) = 255 - kk*17;
    95. end
    96. if r==16
    97. I2(X_img1(i),Y_img1(i)) = 255 - kk*16;
    98. I2(X_img2(i),Y_img2(i)) = 255 - kk*16;
    99. end
    100. end
    101. end
    102. I2 = medfilt2(I2,[5,5]);

    PSO优化:

    1. while iter
    2. iter=iter+1;
    3. for i=1:N
    4. alpha(1) = X(1,i);
    5. alpha(2) = X(2,i);
    6. alpha(3) = X(3,i);
    7. V_score = func_cal_score(alpha,L,m,Theta,Ls,Xt,Yt,r,I2);
    8. J=1/(1+(V_score));
    9. if J>fpbest(i)
    10. fpbest(i) = J;
    11. Xpbest(:,i) = X(:,i);
    12. end
    13. end
    14. [fitnessmax,index]=max(fpbest);
    15. if fitnessmax>fgbest
    16. fgbest=fitnessmax;
    17. Xgbest=X(:,index);
    18. end
    19. for i=1:N
    20. r1 = rand;
    21. r2 = rand;
    22. fai1 = C1*r1;
    23. fai2 = C2*r2;
    24. V(:,i) = w(iter) * V(:,i) +fai1 *( Xpbest(:,i) - X(:,i) ) +
    25. fai2 * ( Xgbest(:,1) - X(:,i) );
    26. index = find(abs(V(:,i))>Vmax);
    27. if(any(index))
    28. V(index,i) = V(index,i)./abs(V(index,i)).*Vmax;
    29. end
    30. X(:,i) = X(:,i)+V(:,i);
    31. end
    32. fgbest_fig(iter) = fgbest;
    33. Xgbest_fig(:,iter) = Xgbest;
    34. alpha(1) = Xgbest_fig(1,iter);
    35. alpha(2) = Xgbest_fig(2,iter);
    36. alpha(3) = Xgbest_fig(3,iter);
    37. V_scores = func_cal_score(alpha,L,m,Theta,Ls,Xt,Yt,r,I2);
    38. V_score2(iter) = V_scores;
    39. end

    VIC算法的主程序调用:

    1. ............................
    2. %然后用这条曲线构造一个virtual object,如图二所示。 这个object 是曲线以半径r外扩得到的长条形曲面,如图所示。
    3. %进行扩展
    4. X1 = zeros(L/Ls,1);
    5. Y1 = zeros(L/Ls,1);
    6. X2 = zeros(L/Ls,1);
    7. Y2 = zeros(L/Ls,1);
    8. for i = 1:L/Ls
    9. if mod(sum(theta(1:i)),180) < 0
    10. X1(i) = X(i) + r*cos(pi*theta(i)/180);
    11. Y1(i) = Y(i) - r*sin(pi*theta(i)/180);
    12. X2(i) = X(i) - r*cos(pi*theta(i)/180);
    13. Y2(i) = Y(i) + r*sin(pi*theta(i)/180);
    14. else
    15. X1(i) = X(i) + r*cos(pi/2 - pi*theta(i)/180);
    16. Y1(i) = Y(i) - r*sin(pi/2 - pi*theta(i)/180);
    17. X2(i) = X(i) - r*cos(pi/2 - pi*theta(i)/180);
    18. Y2(i) = Y(i) + r*sin(pi/2 - pi*theta(i)/180);
    19. end
    20. end
    21. if Ls == 1
    22. figure;
    23. subplot(121)
    24. plot(X,Y,'b');hold on;
    25. plot(X,Y,'k.');hold on;
    26. plot(X1,Y1,'r');hold on;
    27. plot(X2,Y2,'r');hold on;
    28. for i = 1:length(X)
    29. line([X2(i),X1(i)],[Y2(i),Y1(i)],'Color',[1 0 1]);hold on;
    30. end
    31. title('virtual object');
    32. grid on
    33. axis square
    34. axis([0,L,0,L]);
    35. else
    36. figure;
    37. plot(X,Y,'b');hold on;
    38. plot(X,Y,'k.');hold on;
    39. plot(X1,Y1,'r');hold on;
    40. plot(X2,Y2,'r');hold on;
    41. for i = 1:length(X)
    42. line([X2(i),X1(i)],[Y2(i),Y1(i)],'Color',[1 0 1]);hold on;
    43. end
    44. title('virtual object');
    45. grid on
    46. axis square
    47. axis([0,L,0,L]);
    48. end
    49. %产生虚拟图像
    50. %将X和Y曲线变化为实际图像信息
    51. I2 = func_Virtual_Image(X,Y,X_img,Y_img,L,Ls,r,theta);
    52. if Ls == 1
    53. subplot(122)
    54. imshow(I2,[])
    55. title('被描绘出来的曲线');
    56. axis square
    57. end

    四、仿真结论分析

     

     

        从上面的仿真结果可知,通过粒子群优化之后,系统的Score值不断逼近0,这说明通过粒子群优化之后,得到的光滑曲线值的精度达到了最大值。从左图可知,当系统的优化达到优化预期时,系统的最佳适应度值达到最佳值,接近1。

     

        从上图的仿真结果可知,当优化之后,系统的仿真参数达到收敛预期。最后输出的参数值,就可以使系统的曲线建模达到最高精度。

    五、算法相关应用

          通过所研究的VIC算法,可以有效检测输出医学上的蠕虫检测,从而提高医学诊断等目标 。

    六、参考文献

    [1] Semin B ,  Auradou H ,  Francois M . Curvilinear shapes by Virtual Image Correlation[J]. Europhysics News, 2011, 42(6):p.17-18.A10-10&12

  • 相关阅读:
    字字珠玑!GitHub爆赞的网络协议手册,被华为大佬指定内部必学?
    【Java并发编程六】多线程越界问题
    国产香氛品牌别样的生意经
    spring cache (Redis方式)
    【疑难攻关】——XXE漏洞快速入门
    docker报错问题解决:Error Invalid or corrupt jarfile app.jar
    光源基础(2)——光的强度、波长、颜色合成与互补关系
    Eclipse里 ant 打包 BUILD FAILED 总结
    简单HOOK流程
    十六、Webpack常见的插件和模式
  • 原文地址:https://blog.csdn.net/ccsss22/article/details/126026448