packages = ["numpy", "matplotlib"]
rayleigh_staffing
Product 1
target = "sim_output"
def rayleigh_staffing(effort, schedule, start):
import math
dt = .1
threshold = .97
time = 0
cum_effort = 0
work_gap = effort
buildup_parameter = -2.0*math.log(1.0-threshold) / (schedule*schedule)
#print('Buildup Parameter = '+f'{buildup_parameter}')
pyscript.write(target, 'Buildup Parameter = '+f'{buildup_parameter}', append=False)
time_points = []
effort_rate_output = []
while time <= start + schedule: #time < end_time developed_software[time] < requirements[0] work_gap > .01
if time == 0:
#auxiliaries
learning = buildup_parameter * time
work_gap = effort-cum_effort
#rates
effort_rate = learning * work_gap
else:
# level integration
cum_effort = cum_effort + dt * effort_rate
#auxiliaries
learning = buildup_parameter * time
work_gap = effort-cum_effort
#rates
effort_rate = learning * work_gap
time_points += [time + start]
effort_rate_output += [effort_rate]
#print(time, effort_rate)
time += dt
return time_points, effort_rate_output
def sim():
import math
import matplotlib.pyplot as plot
import matplotlib as mpl
mpl.rcParams['axes.spines.top'] = False
mpl.rcParams['axes.spines.right'] = False
# initialize values
dt = .25
people_added_pulse = 2.
threshold_min = .95
threshold_max = .99
# constants
buildup_parameter = .2
# level initializations
# simulation inputs
effort = int(Element('effort').element.value)
schedule = int(Element('schedule').element.value)
time_points1, effort_rate_output1 = rayleigh_staffing(effort, schedule, 0)
time_points2, effort_rate_output2 = rayleigh_staffing(30, 20, 6)
# staffing plot
fig, axis = plot.subplots()
axis.plot(time_points1, effort_rate_output1, label="")
axis.plot(time_points2, effort_rate_output2, label="2")
axis.set(xlabel="Month", ylabel="Staff")
#axis.legend()
#plot.show()
pyscript.write(target, fig, append=True)
sim()
def on_click(event): sim()