AHP-Algorithmus funktioniert nur für 3 Kriterien

Ich versuche zu implementieren, AHP(Analytic Hierarchy Process) Algorithmus für die Berechnung Kriterium der GEWICHTE(mit eigen vetors). Zum Beispiel möchte ich auf ein Smartphone zu kaufen. Meine Kriterien sind: Farbe, Speicher, Lieferung. Für die Berechnung der GEWICHTE, die ich zu treffen paarweise Vergleich unter den Kriterien. Ich werde vergleichen Sie die Farbe mit Speicher, Farbe mit der Lieferung und der Speicher mit Lieferung.
Für den Vergleich von 2 Kriterien, die wir verwenden eine Skala von 9 bis 1/9.
Zum Beispiel Vergleiche ich die Farbe mit Gedächtnis: wenn meiner Meinung nach die Farbe wichtiger ist als memory-4 Male, verwende ich 4 ,bei color hat die gleiche Bedeutung wie Speicher, I 1, wenn die Farbe ist weniger wichtig als memory-4 Male, verwende ich 1/4=0.25.

Für die Berechnung der GEWICHTE, ich Baue eine matrix:

          color       memory       delivery

color     1           value1       value2

memory    1/value1      1          value3 

delivery  1/value2   1/value3       1          

In meinem Fall die matrix 3x3, weil ich nur 3 Kriterien. Das Programm arbeitet für 3 Kriterien, aber nicht für 4, 5 oder mehr. Nachdem die matrix aufgebaut ist, kann ich berechnen, eigen-Vektoren, die mir die GEWICHTE.Jeder Vorschlag würde geschätzt werden. Vielen Dank im Voraus!

Hier ist der code für die Kriterien der Klasse:

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);
   }    
}

Hier ist der code für AHP-Klasse:

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();   
    }
}
}
  • Was genau ist das problem in Fall müssen Sie mehr als 3 Kriterien? Hat das Programm eine exception wirft?
  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6 at AHP.initialize_matrix(AHP.java:21) at Kriterien.(Haupt-Kriterien.java:61)
  • Für die n Kriterien, die Anzahl der Vergleiche ist gleich n (n*n-n)/2. Für n=3 die Anzahl der Vergleiche ist 3. Ich denke, das ist der Grund, warum das Programm, es funktioniert für n=3. Für n=4, beispielsweise, die Anzahl der Vergleiche ist 6, und das Programm wirft eine Ausnahme.
  • Das ist der Grund, warum Sie nicht sehen, die Ausnahme, da die array-Größe beträgt ebenfalls 3 in diesem Fall. Jedoch haben Sie einen Blick auf mein update.
InformationsquelleAutor Lavinia | 2012-10-01
Schreibe einen Kommentar