信息安全管理课的作业,最后弄了一篇完整的论文和做出来的模型,还有写点一点java代码,嫌麻烦后面就没完成。
这篇就简单讲一下层次分析法(Analytic Hierarchy Process,简称 AHP)前面的摘要啊绪论啊风险评估的步骤就简单讲一讲。
最重要的三点,资产,脆弱性和威胁。
风险的确定的计算原理就描述为 R=f(A, V, T)
其中:R 代表风险,A 代表资产,V 代表脆弱性,T 代表威胁
层次分析法(Analytic Hierarchy Process,简称AHP)
是一种定性与定量相结合的、层次化的多准则决策方法。
核心是将复杂的问题进行层次化,将原问题简单化并在层次基础上进行分析;
它把决策者的主观判断量化,以数量形式进行表达和处理,通过定量形式的数据将定性和定量分析相结合从而帮助决策者进行决策。
基本原理:
把要决策的问题看成是由很多影响因素组成的一个大系统,这些因素之间在一定程度上是相互关联和制约的,而且这些因素根据彼此之间的隶属关系可以组合成若干个层次,再利用相关数学方法对各个因素层进行排序,最后通过对排序结果的分析来辅助决策。
基本步骤:
(1)分析影响因素的关系,建立层次模型;
(2)构造各层次间的两两对比较判断矩阵;
(3)计算单个矩阵的权重向量;
(4)计算各层元素对目标层的合成权重向量。
以下是步骤,直接从ppt截图吧= =自己拿java写了一部分小程序,其实主要就是很简单的矩阵的变换- -而且也没有控制小数精度所以不是很精准,因为网上能找得到现成的AHP分析软件,后面就没有写完
以下是处理矩阵的Arr类,主程序就不贴了
import java.text.DecimalFormat; import java.util.Scanner; public class Arr{ int n;//行,列的数目 double[][] arr;//矩阵 double[][] arr1;//中间值 double[] row;//求行和的数组 double[] row1;//arr*row double vetor; double CR; Scanner sc=new Scanner(System.in); // DecimalFormat df=new DecimalFormat("0.0000"); void Arr(){//不带参数的构造函数 } void Arr(int n){//带参数的构造函数 this.n=n; arr=new double[n][n]; arr1=new double[n][n]; for(int i=0;i<n;i++){//输入数据 for(int j=i+1;j<n;j++){ arr[i][j]=sc.nextDouble(); } } for(int i=0;i<n;i++){//对角线为1 arr[i][i]=1; } for(int i=1;i<n;i++){//对称的取倒数 for(int j=0;j<i;j++){ arr[i][j]=1/arr[j][i]; } } row=new double[n]; row1=new double[n];//初始化 } void Normalization(){//归一化处理 double sum=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ sum+=arr[j][i]; }//求列和 for(int k=0;k<n;k++){ arr1[k][i]=arr[k][i]/sum; } sum=0; } } void rowSumAndNor(){//求行和并且归一化 double sum=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ sum+=arr1[i][j]; } row[i]=sum; sum=0; } for(int i=0;i<n;i++){ sum+=row[i]; } for(int i=0;i<n;i++){ row[i]=row[i]/sum; } } void arrMul(){//arr*row double sum=0; for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ sum+=arr[i][j]*row[j]; } row1[i]=sum; sum=0; } } void avg(){//平均值 double sum=0; for(int i=0;i<n;i++){ sum+=row1[i]/row[i]; } vetor=sum/n; } void getCR(){ double[] RI=new double[]{0,0,0.52,0.90,1.12,1.26,1.36,1.41,1.46,1.49}; double CI=(vetor-n)/(n-1); CR=CI/RI[n]; } void display(){//打印 // for(int i=0;i<n;i++){ // for(int j=0;j<n;j++){ // System.out.print(arr1[i][j]+" "); // } // System.out.println(); // } // for(int i=0;i<n;i++){ // System.out.print(row1[i]+" "); // } System.out.println(); System.out.print("("); for(int i=0;i<n;i++){ System.out.print(row[i]+" "); } System.out.print(")"); System.out.println(); System.out.println(vetor); System.out.println(CR); } }