import math
import random
m = 1.5 #mu
l = 2 #lambda
c = 3 #control/number of servers
def single(m, l, c):
p = (l/m)
Po = (1-(l/m))
Ls = (l/(m-l))
Ws = (1/(m-l))
Wq = (l/(m*(m-l)))
Lq = (l**2/(m*(m-l)))
return(p, Po, Ls, Ws, Wq, Lq)
def multi(m, lm, mu):
rho=lm/mu
n=0
sm=0
while(n<=m-1):
sm=(1/math.factorial(n))*pow(rho,n)
n+=1
sm = sm + 1/(1/math.factorial(m))*(pow(rho,m)*m*mu/(m*mu-lm))
lS=lm*mu*pow(rho,m)/((math.factorial(m-1)*(m*mu-lm)**2))*(1/sm)+rho
lQ=lS-rho
#Po = 1/sm
return(lq, ls)
singReturn=single(m, l, c)
multiReturn=multi(3, 2, 1.5)
print("SINGLE SERVER QUEUEING")
print("-----------------------")
print("p: %4.4f \nPo: %4.4f \nLs: %4.4f \nWs: %4.4f \nWq: %4.4f \nLq: %4.4f"%singReturn)
我的回复和错误:
Traceback (most recent call last):
File "/home/schnipdip/Desktop/final_part1_chris_herzog.py", line 35, in <module>
multiReturn=multi(3, 2, 1.5)
File "/home/_____/Desktop/final_part1_.py", line 28, in multi
sm = sm + 1/(1/math.factorial(m))*(pow(rho,m)*m*mu/(m*mu-lm))
ZeroDivisionError: integer division or modulo by zero
我试图找到SM的值,然后将其转换为Po变量。 while循环通过m(或c)-1控制有多少台服务器。 我更改了循环中的变量,以查看变量是否被先前的值覆盖在内存中,而不是因为任何原因而重置。我确定这与它无关。
答案 0 :(得分:1)
如果你正在使用Python 2,可能是由于这一部分:
... 1/(1/math.factorial(m)) ...
从逻辑上讲,它没有多大意义:数学上,1/(1/x)
只是一种拼写简单x
的笨拙方式。所以我打赌你的代码在那里有逻辑错误。
但是,在Python 2中,它也有编程错误:应用于整数的/
会截断Python 2中的整数除法:
>>> import math
>>> m = 3
>>> math.factorial(m)
6
>>> 1 / math.factorial(m)
0
为了防止这种情况,请使用例如1.0
代替1
来强制浮动分割:
>>> 1.0 / math.factorial(m)
0.16666666666666666