A probability wheel is a device or concept that randomly selects outcomes with different probabilities, allocating a higher chance to certain options and lower chances to others.

## Script

### Non-normalized Probabilites

```when gf clicked
delete all of [probabilities v]
delete all of [items v]
add [Item 2] to [items v]
add [Item 3] to [items v]
probability wheel

define probability wheel
set [i v] to (0)
set [sum v] to (0)
repeat (length of [probabilites v])
change [i v] by (1)
change [sum v] by (item (i) of [probabilities v])
replace item (i) of [probabilities v] with (sum)
end
set [random number v] to ((sum) * (pick random (0.0) to (1.0)))
set [i v] to (0)
repeat (length of [probabilites v])
change [i v] by (1)
if <(item (i) of [probabilities v]) > (random number)> then
set [output v] to (item (i) of [items v])
stop [this script v]
end
end
```

This script accepts any numerical value for the probability, as long as it does not add to 0 and all numbers are non-negative.

It will normalize the values before choosing a random item.

### Normalized Probabilities

```when gf clicked
delete all of [probabilities v]
delete all of [items v]
add [Item 2] to [items v]
add [Item 3] to [items v]
probability wheel

define probability wheel
set [random number v] to (pick random (0.0) to (1.0)
set [i v] to (0)
set [sum v] to (0)
repeat (length of [probabilities v])
change [i v] by (1)
change [sum v] by (item (i) of [probabilities v])
if <(sum) > (random number)> then
set [output v] to (item (i) of [items v])
stop [this script v]
end
end
```

This script requires that the probabilities add up to 1.

### How to Use

Set the `(probability::list)` list to the probabilities for each item. When using the non-normalized script, the probabilities can add up to any number. When using the normalized script, the probabilities must add up to 1. Add the corresponding items into the `(items::list)` list.

Run the `probability wheel::custom` block to choose an item with the given probabilities. The `(output)` variable will be set to the output item.

Cookies help us deliver our services. By using our services, you agree to our use of cookies.