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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Aus analytischer Sicht sind die Variablen j und i in der initialize_matrix Methode stets innerhalb der array-Grenzen.
Es gibt jedoch die variable k, die kann erhöht werden p.Länge^2 mal. Als Sie auch diese variable verwenden, um den Zugriff auf das array p es muss < p.Länge.
Ich denke, Sie wollen fügen Sie den Wert an position k, aber online jeder Zeile. Ich schlage vor, setzen k auf null nach der inneren for-Schleife ist fertig.
EDIT: Wie vorhergesagt...
Ausgabe für n = 4:
Geben Sie die Anzahl der Kriterien
n=
4
Geben Sie die Kriterien ein:
Kriterium 1:ein
Kriterium 2:b
Kriterium 3:c
Kriterium 4:d
Geben Sie den Vergleich
Vergleichen Sie a mit b:
0.3
Vergleich a mit c:
0.1
Vergleichen a mit d:
0.6
Vergleichen Sie b mit c:
0.5
Vergleichen Sie b mit d:
0.8
Vergleichen Sie c mit d:
0.2
Die matrix a ist:
1.0 0.3 0.1 0.6 0.5 0.8
3.3333333333333335 1.0 0.3 0.1 0.6 0.5
10.0 3.3333333333333335 1.0 0.3 0.1 0.6
1.6666666666666667 10.0 3.3333333333333335 1.0 0.3 0.1
2.0 1.6666666666666667 10.0 3.3333333333333335 1.0 0.3
1.25 2.0 1.6666666666666667 10.0 3.3333333333333335 1.0
Die Methode
Ich würde es begrüßen, wenn Sie würde markieren Sie die Frage als beantwortet.