Help with Randomization of Non-Overlapping Images
tamiskovich at gmail.com
tamiskovich at gmail.com
Mon Aug 4 19:50:59 UTC 2014
Hi David,
Thank you so much for your reply. I know the thing is a visual nightmare at
the moment and needs a little aesthetic touch up. Sorry!
These are incredibly helpful suggestions and getting me to think about this
a lot deeper.
The only issue with the array, while it would be easier, is that 1. It
seems like I could still have some over lap since my images are 2x3 % in
eprime and 2. ideally I would like to still be able to use the same x
coordinate for two images just so long as they don't overlap (they are far
enough apart on the y).
So it's really tricky since I need to consider a range of coordinates when
I place an image to insure they do not overlap.
I like the idea of the 2 dimensional array (sounds tricky) cause that would
solve #1 but not sure how to get around #2 and ensuring they don't overlap
+ or - 2 or 3 values.
Thanks again so much for the help!
On Monday, August 4, 2014 2:01:56 PM UTC-5, McFarlane, David wrote:
>
> Tara,
>
> Wow, that Loop While statement just hurts my eyes! When something
> gets that complicated, I would at least try to format it better for
> readability (indentation and the "_" continuation character are your
> friends here), or better yet find some way to restructure the code so
> as to avoid such a long expression. E.g., if you used some arrays
> instead of simple variables then you could use a loop or two to run
> through all those tests that appear explicitly in your While expression.
>
> So I do not know if something goes wrong with your code per se. But
> your approach here reminds me of a bogosort (see
> http://en.wikipedia.org/wiki/Bogosort ), and it may suffer from the
> same problem. Even with no errors in the code, the code must find a
> solution *by chance*, and *by chance* that may take many tries. That
> may work well enough for small problems, but as the proportion of
> solutions in the problem space gets smaller this approach takes
> longer and longer to find one. In particular, perhaps for 3
> coordinates your "bogosort" code could quickly find a solution, but
> for 4 images it just takes a lot longer to find one *by
> chance*. (PST's own "No Repeats on Consecutive Trials" examples,
> download from their website, suffer the same problem.)
>
> I do not like algorithms that work by chance, so I avoid them
> whenever possible. So first let's restate your problem, and see what
> we can do.
>
> You want to find 4 unique, randomly chosen x values from a pool of 7
> values, and 4 unique, randomly chosen y values from a pool of 23
> values. IOW, you want to pick 4 x values randomly without
> replacement from the range [36, 42], and 4 y values randomly without
> replacement from the range [38, 62]. Did I get that right?
>
> Ideally, you would follow David V's advice, make a nested List with
> all possible (x, y) pairs and just pick from that (Random, without
> replacement). That should involve 7 x 23 = 161 rows, which would not
> be too much trouble, and Excel would make it even easier to construct
> such a List. Alternatively, you might use two nested Lists, one for
> all the x values and another for all the y values, each Random
> (without replacement) and pick from those.
>
> But if you like inline code, I might start by making a couple arrays
> to hold my pools of x & y values:
>
> Const xPoolSize as Integer = 7, xPool1 as Integer = 36
> Const yPoolSize as Integer = 23, yPool1 as Integer = 38
> Dim i as Integer
> Dim xPool( 1 to xPoolSize ) as Integer
> Dim yPool( 1 to yPoolSize ) as Integer
> xPool(1) = xPool1
> For i = 2 to xPoolSize
> xPool(i) = xPool(i-1) + 1
> Next i
> yPool(1) = yPool1
> For i = 2 to yPoolSize
> yPool(i) = yPool(i-1) + 1
> Next i
>
> With a little trouble you could compact that code even better by
> using a 2-dimensional array for x & y together, although then the
> next step would not work. I leave that as an exercise.
>
> Next, just shuffle these arrays. VBA/E-Basic provides a command just
> for this (but only for 1-dimensional arrays, sigh):
>
> RandomizeArray xPool
> RandomizeArray yPool
>
>
> You may find RandomizeArray documented in the E-Basic Help facility.
>
> Now you may simply pick the first 4 values from the xPool & yPool
> arrays to construct your coordinates.
>
> Does that look like it will work? What have I missed?
>
> -----
> David McFarlane
> E-Prime training
> online: http://psychology.msu.edu/Workshops_Courses/eprime.aspx
> Twitter: @EPrimeMaster (https://twitter.com/EPrimeMaster)
>
> /----
> Stock reminder: 1) I do not work for PST. 2) You may reach PST's
> trained staff (and other support facilities) at
> https://support.pstnet.com . 3) If you do get an answer from PST
> staff, please extend the courtesy of posting their reply back here
> for the sake of others.
> \----
>
>
> At 8/1/2014 05:43 PM Friday, tamis... at gmail.com <javascript:> wrote:
> >Thanks for your response David. That is what I was afraid of. Eprime
> >support said it should work in theory, but seems as though it keeps
> >getting stuck when I add in the forth image. I am trying to list all
> >the combinations as well, it is just proving to be a huge task, for
> >there are an enormous amount of possible combinations.
> >
> >I was hoping that this would make coding much quicker and truly random.
> >
> >Tara
> >
> >On Friday, August 1, 2014 12:54:35 PM UTC-5, Vinson, David: UCL wrote:
> >I suspect you didn't get any replies before due the impressively
> >complicated set of OR statements in that loop. I suspect the problem
> >is there somewhere but imagine it world be a nightmare to track it
> >down. My guess is the loop never exits, whether due to an error or
> >impossible constraints.
> >
> >What if instead you enumerated the possible legal combinations of
> >positions in a nested List and then just sampled one of them per trial?
> >
> >Good luck,
> >David V
> >
> >----- Reply message -----
> >From: "tamis... at gmail.com" <tamis... at gmail.com>
> >To: "e-p... at googlegroups.com" <e-p... at googlegroups.com>
> >Subject: Help with Randomization of Non-Overlapping Images
> >Date: Fri, Aug 1, 2014 6:30 pm
> >
> >
> >
> >Does anyone have any suggestions on this? I'm stuck on this and
> >eprime support directed me here.
> >
> >Tara
> >
> >On Monday, July 28, 2014 3:43:33 PM UTC-5, Tara Miskovich wrote:
> >Hello,
> >
> >I am working on having 4 images randomly places within a rectangular
> >region without overlapping. I wrote the code below, and it appears
> >to be working with up to Image 3 added, but when I add in the forth
> >image the program freezes. I am hoping for some guidance with what
> >to try next or how to get past this. Here is the code I wrote to
> >randomize the x and y location for each image.
> >
> >Thanks!
> >Tara
> >
> >Dim x1 As Integer
> >Dim x2 As Integer
> >Dim x3 As Integer
> >Dim x4 As Integer
> >Dim y1 As Integer
> >Dim y2 As Integer
> >Dim y3 As Integer
> >Dim y4 As Integer
> >
> >x1 = random(36, 42)
> >y1 = random(38, 60)
> >
> >Do
> >x2 = random(36, 42)
> >y2 = random(38, 60)
> >x3 = random(36, 42)
> >y3 = random(38, 60)
> >x4 = random(36, 42)
> >y4 = random(38, 60)
> >
> >
> >Loop While (x2 = x1 Or x2 = x1 + 1 Or x2 = x1+2 Or x2 = x1 - 1 Or x2
> >= x1 - 2 _
> >And y2 = y1 Or y2 = y1 + 1 Or y2 = y1 + 2 Or y2 = y1 + 3 Or y2 = y1
> >- 1 Or y2 = y1 - 2 Or y2 = y1 - 3)_
> >Or (x3 = x1 Or x3 = x1 + 1 Or x3 = x1+2 Or x3 = x1 - 1 Or x3 = x1 - 2 _
> >And y3 = y1 Or y3 = y1 + 1 Or y3 = y1 + 2 Or y3 = y1 + 3 Or y3 = y1
> >- 1 Or y3 = y1 - 2 Or y3 = y1 - 3)_
> >Or (x3 = x2 Or x3 = x2 + 1 Or x3 = x2+2 Or x3 = x2 - 1 Or x3 = x2 - 2 _
> >And y3 = y2 Or y3 = y2 + 1 Or y3 = y2 + 2 Or y3 = y2 + 3 Or y3 = y2
> >- 1 Or y3 = y2 - 2 Or y3 = y2 - 3)_
> >or (x4 = x1 Or x4 = x1 + 1 Or x4 = x1+2 Or x4 = x1 - 1 Or x4 = x1 - 2 _
> >And y4 = y1 Or y4 = y1 + 1 Or y4 = y1 + 2 Or y4 = y1 + 3 Or y4 = y1
> >- 1 Or y4 = y1 - 2 Or y4 = y1 - 3)_
> >Or (x4 = x2 Or x4 = x2 + 1 Or x4 = x2 + 2 Or x4 = x2 - 1 Or x4 = x2 - 2 _
> >And y4 = y2 Or y4 = y2 + 1 Or y4 = y2 + 2 Or y4 = y2 + 3 Or y4 = y2
> >- 1 Or y4 = y2 - 2 Or y4 = y2 - 3)_
> >Or (x4 = x3 Or x4 = x3 + 1 Or x4 = x3 + 2 Or x4 = x3 - 1 Or x4 = x3 - 2 _
> >And y4 = y3 Or y4 = y3 + 1 Or y4 = y3 + 2 Or y4 = y3 + 3 Or y4 = y3
> >- 1 Or y4 = y3 - 2 Or y4 = y3 - 3)
> >
> >c.SetAttrib "x1", x1
> >c.SetAttrib "x2", x2
> >c.SetAttrib "x3", x3
> >c.SetAttrib "x4", x4
> >c.SetAttrib "y1", y1
> >c.SetAttrib "y2", y2
> >c.SetAttrib "y3", y3
> >c.SetAttrib "y4", y4
>
>
--
You received this message because you are subscribed to the Google Groups "E-Prime" group.
To unsubscribe from this group and stop receiving emails from it, send an email to e-prime+unsubscribe at googlegroups.com.
To post to this group, send email to e-prime at googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/e-prime/dec96210-911d-40dd-a0a3-06a6afd97695%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.linguistlist.org/pipermail/eprime/attachments/20140804/35f33450/attachment.htm>
More information about the Eprime
mailing list