My script is returning random values from Random Uniform(), until I write some results to a data table. When I write to the table Random Uniform() always returns the same value. See comments in script below. Would appreciate any help.
Many thanks,
John
names default to here(1);
clear log();
include("defineVectorClass.jsl");
dtChaos = open("chaos.jmp");
proportionToCorner = 0.5;
A = new object(Vector(column(dtChaos,"x")[1],column(dtChaos,"y")[1]));
B = new object(Vector(column(dtChaos,"x")[2],column(dtChaos,"y")[2]));
C = new object(Vector(column(dtChaos,"x")[3],column(dtChaos,"y")[3]));
triangle = {A,B,C};
dtChaos<<Graph Builder(
Size( 534, 454 ),
Show Control Panel( 0 ),
Show Legend( 0 ),
Variables( X( :X ), Y( :Y ) ),
Elements( Points( X, Y, Legend( 3 ) ) )
);
current = new object(Vector(column(dtChaos,"x")[4],column(dtChaos,"y")[4]));
wait(2);
for(i=1,i<1000,i++,
bill = Random Uniform( 0, 3 );//this is where I am generating random value
show(randomuniform());
show(bill);
corner = triangle[Ceiling( bill )];
show(corner);
cornerTemp = corner<<clone;
show(cornerTemp);
currentTemp = current<<clone;
show(currentTemp);
cornerTemp:sub(currentTemp);
show(cornerTemp);
cornerTemp:mult(proportionToCorner);
show(cornerTemp);
current:add(cornerTemp);
show(current);
newX = current:x;
newY = current:y;
column(dtChaos,"X")[1+4]=newX;//the values generated above are random
column(dtChaos,"Y")[1+4]=newY;//unless these two lines are uncommented, then I get the same value from random uniform()
wait(2);
);
(Thanks @EvanMcCorkle and @danschikore for puzzling this out before I got in this morning!)
It is a bug in JMP's marker drawing; the easiest way to get your JSL going is to remove the Label state and change it to a color.
Use color rather than label
The problem is with the code that is positioning the labels around the data points; it needs a repeatable sequence of random numbers to juggle colliding labels, but it isn't keeping the reset to itself...as you noticed.
Another approach that keeps the labels needs a workaround in your JSL:
r = Random Seed State(); // the following statements make the graph update...
newX = current:x;
newY = current:y;
column(dtChaos,"X")[1+4]=newX;
column(dtChaos,"Y")[1+4]=newY;
wait(2);
Random Seed State(r);
this captures and restores the random state before and after the markers are drawn. The combination of changing a value in the table and the wait triggers the graph to update.
Thanks for the test case; a proper fix is underway.
(Thanks @EvanMcCorkle and @danschikore for puzzling this out before I got in this morning!)
It is a bug in JMP's marker drawing; the easiest way to get your JSL going is to remove the Label state and change it to a color.
Use color rather than label
The problem is with the code that is positioning the labels around the data points; it needs a repeatable sequence of random numbers to juggle colliding labels, but it isn't keeping the reset to itself...as you noticed.
Another approach that keeps the labels needs a workaround in your JSL:
r = Random Seed State(); // the following statements make the graph update...
newX = current:x;
newY = current:y;
column(dtChaos,"X")[1+4]=newX;
column(dtChaos,"Y")[1+4]=newY;
wait(2);
Random Seed State(r);
this captures and restores the random state before and after the markers are drawn. The combination of changing a value in the table and the wait triggers the graph to update.
Thanks for the test case; a proper fix is underway.
Another work-around is to turn off the Hide Overlapping Labels preference in the Graphs preferences group. That appears to be the source of the inteference with the random stream.
Thanks Xan
Thanks for the quick response. Labels were not important for the simulation so I just turned them off like you suggested and everything is working great.