Forums > MaxMSP

extending urn-jb

Apr 10 2013 | 7:34 pm


i wonder how to create a stream of non-repeating random numbers,
from which i like to get 3 values at a time (using uzi) without repetitions as well.

eg. if this is the result of the 1st stream of urn values:

2 4 3 1 5 7 6

and this the second stream

5 6 1 3 7 2 4

i want to use the values in groups:

2 4 3
1 5 7
6 5 6
1 3 7
2 4 …

as you can see the 6 in the 3rd group of numbers appears twice. the easiest way to handle a situation
like this would be to clear the duplicates. the better and much more advanced technic would be using another number
instead of the 2nd 6 without destroing the the non-repetition of the current stream.

is there an object that obtain non-repeating random number under this circumstances?
and if not, how can i do it in a efficient way in max by myself?

thanks for your help , johannes

Apr 11 2013 | 3:03 pm

Anyone asking for a stream of random numbers without repetition is essentially looking for a kind of Markov chain. The [prob] object is the standard general Markov chain object. However, it is designed with first-order Markov chains in mind, and what you’re looking for would need a second-order Markov chain.

The inestimable Xoaz (aka Richard Dudas) built a an abstraction wrapper around [prob] for higher-order Markov chains. It was called [mchain] and I expect it’s now available through the Tools page on this site.

However you try to manage this with factory objects, there will be a bit of work to do, it ain’t just settin’ a parameter. I did build a custom object doing this sort of thing, once upon a time, but I never polished it up for public consumption. Some day, but it’s fairly low down my To-Do list.

Apr 11 2013 | 5:44 pm

Peter, they’re nowhere to be found. Upon googling for Dudas’ abstractions it would seem that they’re offline from ircam as well.

sounded ideal for one of my capers as well.

Apr 11 2013 | 10:15 pm


Richard should be on the forum (he certainly used to be). I hope he won’t mind me suggesting that someone drop him a line expressing interest in mchain.

I have a copy, but it’s really better if you get it directly from the source. Richard may have made some improvements over my (very old) copy.

Apr 12 2013 | 4:25 pm

thanks for pointing to richards abstraction, peter.
you can now find mchain on his site…
and it seems to work fine for me (under 10.7.5 running max 6.0.8.)

i found a nice intro on markov chains in dodge´s "computer music" book as well as
in roads " the computer music tutorial".
is there also a paper or tutor about using markov chains in max?


Apr 12 2013 | 6:05 pm
Apr 14 2013 | 11:23 am

ok, i checked mchain. its a very nice abstraction but not exactly what iam looking for.

from what i understand, with a 2nd order markov chain i can define that the numbers of the first and second state will not appear as a number at the 3rd state. so there will be 0 probability for the first two numbers to be the 3rd and the first to be second value.

what i don´t understand is how to create a markov chain that gives me also a stream of non-repeated numbers from 0 to n-1
(lets say 14). will i have to feed a urn stream into a prob object or how does it work?
as i see in richards patch bitshifting will be needed to get an m c order > 1.

any help would be greatly appreciated, j

Apr 14 2013 | 6:02 pm

I never promised a rose garden;

With a 2nd order Markov with (to keep things simple) four states (0, 1, 2, 3), you need to set up a transition matrix like the following (the first column gives the previous two states, the following columns are the probability for the next value).

Next: 0   1   2   3
 00: n/a n/a n/a n/a
 01: 0    0    .5   .5
 02: 0    .5   0   .5
 03: 0    .5   .5   0
 10: 0    0    .5   .5
 11: n/a n/a n/a n.a
 12: .5   0    0    .5
 13: .5   0    .5   0
 20: 0    .5   0    .5
 21: .5   0    0    .5
 22: n/a n/a n/a n/a
 23: .5   .5   0    0
 30: 0    .5   .5   0
 31: .5   0    .5   0
 32: .5   .5   0    0
 33: n/a n/a n/a n/a

Extend that for n=whatever: given the previous to states t[-2] = x and t[-1] = y, (x≠y), then the probability of t[0]=z is zero for x and y, otherwise 1/(n-2).

Yes, this turns into masses of typing for large values of n, and this is a special kind of Markov chain where an algorithm can be designed where all you would need to specify is a single parameter. But until someone writes an external object that implements your special case, you’re probably going to have to do it the hard way

Apr 17 2013 | 11:38 pm

thanks peter,

here is my 2nd order markov-chain patch using the ftm-library. inspired my peter elseas paper
"max and chaos" i use the table object for the probabilities and a ftm-dictionary that contains the

i add a function that automatically generates the transition-table (that peter mentioned) according to the selected maximum value.

the aim of this patch is to create groups of 3 numbers with no repetitions in it.

— Pasted Max Patch, click to expand. —
Viewing 9 posts - 1 through 9 (of 9 total)

Forums > MaxMSP