-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path8.1-utilities_v1.6.nls
82 lines (75 loc) · 2.53 KB
/
8.1-utilities_v1.6.nls
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
;; The MIT License (MIT)
;;
;; Copyright (c) 2011-24 David O'Sullivan and George Perry
;;
;; Permission is hereby granted, free of charge, to any person
;; obtaining a copy of this software and associated documentation
;; files (the "Software"), to deal in the Software without restriction,
;; including without limitation the rights to use, copy, modify, merge,
;; publish, distribute, sublicense, and/or sell copies of the Software,
;; and to permit persons to whom the Software is furnished to do so,
;; subject to the following conditions:
;;
;; The above copyright notice and this permission notice shall be included
;; in all copies or substantial portions of the Software.
;;
;; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
;; OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;; FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
;; THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;; LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
;; FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
;; DEALINGS IN THE SOFTWARE.
;;
;; reports a normally distributed random number
;; between specified values (inclusive)
;; mean m
;; srdev s
;; min value mn
;; max value mx
;; be careful: could cause an infinite loop!
to-report random-normal-between [m s mn mx]
if mn >= mx [ report mn ]
let x mx + 1
while [not between? mn mx x] [
set x random-normal m s
]
report x
end
;; reports a Poisson distributed random number
;; between specified values (inclusive)
;; mean m
;; min value mn
;; max value mx
;; be careful: could cause an infinite loop!
to-report random-poisson-between [m mn mx]
if mn >= mx [ show "Warning - same min and max values sent to random-poisson-between" report mn ]
let x mx + 1
while [not between? mn mx x] [
set x random-poisson m
]
report x
end
;; true if x between the supplied values (either order)
;; note parameter order is more 'netlogo'-esque
;; as in 'if between? a b distance target'
to-report between? [lim-1 lim-2 x]
ifelse lim-1 > lim-2
[ report x >= lim-2 and x <= lim-1 ]
[ report x >= lim-1 and x <= lim-2 ]
end
;; clamps x to be inside the specified range
;; replaced lots of inline list max min calls
to-report clamp-between [a b x]
if x < a [report a]
if x > b [report b]
report x
end
to-report enforce-lower-limit [a limit]
if a >= limit [report a]
report limit
end
to-report enforce-upper-limit [a limit]
if a <= limit [report a]
report limit
end