Grundsätzlich ist die Frage, eine Simulation für Leute zu erstellen, die in einer Bank Schlange stehen. Es gibt bestimmte Kriterien wie durchschnittliche Wartezeit, durchschnittliche Anzahl der Minuten, durchschnittliche längste Wartezeit ... usw. Es wird auch gebeten, mein Programm dreimal pro 1000 Mal auszuführen (mit einer for-Schleife). Das Problem ist, dass jedes Mal, wenn ich den Code ausführe, die Antworten aus irgendeinem Grund aufgehen und ich nicht zu wissen vermag, warum. Im letzten Durchlauf sollte die Anzahl der ausgeführten Simulationen beispielsweise 1000 Mal betragen, stattdessen wurden alle vorherigen Läufe zusammen addiert und 3000 Mal angegeben.Warum fügt es jedes Mal dem letzten hinzu, wenn ich mein Programm starte?
Auch alle Variablen außerhalb der While-Schleife (AverageWaitingTime, AverageSimulationTime ... etc) geben mir falsche Antworten. Zum Beispiel, weil für die durchschnittliche Wartezeit der gleiche Wert der Wartezeit addiert wird. Ich kann nicht herausfinden warum.
public class QueueSimulation {
public static void main(String[] args) {
Queue<Customer> q = new LinkedList<Customer>();
int numServed = 0;
int averageNumServed = 0;
int waitingTime = 0;
int maxWaitingTime = 0;
int averageLongestWaitingTime = 0;
int totalWaitingTime = 0;
double averageWaitingTime = 0;
int maxQueueSize = 0;
int timeDone = 0;
int totalSimulationTime = 0;
int averageSimulationTime = 0;
int numSimulationRan = 0;
Random randomGenerator = new Random();
int time = 0;
int processingTime = 0;
int totalProcessingTime = 0;
for (int i = 0; i < 1000; i++) {
double arrivalRate = 0.2;
int maxProcessingTime = 5;
while (time < 8 * 60) {
if (Math.random() < 0.2) {
System.out.println("A new customer arrives at time " + time);
processingTime = randomGenerator.nextInt(maxProcessingTime);
totalProcessingTime += processingTime;
Customer c = new Customer(time, processingTime);
q.add(c);
if (q.size() > maxQueueSize)
maxQueueSize = q.size();
}
if (waitingTime > maxWaitingTime)
maxWaitingTime = waitingTime;
averageLongestWaitingTime += maxWaitingTime;
// serve the next customer
if (time > timeDone) // service is available
if (!q.isEmpty()) {
Customer c = q.remove();
timeDone = time + c.getProcessingTime();
// calculate the waiting time of this customer
waitingTime = time - c.getArrivalTime();
// update total waiting time of all customers
totalWaitingTime += waitingTime;
// service this customer
numServed++;
}
time++;
if (time > 8 * 60)
while (!q.isEmpty()) {
Customer c = q.remove();
timeDone = time + c.getProcessingTime();
// calculate the waiting time of this customer
waitingTime = time - c.getArrivalTime();
// update total waiting time of all customers
totalWaitingTime += waitingTime;
// service this customer
numServed++;
}
}
averageWaitingTime += (totalWaitingTime/numServed);
totalSimulationTime = timeDone;
averageSimulationTime += totalSimulationTime;
averageNumServed += numServed;
numSimulationRan += 1;
}
System.out.println();
System.out.println("Average waiting time per customer: " + (double) averageWaitingTime/1000);
System.out.println("Average longest waiting time: " + (double) averageLongestWaitingTime/1000);
System.out.println("Average number of minutes: " + (double) averageSimulationTime/1000);
System.out.println("Longest waiting time: " + maxWaitingTime);
System.out.println("Average number of customers " + (double) averageNumServed/1000);
System.out.println("Number of times the simulation ran: " + numSimulationRan);
for (int j = 0; j < 1000; j++) {
double arrivalRate = 0.5;
int maxProcessingTime = 3;
while (time < 8 * 60) {
if (Math.random() < 0.5) {
System.out.println("A new customer arrives at time " + time);
processingTime = randomGenerator.nextInt(maxProcessingTime);
totalProcessingTime += processingTime;
Customer c = new Customer(time, processingTime);
q.add(c);
if (q.size() > maxQueueSize)
maxQueueSize = q.size();
}
if (waitingTime > maxWaitingTime)
maxWaitingTime = waitingTime;
averageLongestWaitingTime += maxWaitingTime;
// serve the next customer
if (time > timeDone) // service is available
if (!q.isEmpty()) {
Customer c = q.remove();
timeDone = time + c.getProcessingTime();
// calculate the waiting time of this customer
waitingTime = time - c.getArrivalTime();
// update total waiting time of all customers
totalWaitingTime += waitingTime;
// service this customer
numServed++;
}
time++;
if (time > 8 * 60)
while (!q.isEmpty()) {
Customer c = q.remove();
timeDone = time + c.getProcessingTime();
// calculate the waiting time of this customer
waitingTime = time - c.getArrivalTime();
// update total waiting time of all customers
totalWaitingTime += waitingTime;
// service this customer
numServed++;
}
}
averageWaitingTime += (totalWaitingTime/numServed);
totalSimulationTime = timeDone;
averageSimulationTime += totalSimulationTime;
averageNumServed += numServed;
numSimulationRan += 1;
}
System.out.println();
System.out.println("Average waiting time per customer: " + (double) averageWaitingTime/1000);
System.out.println("Average longest waiting time: " + (double) averageLongestWaitingTime/1000);
System.out.println("Average number of minutes: " + (double) averageSimulationTime/1000);
System.out.println("Longest waiting time: " + maxWaitingTime);
System.out.println("Average number of customers " + (double) averageNumServed/1000);
System.out.println("Number of times the simulation ran: " + numSimulationRan);
for (int k = 0; k < 1000; k++) {
double arrivalRate = 0.68;
int maxProcessingTime = 4;
while (time < 8 * 60) {
if (Math.random() < 0.68) {
System.out.println("A new customer arrives at time " + time);
processingTime = randomGenerator.nextInt(maxProcessingTime);
totalProcessingTime += processingTime;
Customer c = new Customer(time, processingTime);
q.add(c);
if (q.size() > maxQueueSize)
maxQueueSize = q.size();
}
if (waitingTime > maxWaitingTime)
maxWaitingTime = waitingTime;
averageLongestWaitingTime += maxWaitingTime;
// serve the next customer
if (time > timeDone) // service is available
if (!q.isEmpty()) {
Customer c = q.remove();
timeDone = time + c.getProcessingTime();
// calculate the waiting time of this customer
waitingTime = time - c.getArrivalTime();
// update total waiting time of all customers
totalWaitingTime += waitingTime;
// service this customer
numServed++;
}
time++;
if (time > 8 * 60)
while (!q.isEmpty()) {
Customer c = q.remove();
timeDone = time + c.getProcessingTime();
// calculate the waiting time of this customer
waitingTime = time - c.getArrivalTime();
// update total waiting time of all customers
totalWaitingTime += waitingTime;
// service this customer
numServed++;
}
}
averageWaitingTime += (totalWaitingTime/numServed);
totalSimulationTime = timeDone;
averageSimulationTime += totalSimulationTime;
averageNumServed += numServed;
numSimulationRan += 1;
}
System.out.println();
System.out.println("Average waiting time per customer: " + (double) averageWaitingTime/1000);
System.out.println("Average longest waiting time: " + (double) averageLongestWaitingTime/1000);
System.out.println("Average number of minutes: " + (double) averageSimulationTime/1000);
System.out.println("Longest waiting time: " + maxWaitingTime);
System.out.println("Average number of customers " + (double) averageNumServed/1000);
System.out.println("Number of times the simulation ran: " + numSimulationRan);
}
}
Ausgang:
A new customer arrives at time 5
A new customer arrives at time 10
A new customer arrives at time 11
A new customer arrives at time 12
A new customer arrives at time 25
A new customer arrives at time 28
A new customer arrives at time 31
A new customer arrives at time 45
A new customer arrives at time 48
A new customer arrives at time 51
A new customer arrives at time 59
A new customer arrives at time 64
A new customer arrives at time 68
A new customer arrives at time 86
A new customer arrives at time 100
A new customer arrives at time 106
A new customer arrives at time 108
A new customer arrives at time 113
A new customer arrives at time 115
A new customer arrives at time 120
A new customer arrives at time 124
A new customer arrives at time 125
A new customer arrives at time 126
A new customer arrives at time 132
A new customer arrives at time 137
A new customer arrives at time 153
A new customer arrives at time 156
A new customer arrives at time 164
A new customer arrives at time 201
A new customer arrives at time 206
A new customer arrives at time 208
A new customer arrives at time 219
A new customer arrives at time 226
A new customer arrives at time 233
A new customer arrives at time 234
A new customer arrives at time 237
A new customer arrives at time 242
A new customer arrives at time 246
A new customer arrives at time 247
A new customer arrives at time 251
A new customer arrives at time 262
A new customer arrives at time 271
A new customer arrives at time 276
A new customer arrives at time 277
A new customer arrives at time 282
A new customer arrives at time 285
A new customer arrives at time 287
A new customer arrives at time 292
A new customer arrives at time 296
A new customer arrives at time 298
A new customer arrives at time 318
A new customer arrives at time 319
A new customer arrives at time 327
A new customer arrives at time 336
A new customer arrives at time 337
A new customer arrives at time 338
A new customer arrives at time 346
A new customer arrives at time 355
A new customer arrives at time 356
A new customer arrives at time 358
A new customer arrives at time 362
A new customer arrives at time 363
A new customer arrives at time 366
A new customer arrives at time 374
A new customer arrives at time 379
A new customer arrives at time 380
A new customer arrives at time 384
A new customer arrives at time 389
A new customer arrives at time 400
A new customer arrives at time 407
A new customer arrives at time 416
A new customer arrives at time 418
A new customer arrives at time 424
A new customer arrives at time 427
A new customer arrives at time 433
A new customer arrives at time 436
A new customer arrives at time 437
A new customer arrives at time 438
A new customer arrives at time 446
A new customer arrives at time 454
A new customer arrives at time 466
A new customer arrives at time 469
A new customer arrives at time 471
Average waiting time per customer: 1.0
Average longest waiting time: 2.714
Average number of minutes: 475.0
Longest waiting time: 8
Average number of customers 83.0
Number of times the simulation ran: 1000
Average waiting time per customer: 2.0
Average longest waiting time: 2.714
Average number of minutes: 950.0
Longest waiting time: 8
Average number of customers 166.0
Number of times the simulation ran: 2000
Average waiting time per customer: 3.0
Average longest waiting time: 2.714
Average number of minutes: 1425.0
Longest waiting time: 8
Average number of customers 249.0
Number of times the simulation ran: 3000
Ich verstehe deine Frage nicht. Bitte zeigen Sie die Ausgabe Ihrer Läufe an und erklären Sie, was Sie mit "falsch" meinen. – betseyb
Hier gehts. Sorry dafür :) – user6168685