基準の重みを計算するためのAHP(Analytic Hierarchy Process)アルゴリズムを実装しようとしています(固有のベターを使用)。たとえば、スマートフォンを購入したいです。私の基準は、色、記憶、配達です。重みを計算するには、基準間でペアワイズ比較を行う必要があります。色と記憶、色と配達、記憶と配達を比較します。2つの基準を比較するために、9から1/9までのスケールを使用します。たとえば、色と記憶を比較します。私の意見では、色が記憶よりも4回重要である場合は、4を使用します。色が記憶と同じ重要性を持っている場合は、1を使用します。色が記憶よりも重要でない場合は、4回使用します。 1/4=0.25を使用します。
重みを計算するには、行列を作成する必要があります。
color memory delivery
color 1 value1 value2
memory 1/value1 1 value3
delivery 1/value2 1/value3 1
私の場合、基準が3つしかないため、マトリックスは3x3です。プログラムは3つの基準で機能していますが、4、5以上では機能していません。行列が作成された後、重みを与える固有ベクトルを計算できます。どんな提案でもいただければ幸いです。前もって感謝します!
Criteriaクラスのコードは次のとおりです。
public class Criteria
{
public static void main(String[] args)
{
AHP ahp=new AHP();
int n;
int NUMBER_COMPARISON;
Scanner keyboard=new Scanner(System.in);
System.out.println("Enter the number of criteria");
System.out.println("n=");
n=keyboard.nextInt();
NUMBER_COMPARISON=(n*n-n)/2;
double [][] a=new double[n][n];
String [] criteria=new String[n];
double [] p=new double[NUMBER_COMPARISON];//used to hold the values of comparisons
System.out.println("Enter the criteria:");
for(int i=0; i<n;i++)
{
System.out.print("Criterion "+(i+1)+":");
criteria[i]=keyboard.next();
}
System.out.println("Enter the comparison");
int m=0;
for(int i=0; i<n;i++)
{
for(int j=i+1; j<n;j++)
{
System.out.println("Compare "+criteria[i]+" with "+criteria[j]+":");
p[m]=keyboard.nextDouble();
m++;
}
}
a=ahp.initialize_matrix(p);
ahp.show_matrix(a);
}
}
AHPクラスのコードは次のとおりです。
public class AHP
{
public static double[][] initialize_matrix(double[] p)
{
//initialize the matrix a
double a[][]=new double[p.length][p.length];
int k=0;
for(int i=0; i<p.length; i++)
{
for(int j=0; j<p.length;j++)
{
if(i==j)
a[i][j]=1;
else if(i<j)
{
a[i][j]=p[k];
k++;
}
else if(i>j)
a[i][j]=1/a[j][i];
}
}
return a;
}
public static void show_matrix(double[][] b )
{
//display the elements of the matrix a
System.out.println("\nThe matrix a is:");
for(int i=0; i<b.length;i++)
{
for(int j=0; j<b[i].length; j++)
System.out.print(b[i][j]+" ");
System.out.println();
}
}
}