2017-05-12 3 views
0

hallo Jungs für die Simulation der Warteschlange Sperrzeit für eine M/M/1 Ich kam mit dieser Lösung, aber es ist leider nicht objektorientiert, auch das Problem ist, ich möchte es mit M/M/2-System zu simulieren Zum Beispiel habe ich Lambda mit 19 und mu mit 20 initialisiert, nur um die Berechnung zu erleichtern. Jede Lösung, jeder Hinweis, jedes Codebeispiel wird sehr geschätzt.Wie verarbeitet man die Sperrzeit einer simulierten Queue in Java für ein M/M/2-System?

public class Main { 
    public static void main(String[] args) { 
     final int MAX_ENTITY = 100000; 
     final int SYSTEM_CAPACITY = 5; 
     final int BUSY = 1; 
     final int IDLE = 0; 
     double lambda = 19, mu = 20; 
     int blocked = 0; 
     int queue_length = 0; 
     int server_state = IDLE; 
     int entity = 0; 
     double next_av = getArivalRand(lambda); 
     double next_dp = next_av + getDeparturedRand(lambda); 
     while (entity <= MAX_ENTITY) { 
      //Arrival 
      if (next_av <= next_dp) { 
       entity++; 
       if (server_state == IDLE) { 
        server_state = BUSY; 
       } else if (queue_length < SYSTEM_CAPACITY - 1) { 
        queue_length++; 
       } else { 
        blocked++; 
       } 
       next_av += getArivalRand(lambda); 
      } // Departure 
      else if (queue_length > 0) { 
       queue_length--; 
       next_dp = next_dp + getDeparturedRand(mu); 
      } else { 
       server_state = IDLE; 
       next_dp = next_av + getDeparturedRand(mu); 
      } 
     } 
     System.out.println("Blocked Etity:" + blocked + "\n"); 
    } 

    public static double getArivalRand(double lambda) { 
     return -1/lambda * Math.log(1 - Math.random()); 
    } 

    public static double getDeparturedRand(double mu) { 
     return -1/mu * Math.log(1 - Math.random()); 
    } 
} 

EDIT:

Check here wenn u wissen nicht, über die Warteschlangentheorie

+2

bitte höflich sein, gibt es Anzahl der Server, hier für weitere Informationen https lesen: //en.wikipedia.org/wiki/M/M/1_queue –

+0

Es war nur ein dummer Scherz. Sie sollten den Link in Ihre Frage bearbeiten. – Michael

+0

Was genau ist Ihre Frage? Das heißt, was macht Ihr Code, den er nicht tun soll oder nicht tun soll? – pjs

Antwort

0

oh Junge, du bist Code ernst Refactoring, um M/M/2 zu erreichen muss. Ich erstellte eine Gist-Datei here die ich denke implementiert, was Sie wollten, In der Gist-Datei habe ich eine Klasse für den Ausgleich von zwei Warteschlangen in zwei Servern und auch ich habe es mit zwei Samen simuliert, es ist viel mehr Objektorientiert Ansatz,

hier ist ein Codebeispiel aus Kern-Datei, die für den Ausgleich Last von ist die Aufgaben

if (server1.getQueueLength() < server2.getQueueLength()) 
    currentServer = server1; 
else if (server1.getQueueLength() > server2.getQueueLength()) 
    currentServer = server2; 
else if (currentServer == server1) 
    currentServer = server2; 
else 
    currentServer = server1; 
+0

Oh danke, es ist genau das, was ich wollte <3 –

Verwandte Themen