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 (Corrected distribution)
 
(15 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Command|= Comments
+
{{Command|Comments=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
  
| ofp |= Game name
+
| ofp |Game name=
  
|1.00|= Game version
+
|1.00|Game version=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
  
|[[Image:bellcurve.jpg|right|200px]] Random real (floating point) value from 0 (inclusive) to x (not inclusive).<br><br>
+
|[[Image:bellcurve.jpg|right|200px]] Random real (floating point) value from 0 (inclusive) to x (not inclusive).<br />
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
+
<br />
 +
Since Arma 3 v1.55.133393 alternative syntax is added, allowing the definition of [https://en.wikipedia.org/wiki/Normal_distribution Gaussian Distribution]<ref>Technically, it is a rescaled [https://en.wikipedia.org/wiki/Bates_distribution 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> params. Uses the same method as [[setTriggerTimeout]] command. Quite useful for spawning loot for example, making more valuable items more rare ('''Alternative Syntax 1''')<br /><br />
 +
Since Arma 3 v1.67.139663 two alternative syntaxes are available:
 +
* allowing to generate semi-random number based on provided seed ('''Alternative Syntax 2''')
 +
* generating pseudo-random [https://en.wikipedia.org/wiki/Perlin_noise noise texture] based on provided seed and returning a single number between 0 (included) and 1 (excluded) at supplied ''x'' and ''y'' coordinates ('''Alternative Syntax 3''') |Description=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
  
|'''random''' x |= Syntax
+
| [[random]] x |Syntax=
 
 
 
|p1= x: [[Number]]
 
|p1= x: [[Number]]
 +
| [[Number]] |Return value=
  
| [[Number]] |= Return value
+
|s2= [[random]] [min, mid, max] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(''Since Arma 3 v1.55.133393'')|Syntax 2=
 
+
|p21= [min, mid, max]: [[Array]] |Parameter 21=
|s2= '''random''' [min, mid, max] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;''Since Arma 3 v1.55.133393''|= Syntax
+
|p22= min: [[Number]] |Parameter 22=
 +
|p23= mid: [[Number]] |Parameter 23=
 +
|p24= max: [[Number]] |Parameter 24=
 +
|r2= [[Number]] |Return value 2=
  
|p21= [min, mid, max]: [[Array]] |=
+
|s3= seed [[random]] x &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(''Since Arma 3 v1.67.139663'')|Syntax 3=
|p22= min: [[Number]] |=
+
|p41= seed: [[Number]] |Parameter 41=
|p23= med: [[Number]] |=
+
|p42= x: [[Number]] |Parameter 42=
|p24= max: [[Number]] |=
+
|r3= [[Number]] |Return value 3=
  
| r2= [[Number]] |= Return value
+
|s4= seed [[random]] [x, y] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(''Since Arma 3 v1.67.139663'') |Syntax 4=
 +
|p61= seed: [[Number]] |Parameter 61=
 +
|p62= [x, y]: [[Array]] position on the [https://en.wikipedia.org/wiki/Perlin_noise Perlin noise texture] |Parameter 62=
 +
|p63= x: [[Number]] |Parameter 63=
 +
|p64= y: [[Number]] |Parameter 64=
 +
|r4= [[Number]] |Return value 4=
 
____________________________________________________________________________________________
 
____________________________________________________________________________________________
 
   
 
   
|x1= <code>_rNumber = [[random]] 1;</code> |= Example 1
+
|x1= <code>_rNumber = [[random]] 1;</code> |Example 1=
 +
 
 +
|x2= <code>_rNumber = [[random]] -10;</code> |Example 2=
  
|x2= <code>_rNumber = [[random]] -10;</code> |= Example 2
+
|x3= Generate random position inside a circle
 +
<code>_center [[getPos]] <nowiki>[</nowiki>_radius * [[sqrt]] [[random]] 1, [[random]] 360];</code> |Example 3=
  
|x3= To select random value from an array:
+
|x4= To select random value from an array:
 
<code>_array = ["apples", "pears", "bananas", "M16"];
 
<code>_array = ["apples", "pears", "bananas", "M16"];
_random = _array [[select]] [[floor]] [[random]] [[count]] _array;</code>  |= Example 3
+
_random = _array [[select]] [[floor]] [[random]] [[count]] _array;
 
+
{{codecomment|// since Arma 3 v1.55.133393}}
|x4= Compare (each command was executed 100000 times to gather statistics):<code>[[floor]] [[random]] 10;
+
_random = [[selectRandom]] _array;</code>  |Example 4=
// 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];
 
// 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];
 
// 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];
 
// 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
+
| [[Math Commands]], [[selectRandom]], [[selectRandomWeighted]] |See also=
 
 
 
}}
 
}}
  
 
<h3 style="display:none">Notes</h3>
 
<h3 style="display:none">Notes</h3>
  
[[Category:Scripting Commands|RANDOM]]
+
[[Category:Scripting Commands|{{uc:{{PAGENAME}}}}]]
 +
[[Category:Scripting Commands OFP 1.46|{{uc:{{PAGENAME}}}}]]
 +
[[Category:Scripting Commands OFP 1.96|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands OFP 1.99|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.96|RANDOM]]
+
[[Category:Scripting Commands ArmA|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting Commands OFP 1.46|RANDOM]]
 
[[Category:Scripting Commands ArmA|RANDOM]]
 
 
[[Category:Command_Group:_Variables|{{uc:{{PAGENAME}}}}]]
 
[[Category:Command_Group:_Variables|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands ArmA2|{{uc:{{PAGENAME}}}}]]
 +
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
 
[[Category:Scripting Commands Arma 3|{{uc:{{PAGENAME}}}}]]
[[Category:Scripting_Commands_Take_On_Helicopters|{{uc:{{PAGENAME}}}}]]
 
  
 
<!-- CONTINUE Notes -->
 
<!-- CONTINUE Notes -->
Line 109: Line 76:
  
 
<code>_Xrnd = round(random 200) -100;</code>
 
<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.  
 
* 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''':<br>
+
* The number returned is unlikely to be a whole number.<br />
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)
+
To return a whole number use either '''[[round]]''', '''[[ceil]]''' or '''[[floor]]''' together with [[random]]:
<br>x=floor(random 5) will return 0,1,2,3 or 4.  (uniform distribution, all numbers have the same probability of being selected)
+
<code>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)
<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)
+
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)</code>
 +
</dd>
 +
<dd class="notedate">Posted on July 22, 2018 - 12:58 (UTC+2)</dd>
 +
<dt class="note">[[User:Lou Montana|Lou Montana]]</dt>
 +
<dd class="note">
 +
{{{!}}class="bikitable"
 +
{{!}}+ 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 -->
 
<!-- DISCONTINUE Notes -->

Latest revision as of 14:21, 8 March 2019

Introduced with Operation Flashpoint version 1.00
  

Click on the images for descriptions

Introduced in

Game:
Operation Flashpoint
Version:
1.00

Description

Description:
bellcurve.jpg
Random real (floating point) value from 0 (inclusive) to x (not inclusive).


Since Arma 3 v1.55.133393 alternative syntax is added, allowing the definition of Gaussian Distribution[1] params. Uses the same method as setTriggerTimeout command. Quite useful for spawning loot for example, making more valuable items more rare (Alternative Syntax 1)

Since Arma 3 v1.67.139663 two alternative syntaxes are available:

  • allowing to generate semi-random number based on provided seed (Alternative Syntax 2)
  • generating pseudo-random noise texture based on provided seed and returning a single number between 0 (included) and 1 (excluded) at supplied x and y coordinates (Alternative Syntax 3)

Syntax

Syntax:
random x
Parameters:
x: Number
Return Value:
Number

Alternative Syntax

Syntax:
random [min, mid, max]        (Since Arma 3 v1.55.133393)
Parameters:
[min, mid, max]: Array
min: Number
mid: Number
max: Number
Return Value:
Number

Alternative Syntax 2

Syntax:
seed random x        (Since Arma 3 v1.67.139663)
Parameters:
seed: Number
x: Number
Return Value:
Number

Alternative Syntax 3

Syntax:
seed random [x, y]        (Since Arma 3 v1.67.139663)
Parameters:
seed: Number
[x, y]: Array position on the Perlin noise texture
x: Number
y: Number
Return Value:
Number

Examples

Example 1:
_rNumber = random 1;
Example 2:
_rNumber = random -10;
Example 3:
Generate random position inside a circle _center getPos [_radius * sqrt random 1, random 360];
Example 4:
To select random value from an array: _array = ["apples", "pears", "bananas", "M16"]; _random = _array select floor random count _array; // since Arma 3 v1.55.133393 _random = selectRandom _array;

Additional Information

Multiplayer:
-
See also:
Math CommandsselectRandomselectRandomWeighted

Notes

Only post proven facts here. Report bugs on the feedback tracker. Use the talk page or the forums for discussions.
Add New Note | How To

Notes

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.