資源簡介
關于層次分析法和c#結合,一個很好的例子,可以參考下,對編程和系統(tǒng)開發(fā)很有幫助,
代碼片段和文件信息
using?System;
using?System.Data;
using?System.Configuration;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Web.UI.HtmlControls;
??
/*數據表的結構*/
public?struct?TGrid{???????????
public?int?m;
????public?int?n;
????public?int[]?tag; /*關聯(lián)標記*/
????public?float[]?GArray; /*用于存放讀入的判斷矩陣的數據*/
};
/*用于保存特征向量與權值的數據結構*/
public?struct?TProperty{
????public?float?CR;?? /*一次性比率*/
????public?float?CI; /*一致性指標*/
????public?float?RI;?? /*隨機一致性指標*/
????public?float?max; /*最大特征值λmax*/
????public?float[]?W; /*用來存放權值ω的數組(最多20行或列)*/
????public?int?n;
};
///?
///?CJudgeMatrix?的摘要說明
///?
public?class?CJudgeMatrix
{
????public?int?MAXSIZE=20;
????public?int?TOTALGRIDNUM=30; /*最多可以有30個表即A+C<=30*/
????public?double?eps=0.000001; /*Similar?0*/
????/*存放不同的隨機一致性指標RI*/
????public?float[]?valueRI=new?float[]{0?0?0.52f0.89f?1.12f?1.24f?1.32f1.41f?1.45f1.49f1.52f1.54f1.56f1.58f1.59f?};
???
public?CJudgeMatrix()
{
//
//?TODO:?在此處添加構造函數邏輯
//????????
}
????/****************************************和積法***************************************/
????public?TProperty?SumMethod1(TGrid?tempG)
????{
????????int?ij;
????float[]?tArr=new?float[MAXSIZEMAXSIZE];
????float?tempSSumWCIRICR;
????float[]?s=new?float[MAXSIZE];
????????float[]?b=new?float[MAXSIZE];
????????TProperty?p;
????????p.W?=?new?float[MAXSIZE];
????/*按列歸一化*/
????for(j=0;j ????{
????????????s[j]=0;
????for(i=0;i ????s[j]=s[j]+tempG.GArray[ij];
????for(i=0;i ????tArr[ij]=tempG.GArray[ij]/s[j];
????}
????/*按行求和*/
????for(i=0;i ????{ b[i]=0;
????for(j=0;j b[i]=b[i]+tArr[ij];
????}
????SumW=0;
????for(i=0;i ????SumW=SumW+b[i];
????/*求ω*/
????for(i=0;i ????{
????????????b[i]=b[i]/SumW;
????????????p.W[i]=b[i];
????}
????/*求矩陣的最大特征根λmax*/
????for(tempS=0i=0;i ????{
????????????for(SumW=0?j=0;j SumW=SumW+tempG.GArray[ij]*b[j];
????SumW=SumW/b[i];
????tempS=tempS+SumW;
????}
????tempS=tempS/tempG.m;
????????p.max?=?tempS;
???/*?for(i=0j=0;i ????{
????????????if?(tempG.tag[i]==1)?p.W[i]?=?b[j++];
????????????else?p.W[i]?=?0;
????}*/
????????p.CI=(tempS-tempG.m)/(tempG.m-1);
????p.RI=valueRI[tempG.m-1];
????p.CR=(float)(p.CI/(p.RI==0?CCommonFunc.eps:p.RI));/*防止除數為0*/
????p.n=tempG.n;
????return?p;
????}
????/***************************************和法***************************************/
????///?
????///?求特征向量、精度指標_和法
????///?
????///?
????///?
????public?TProperty?SumMethod(TGrid?tempG)
????{
????????int?i?j;
????????float[]?tArr?=?new?float[MAXSIZE?MAXSIZE];
????????
評論
共有 條評論