【发布时间】:2017-05-12 11:33:30
【问题描述】:
大家好,模拟 M/M/1 的队列阻塞时间我想出了这个解决方案,但不幸的是它不是面向对象的,问题是我想用 M/M/2 模拟它系统,例如我用 19 初始化 lambda 和用 20 初始化 mu 只是为了简化计算任何解决方案、提示、代码示例将不胜感激。
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());
}
}
编辑:
如果您不了解队列理论,请查看here
【问题讨论】:
-
请客气,它表示服务器数量,更多信息请阅读这里en.wikipedia.org/wiki/M/M/1_queue
-
这只是一个愚蠢的玩笑。您应该将链接编辑到您的问题中。
-
您的问题具体是什么?即,您的代码做了哪些不该做的事情,或者不该做的事情?
-
@pjs 正如我所描述的,我以 M/M/1 的顺序实现了它我想实现 M/M/2,也符合 OOP 原则,我认为没有理由标记请
-
@Michael 谢谢我编辑了,请点赞,让我更快得到答案
标签: java arrays math queue simulation