基於層次分析法的信息安全風險評估量化法研究報告

信息安全管理課的作業,最後弄了一篇完整的論文和做出來的模型,還有寫點一點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);
	}
}

以下是AHP的模擬情況


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章