Czesć,
Potrzebuję stworzyć program w języku java, który będzie symulatorem obsługi np. w obsługi kas w sklepie - przez rozkład normalny.
X/Y/n (X-rozkład kolejki, Y-rozkład obsługi)
Na teraz mam tylko, program z rozkładem wykładniczym, ale nie wiem jak zmienić na rozkład Gaussa? gdzie jest jakiś wzór?
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayDeque;
import java.util.Queue;
import java.util.Random;
public class UrzadSkarbowy {
private JTextArea textArea1;
private JTextArea textArea2;
private JTextArea textArea3;
private JTextArea textArea4;
private JButton obliczButton;
private JPanel GUI;
private JTextField textField1;
private JTextField textField3;
private JTextField textField2;
private JButton clearButton;
private JButton button1;
int sumaDlugosciKolejek=0;
int Max_time ;
double klient;
double czas;
int sumaCzasowCzekania=0;
double liczbaObsluzonychKlientow=0;
double zajetyDo = 0;
double odchylenieCzasuObslugi=0;
double tOblsugi;
public UrzadSkarbowy() {
textField1.setText("");
textField2.setText("");
textField3.setText("");
obliczButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
Max_time = Integer.parseInt(textField1.getText());
klient = Double.parseDouble(textField2.getText());
czas=Double.parseDouble(textField3.getText());
Random r = new Random();
int sumaDlugosciKolejek=0;
int sumaCzasowCzekania=0;
double liczbaObsluzonychKlientow=0;
Queue<Integer> Q = new ArrayDeque<Integer>();
for (int time = 0; time < Max_time; time++) {
if (r.nextDouble() < klient) {
Q.add(time);
}
sumaDlugosciKolejek += Q.size();
if (zajetyDo<time) {
if (Q.size()==0) continue;
sumaCzasowCzekania += (time - Q.peek()) + czas;
++liczbaObsluzonychKlientow;
Q.poll();
zajetyDo = time + czas - 1;
}
}
double avg = (double) sumaDlugosciKolejek / Max_time;
double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;
//double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
textArea1.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
+"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);
}
});
obliczButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
Max_time = Integer.parseInt(textField1.getText());
klient = Double.parseDouble(textField2.getText());
czas=Double.parseDouble(textField3.getText());
Random r = new Random();
int sumaDlugosciKolejek=0;
int sumaCzasowCzekania=0;
//double liczbaObsluzonychKlientow=0;
Queue<Integer> Q = new ArrayDeque<Integer>();
for (int time = 0; time < Max_time; time++) {
if (r.nextDouble() < klient) {
Q.add(time);
}
sumaDlugosciKolejek += Q.size();
if (zajetyDo<time) {
if (Q.size()==0) continue;
sumaCzasowCzekania += (time - Q.peek()) + czas;
++liczbaObsluzonychKlientow;
Q.poll();
zajetyDo = time + czas - 1;
}
}
double avg = (double) sumaDlugosciKolejek / Max_time;
double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;
//double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
textArea2.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
+"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);
}
});
obliczButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
Max_time = Integer.parseInt(textField1.getText());
klient = Double.parseDouble(textField2.getText());
czas=Double.parseDouble(textField3.getText());
Random r = new Random();
int sumaCzasowCzekania=0;
Queue<Integer> Q = new ArrayDeque<Integer>();
for (int time = 0; time < Max_time; time++) {
if (r.nextDouble() < klient) {
Q.add(time);
}
sumaDlugosciKolejek += Q.size();
if (zajetyDo<time) {
if (Q.size()==0) continue;
double tOblsugi = r.nextGaussian() * odchylenieCzasuObslugi + czas;
tOblsugi = Math.max(0, tOblsugi);
sumaCzasowCzekania += (time - Q.peek()) + (int)tOblsugi;
++liczbaObsluzonychKlientow;
Q.poll();
zajetyDo = time + tOblsugi - 1;
}
}
double avg = (double) sumaDlugosciKolejek / Max_time;
double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;
//double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
textArea3.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
+"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);
}
});
obliczButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
Max_time = Integer.parseInt(textField1.getText());
klient = Double.parseDouble(textField2.getText());
czas=Double.parseDouble(textField3.getText());
Random r = new Random();
int sumaDlugosciKolejek=0;
//double liczbaObsluzonychKlientow=0;
Queue<Integer> Q = new ArrayDeque<Integer>();
for (int time = 0; time < Max_time; time++) {
if (r.nextDouble() < klient) {
Q.add(time);
}
sumaDlugosciKolejek += Q.size();
if (zajetyDo<time) {
if (Q.size()==0) continue;
tOblsugi = r.nextGaussian() * odchylenieCzasuObslugi + czas;
tOblsugi = Math.max(0, tOblsugi);
sumaCzasowCzekania += (time - Q.peek()) + (int)tOblsugi;
liczbaObsluzonychKlientow=Max_time/czas;
Q.poll();
zajetyDo = time + tOblsugi - 1;
}
}
double avg = (double) sumaDlugosciKolejek / Max_time;
//double avgWaitTime = (double)sumaCzasowCzekania / Max_time/czas;
double avgWaitTime = (double)sumaCzasowCzekania / liczbaObsluzonychKlientow;
textArea4.setText("Srednia długość kolejki:" + avg + "\nDlugosc kolejki na koniec:" + Q.size()
+"\nSredni czas oczekiwania i załatwienia sprawy:" + avgWaitTime);
}
});
clearButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
textArea1.setText("");
textArea2.setText("");
textArea3.setText("");
textArea4.setText("");
}
});
button1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent actionEvent) {
System.exit(0);
}
});
}
public static void main(String[] args) {
JFrame frame = new JFrame("UrzadSkarbowy");
frame.setContentPane(new UrzadSkarbowy().GUI);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
}