Difference between revisions of "random"

From Bohemia Interactive Community
Jump to navigation Jump to search
(alt syntax, joined notes. If anyone wishes to separate them again and fix broken note, be my guest)
m (Some wiki formatting)
 
(74 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{Command|= Comments
+
{{RV|type=command
____________________________________________________________________________________________
 
  
| ofp |= Game name
+
|game1= ofp
 +
|version1= 1.00
  
|1.00|= Game version
+
|game2= ofpe
____________________________________________________________________________________________
+
|version2= 1.00
  
|[[Image:bellcurve.jpg|right|200px]] Random real (floating point) value from 0 (inclusive) to x (not inclusive).<br><br>
+
|game3= arma1
Since Arma 3 v1.55.133393 alternative syntax is added, allowing to define [https://en.wikipedia.org/wiki/Normal_distribution Gaussian Distribution] params. Uses the same method as [[setTriggerTimeout]] command. Quite useful for spawning loot for example, making more valueable items more rare. |= Description
+
|version3= 1.00
____________________________________________________________________________________________
 
  
|'''random''' x |= Syntax
+
|game4= arma2
 +
|version4= 1.00
 +
 
 +
|game5= arma2oa
 +
|version5= 1.50
 +
 
 +
|game6= tkoh
 +
|version6= 1.00
 +
 
 +
|game7= arma3
 +
|version7= 0.50
 +
 
 +
|gr1= Math
 +
 
 +
|descr= [[Image:bellcurve.jpg|thumb|120px|[[#Syntax 2|Syntax&nbsp;2]]'s distribution]]
 +
{{{!}}
 +
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}} {{HashLink|#Syntax 1}}
 +
{{!}} generates a random floating point value
 +
{{!}}-
 +
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}}  {{HashLink|#Syntax 2}}
 +
{{!}} generates a {{Wikipedia|Normal_distribution|Gaussian Distribution}}<ref>Technically, it is a rescaled {{Wikipedia|Bates distribution}} with n = 4. The distribution is split in two at its midpoint and scaled linearly such that its maximum lies at the specified midpoint.</ref>. It uses the same method as [[setTriggerTimeout]] command and is quite useful for e.g spawning loot, making more valuable items more rare
 +
{{!}}-
 +
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}}  {{HashLink|#Syntax 3}}
 +
{{!}} generates a {{Wikipedia|Random seed|seed-based}} random number
 +
{{!}}-
 +
! style="padding-right: 1em; vertical-align: top; white-space: nowrap" {{!}}  {{HashLink|#Syntax 4}}
 +
{{!}} generates a {{Wikipedia|Random seed|seed-based}} random noise ('''not''' Perlin) texture based on provided seed and returning the value at supplied coordinates
 +
{{!}}}
 +
 
 +
|s1= [[random]] x
  
 
|p1= x: [[Number]]
 
|p1= x: [[Number]]
  
| [[Number]] |= Return value
+
|r1= [[Number]] from 0 (included) to ''x'' (excluded)
  
|s2= '''random''' [min, mid, max] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;''Since Arma 3 v1.55.133393''|= Syntax
+
|s2= [[random]] [min, mid, max]
  
|p21=  [min, mid, max]: [[Array]] |=
+
|s2since= arma3 1.56
|p22= min: [[Number]] |=
 
|p23= med: [[Number]] |=
 
|p24= max: [[Number]] |=
 
  
| r2= [[Number]] |= Return value
+
|p21= min: [[Number]]
____________________________________________________________________________________________
 
 
 
|x1= <code>_rNumber = [[random]] 1;</code>  |= Example 1
 
  
|x2= <code>_rNumber = [[random]] -10;</code>  |= Example 2
+
|p22= mid: [[Number]]
  
|x3= To select random value from an array:
+
|p23= max: [[Number]]
<code>_array = ["apples", "pears", "bananas", "M16"];
 
_random = _array [[select]] [[floor]] [[random]] [[count]] _array;</code>  |= Example 3
 
  
|x4= Compare (each command was executed 100000 times to gather statistics):<code>[[floor]] [[random]] 10;
+
|r2= [[Number]] in range from ''min'' to ''max'', weighted by ''mid''
// 0 - 10099 (10%)
 
// 1 - 10040 (10%)
 
// 2 - 10154 (10%)
 
// 3 - 9910 (10%)
 
// 4 - 10023 (10%)
 
// 5 - 9937 (10%)
 
// 6 - 10118 (10%)
 
// 7 - 9716 (10%)
 
// 8 - 9986 (10%)
 
// 9 - 10017 (10%)
 
  
[[floor]] [[random]] [0,5,10];
+
|s3= seed [[random]] x
// 0 - 109 (0%)
 
// 1 - 1604 (2%)
 
// 2 - 6839 (7%)
 
// 3 - 16671 (17%)
 
// 4 - 24706 (25%)
 
// 5 - 24702 (25%)
 
// 6 - 16626 (17%)
 
// 7 - 6925 (7%)
 
// 8 - 1702 (2%)
 
// 9 - 116 (0%)
 
  
[[floor]] [[random]] [0,10,10];
+
|s3since= arma3 1.68
// 0 - 9 (0%)
 
// 1 - 94 (0%)
 
// 2 - 420 (0%)
 
// 3 - 1197 (1%)
 
// 4 - 2361 (2%)
 
// 5 - 4447 (4%)
 
// 6 - 7082 (7%)
 
// 7 - 9512 (10%)
 
// 8 - 11889 (12%)
 
// 9 - 13093 (13%)
 
// 10 - 49896 (50%)
 
  
[[floor]] [[random]] [0,10,5];
+
|p41= seed: [[Number]] - an '''integer'''. Any float value will be truncated (e.g -0.9, -0.1, 0.1 or 0.9 will be read as '''0''')
// 0 - 11 (0%)
 
// 1 - 98 (0%)
 
// 2 - 430 (0%)
 
// 3 - 1149 (1%)
 
// 4 - 2384 (2%)
 
// 5 - 4546 (5%)
 
// 6 - 8612 (9%)
 
// 7 - 16283 (16%)
 
// 8 - 28393 (28%)
 
// 9 - 38094 (38%)</code>  |= Example 2
 
____________________________________________________________________________________________
 
  
| [[Math Commands]], [[selectRandom]] |= See also
+
|p42= x: [[Number]]
  
}}
+
|r3= [[Number]] from 0 (included) to ''x'' (excluded)
 +
 
 +
|s4= seed [[random]] [x, y]
 +
 
 +
|s4since= arma3 1.68
 +
 
 +
|p61= seed: [[Number]]
 +
 
 +
|p62= x: [[Number]] - x texture position
 +
 
 +
|p63= y: [[Number]] - y texture position
 +
 
 +
|r4= [[Number]] from 0 (included) to 1 (excluded)
 +
 
 +
|x1= <sqf>_rNumber = random 1;</sqf>
 +
 
 +
|x2= <sqf>_rNumber = random -10;</sqf>
 +
 
 +
|x3= Generate a random position inside a circle (see also [[Example Code: Random Area Distribution]])
 +
<sqf>_center getPos [_radius * sqrt random 1, random 360];</sqf>
 +
 
 +
|x4= Select a random value from an array:
 +
<sqf>_array = ["apples", "pears", "bananas", "M16"];
  
<h3 style="display:none">Notes</h3>
+
_random = _array select floor random count _array; // Before Arma 2
 +
_random = _array call BIS_fnc_selectRandom; // Since Arma 2
 +
_random = selectRandom _array; // Since Arma 3 v1.56</sqf>
  
[[Category:Scripting Commands|RANDOM]]
+
|seealso= [[selectRandom]] [[selectRandomWeighted]]
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
+
}}
[[Category:Scripting Commands OFP 1.96|RANDOM]]
 
[[Category:Scripting Commands OFP 1.46|RANDOM]]
 
[[Category:Scripting Commands ArmA|RANDOM]]
 
[[Category:Command_Group:_Variables|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
 
  
<!-- CONTINUE Notes -->
 
 
<dl class="command_description">
 
<dl class="command_description">
 +
 +
<dt></dt>
 
<dd class="notedate">Posted on July 12, 2015 - 20:32 (UTC)</dd>
 
<dd class="notedate">Posted on July 12, 2015 - 20:32 (UTC)</dd>
 
<dt class="note">[[User:Hcpookie|Hcpookie]]</dt>
 
<dt class="note">[[User:Hcpookie|Hcpookie]]</dt>
 
<dd class="note">
 
<dd class="note">
 
Random selections including negative numbers can be obtained via:
 
Random selections including negative numbers can be obtained via:
 
+
<sqf>_Xrnd = round(random 200) -100;</sqf>
<code>_Xrnd = round(random 200) -100;</code>
 
  
 
This will yield numbers between -100 and 100.
 
This will yield numbers between -100 and 100.
 +
* Be careful using random numbers in multiplayer, each client will come up with a different result. See multiplayer tutorials for more general information about locality.
 +
* The number returned is unlikely to be a whole number.<br>
 +
To return a whole number use either '''[[round]]''', '''[[ceil]]''' or '''[[floor]]''' together with [[random]]:
 +
<sqf>
 +
x = round (random 5) // will return 0, 1, 2, 3, 4 or 5. (non-uniform distribution, 0 and 5 are half as likely to be selected than any of the other numbers)
 +
x = floor (random 5) // will return 0, 1, 2, 3 or 4.  (uniform distribution, all numbers have the same probability of being selected)
 +
x = ceil  (random 5) // will return 0, 1, 2, 3, 4 or 5. (0 is very unlikely, but possible, as ceil 0 is 0)
 +
</sqf>
 +
</dd>
  
* Be careful using random numbers in multiplayer, each client will come up with a different result. See multiplayer tutorials for more general information about locality.
+
<dd class="notedate">Posted on July 22, 2018 - 12:58 (UTC+2)</dd>
* The number returned is unlikely to be a whole number.<br>To return a whole number use either '''[[round]]''', '''[[ceil]]''' or '''[[floor]]''' together with '''random''':<br>
+
<dt class="note">[[User:Lou Montana|Lou Montana]]</dt>
x=round(random 5) will return 0,1,2,3,4 or 5. (non-uniform distribution, 0 and 5 are half as likely to be selected than any of the other numbers)
+
<dd class="note">
<br>x=floor(random 5) will return 0,1,2,3 or 4.  (uniform distribution, all numbers have the same probability of being selected)
+
{| class="wikitable"
<br>x=ceil(random 5) will return  0,1,2,3,4 or 5. (0 is very unlikely, but possible, as ceil 0 is 0)
+
|+ Repartition comparison
 +
! Formula
 +
! 0
 +
! 1
 +
! 2
 +
! 3
 +
! 4
 +
! 5
 +
! 6
 +
! 7
 +
! 8
 +
! 9
 +
|-
 +
| [[floor]] [[random]] 10;
 +
| 10%
 +
| 10%
 +
| 10%
 +
| 10%
 +
| 10%
 +
| 10%
 +
| 10%
 +
| 10%
 +
| 10%
 +
| 10%
 +
|-
 +
| [[floor]] [[random]] [0, 5, 10]
 +
| 0%
 +
| 2%
 +
| 7%
 +
| 17%
 +
| 25%
 +
| 25%
 +
| 17%
 +
| 7%
 +
| 2%
 +
| 0%
 +
|-
 +
| [[floor]] [[random]] [0, 10, 0]
 +
| 0%
 +
| 0%
 +
| 1%
 +
| 2%
 +
| 5%
 +
| 9%
 +
| 14%
 +
| 19%
 +
| 24%
 +
| 26%
 +
|-
 +
| [[floor]] [[random]] [0, 10, 5]
 +
| 0%
 +
| 0%
 +
| 0%
 +
| 1%
 +
| 2%
 +
| 5%
 +
| 9%
 +
| 16%
 +
| 28%
 +
| 38%
 +
|}
 
</dd>
 
</dd>
 +
 
</dl>
 
</dl>
<!-- DISCONTINUE Notes -->
 

Latest revision as of 16:39, 13 May 2022

Hover & click on the images for description

Description

Description:
Syntax 2's distribution
Syntax 1 generates a random floating point value
Syntax 2 generates a Gaussian Distribution[1]. It uses the same method as setTriggerTimeout command and is quite useful for e.g spawning loot, making more valuable items more rare
Syntax 3 generates a seed-based random number
Syntax 4 generates a seed-based random noise (not Perlin) texture based on provided seed and returning the value at supplied coordinates
Groups:
Math

Syntax 1

Syntax:
random x
Parameters:
x: Number
Return Value:
Number from 0 (included) to x (excluded)

Syntax 2

Syntax:
random [min, mid, max]
Parameters:
min: Number
mid: Number
max: Number
Return Value:
Number in range from min to max, weighted by mid

Syntax 3

Syntax:
seed random x
Parameters:
seed: Number - an integer. Any float value will be truncated (e.g -0.9, -0.1, 0.1 or 0.9 will be read as 0)
x: Number
Return Value:
Number from 0 (included) to x (excluded)

Syntax 4

Syntax:
seed random [x, y]
Parameters:
seed: Number
x: Number - x texture position
y: Number - y texture position
Return Value:
Number from 0 (included) to 1 (excluded)

Examples

Example 1:
_rNumber = random 1;
Example 2:
_rNumber = random -10;
Example 3:
Generate a random position inside a circle (see also Example Code: Random Area Distribution)
_center getPos [_radius * sqrt random 1, random 360];
Example 4:
Select a random value from an array:
_array = ["apples", "pears", "bananas", "M16"]; _random = _array select floor random count _array; // Before Arma 2 _random = _array call BIS_fnc_selectRandom; // Since Arma 2 _random = selectRandom _array; // Since Arma 3 v1.56

Additional Information

See also:
selectRandom selectRandomWeighted

Notes

Report bugs on the Feedback Tracker and/or discuss them on the Arma Discord or on the Forums.
Only post proven facts here! Add Note
Posted on July 12, 2015 - 20:32 (UTC)
Hcpookie
Random selections including negative numbers can be obtained via:
_Xrnd = round(random 200) -100;
This will yield numbers between -100 and 100.
  • Be careful using random numbers in multiplayer, each client will come up with a different result. See multiplayer tutorials for more general information about locality.
  • The number returned is unlikely to be a whole number.
To return a whole number use either round, ceil or floor together with random:
x = round (random 5) // will return 0, 1, 2, 3, 4 or 5. (non-uniform distribution, 0 and 5 are half as likely to be selected than any of the other numbers) x = floor (random 5) // will return 0, 1, 2, 3 or 4. (uniform distribution, all numbers have the same probability of being selected) x = ceil (random 5) // will return 0, 1, 2, 3, 4 or 5. (0 is very unlikely, but possible, as ceil 0 is 0)
Posted on July 22, 2018 - 12:58 (UTC+2)
Lou Montana
Repartition comparison
Formula 0 1 2 3 4 5 6 7 8 9
floor random 10; 10% 10% 10% 10% 10% 10% 10% 10% 10% 10%
floor random [0, 5, 10] 0% 2% 7% 17% 25% 25% 17% 7% 2% 0%
floor random [0, 10, 0] 0% 0% 1% 2% 5% 9% 14% 19% 24% 26%
floor random [0, 10, 5] 0% 0% 0% 1% 2% 5% 9% 16% 28% 38%
  1. Technically, it is a rescaled Bates distribution with n = 4. The distribution is split in two at its midpoint and scaled linearly such that its maximum lies at the specified midpoint.