selectRandomWeighted: Difference between revisions
Jump to navigation
Jump to search
Lou Montana (talk | contribs) |
Lou Montana (talk | contribs) m (Some wiki formatting) |
||
(3 intermediate revisions by the same user not shown) | |||
Line 11: | Line 11: | ||
* The weights don't have to total to 1 | * The weights don't have to total to 1 | ||
* If numbers of items and weights do not match, the shortest array is used | * If numbers of items and weights do not match, the shortest array is used | ||
* A single array Syntax is slightly faster | * A single array Syntax is slightly faster than Alt Syntax | ||
|s1= [[selectRandomWeighted]] valuesAndWeights | |s1= [[selectRandomWeighted]] valuesAndWeights | ||
|p1= valuesAndWeights: [[Array]] - array in format [value1, weight1, value2, weight2...], where: | |p1= valuesAndWeights: [[Array]] - array in format [value1, weight1, value2, weight2, ...], where: | ||
* value: [[Anything]] - weighted value | * value: [[Anything]] - weighted value | ||
* weight: [[Number]] - values relative weight | * weight: [[Number]] - values relative weight | ||
|r1= [[Anything]] - random weighted value or [[Nothing]] if array is empty or all weights are 0 | |r1= [[Anything]] - random weighted value or [[Nothing]] if array is empty or all weights are 0 | ||
Line 24: | Line 23: | ||
|s2= values [[selectRandomWeighted]] weights | |s2= values [[selectRandomWeighted]] weights | ||
|p21= values: [[Array]] | |p21= values: [[Array]] of [[Anything]] | ||
|p22= weights: [[Array]] | |||
|p22= weights: [[Array]] of [[Number]]s | |||
|r2= [[Anything]] - random weighted value or [[Nothing]] if any of arrays is empty or all weights are 0 | |r2= [[Anything]] - random weighted value or [[Nothing]] if any of arrays is empty or all weights are 0 | ||
|x1= < | |x1= <sqf>private _randomWeightedElement = selectRandomWeighted [1,0.1,2,0.2,3,1.3,4,2.4,5,7.5];</sqf> | ||
|x2= < | |x2= <sqf>private _randomWeightedElement = [1,2,3,4,5] selectRandomWeighted [0.1,0.2,1.3,2.4,7.5];</sqf> | ||
|seealso= [[random]] [[select]] | |seealso= [[random]] [[select]] [[selectRandom]] [[selectMin]] [[selectMax]] | ||
}} | }} | ||
{{Note | |||
|user= Killzone_Kid | |||
|timestamp= 20170626191700 | |||
|text= A 100000 runs of the following code: | |||
<sqf> | |||
_values = [0,1,2,3,4,5,6,7,8,9]; | |||
< | |||
_weights = [0.109,0.65,0.01,1.01,1.24,0,1.59,0.09,1.15,0.55]; | _weights = [0.109,0.65,0.01,1.01,1.24,0,1.59,0.09,1.15,0.55]; | ||
_result = _values | _result = _values selectRandomWeighted _weights; | ||
</sqf> | |||
Gave this result: | Gave this result: | ||
<pre>0 - 0 | <pre> | ||
0 - 0 | |||
0.01 - 144 | 0.01 - 144 | ||
0.09 - 1409 | 0.09 - 1409 | ||
Line 55: | Line 56: | ||
1.15 - 18059 | 1.15 - 18059 | ||
1.24 - 19518 | 1.24 - 19518 | ||
1.59 - 24769</pre> | 1.59 - 24769 | ||
</pre> | |||
}} | |||
Latest revision as of 11:54, 6 May 2022
Description
- Description:
- Returns a random element from the given array according to assigned weights. Engine solution to BIS_fnc_selectRandomWeighted. A few notes:
- Negative weights are not supported
- If an item's weight is 0, the item is ignored
- The weights don't have to total to 1
- If numbers of items and weights do not match, the shortest array is used
- A single array Syntax is slightly faster than Alt Syntax
- Groups:
- Arrays
Syntax
- Syntax:
- selectRandomWeighted valuesAndWeights
- Parameters:
- valuesAndWeights: Array - array in format [value1, weight1, value2, weight2, ...], where:
- Return Value:
- Anything - random weighted value or Nothing if array is empty or all weights are 0
Alternative Syntax
- Syntax:
- values selectRandomWeighted weights
- Parameters:
- values: Array of Anything
- weights: Array of Numbers
- Return Value:
- Anything - random weighted value or Nothing if any of arrays is empty or all weights are 0
Examples
- Example 1:
- Example 2:
Additional Information
- See also:
- random select selectRandom selectMin selectMax
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 Jun 26, 2017 - 19:17 (UTC)
-
A 100000 runs of the following code:
Gave this result:
0 - 0 0.01 - 144 0.09 - 1409 0.109 - 1633 0.55 - 8673 0.65 - 10127 1.01 - 15668 1.15 - 18059 1.24 - 19518 1.59 - 24769