No replace no repeat function


Author
Message
Libra
Libra
Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)
Group: Forum Members
Posts: 34, Visits: 148
I see. Thank you!
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 103K
Libra - 3/31/2020
Hi Dave, 
Thank you for your helpful reply! 
I was trying to use the /not function in list element, hoping it could successfully implement the second constraint. My logic was that I would like to assign a value when a Likert trial ends, depending on which question was asked. And in the subsequent trial, the Likert of the same value will be excluded from selection, so that the same question will not appear back-to-back. 
But I was puzzled by the fact that it still did not work. Do you have an idea why using the /not function in such a way did not work? Is there really no way to implement two constraints? Thank you! 

(Below is part of the script with the main edits in bold font. I have also attached the full script.)

<trial target1>
/ validresponse = (0)
/ trialduration = 0
/ recorddata = false
/ branch = [list.target1_trials.nextvalue]
</trial>

<list target1_trials>
/ items = (likert.target1_attractive, likert.target1_trustworthy, likert.target1_moral, likert.target1_like, likert.target1_getalong, likert.target1_intelligent, likert.target1_competent)
/ selectionmode = random
/ not = [(values.judgment_number)]
/ replace = false
</list>

<likert target1_attractive>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, attractive]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 1]
</likert>

<likert target1_trustworthy>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, trustworthy]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 2]
</likert>

<likert target1_moral>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, moral]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 3]
</likert>

<likert target1_like>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, like]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 4]
</likert>

<likert target1_getalong>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, getalong]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 5]
</likert>

<likert target1_intelligent>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, intelligent]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 6]
</likert>

<likert target1_competent>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, competent]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 7]
</likert>

The items in the list are not numbers, that is why your /not constraint does nothing -- it never applies.

You can implement something like this by introducing yet another set of <list>s with values 1 to 7 each as its items. Apply the /not constraint to those. Sample a value from the applicable list in the respective dummy trial, then /branch based on that value.

But again, as explained in the post on constrained randomization, note that this is not fail-safe. Constraint violations can occur when a given list does not have any items left to sample that do not violate the constraint.
Edited 4 Years Ago by Dave
Libra
Libra
Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)
Group: Forum Members
Posts: 34, Visits: 148
Hi Dave, 
Thank you for your helpful reply! 
I was trying to use the /not function in list element, hoping it could successfully implement the second constraint. My logic was that I would like to assign a value when a Likert trial ends, depending on which question was asked. And in the subsequent trial, the Likert of the same value will be excluded from selection, so that the same question will not appear back-to-back. 
But I was puzzled by the fact that it still did not work. Do you have an idea why using the /not function in such a way did not work? Is there really no way to implement two constraints? Thank you! 

(Below is part of the script with the main edits in bold font. I have also attached the full script.)

<trial target1>
/ validresponse = (0)
/ trialduration = 0
/ recorddata = false
/ branch = [list.target1_trials.nextvalue]
</trial>

<list target1_trials>
/ items = (likert.target1_attractive, likert.target1_trustworthy, likert.target1_moral, likert.target1_like, likert.target1_getalong, likert.target1_intelligent, likert.target1_competent)
/ selectionmode = random
/ not = [(values.judgment_number)]
/ replace = false
</list>

<likert target1_attractive>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, attractive]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 1]
</likert>

<likert target1_trustworthy>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, trustworthy]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 2]
</likert>

<likert target1_moral>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, moral]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 3]
</likert>

<likert target1_like>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, like]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 4]
</likert>

<likert target1_getalong>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, getalong]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 5]
</likert>

<likert target1_intelligent>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, intelligent]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 6]
</likert>

<likert target1_competent>
/ ontrialbegin = [values.trialcount_target1 +=1]
/ ontrialbegin = [if (values.trialcount_target1 == 1) {values.information_books_code_target1 = list.information_books_code.nextvalue;
values.information_partners_code_target1 = list.information_partners_code.nextvalue;
values.information_exercise_code_target1 = list.information_exercise_code.nextvalue}]
/ ontrialbegin = [if (values.trialcount_target1 > 1) {values.information_books_code_target1 = values.information_books_code_target1;
values.information_partners_code_target1 = values.information_partners_code_target1;
values.information_exercise_code_target1 = values.information_exercise_code_target1}]
/ stimulustimes = [0 = fixation; 500 = picture_target1; 1000 = blank, information_books_target1, information_partners_target1, information_exercise_target1; 3000 = blank, prompt, competent]
/ pretrialpause = 000
/ posttrialpause = 000
/ anchors = [1="Not at all"; 2 = ""; 3 = ""; 4 = ""; 5 = ""; 6 = ""; 7 = "Extremely"]
/ anchorwidth = 15%
/ numpoints = 7
/ position = (50%, 60%)
/ ontrialend = [values.judgment_number = 7]
</likert>
Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 103K
Libra - 3/31/2020
Hi Dave, 
Thank you for your prompt reply and helpful suggestions! I see why my previous coding didn't work. I would like to further ask, in the script you suggested, it is still possible that the same judgment question shows up back-to-back, right? Is there a way to further implement this constraint? 



> I would like to further ask, in the script you suggested, it is still possible that the same judgment question shows up back-to-back, right?

Yes, that is the case as I mentioned in my previous response.

> Is there a way to frther implement this constraint?

Not without essentially re-writing the whole script from scratch in a very different fashion. And even then, it would be somewhat of a pain to get right.

These things -- constrained randomizations -- are not entirely trivial (see e.g. for a brief primer that's still generally valid: https://www.millisecond.com/forums/Topic6419.aspx ). If satisfying both of those constraints is absolutely integral for you, consider constructing a small number (say 4 or 5) of trial sequences that satisfy the constraints by hand and then run just select one of those trial sequences at random for each participant.
Edited 4 Years Ago by Dave
Libra
Libra
Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)
Group: Forum Members
Posts: 34, Visits: 148
Hi Dave, 
Thank you for your prompt reply and helpful suggestions! I see why my previous coding didn't work. I would like to further ask, in the script you suggested, it is still possible that the same judgment question shows up back-to-back, right? Is there a way to further implement this constraint? 



Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 13K, Visits: 103K
Libra - 3/30/2020
Hi, I have a script where I am going to randomly present people with a lot of faces, each repeated for a number of times. Each time the face is presented, a different question about the face would be asked.
I was wondering if there is a way to program the script so that the same face and the same judgment question would not be presented back-to-back.
Right now, I used the noreplacenorepeat function but it still happened that the same face is presented in two consecutive trials. I am attaching a brief version of my script here. May I ask if there is a way to solve the problem? Thank you.

In the place where you use noreplacenorepeat(), namely to sample trials, there is nothing that could possibly repeat, because you've chosen to make everything its own trial.

You run 140 trials, and you have 140 separate trial elements you sample from -- not a single one of those trial elements will be run twice or more, and thus none of those trials will repeat. so using noreplacenorepeat() here in the first place makes no sense. That some of those trials happen to display the same face is completely immaterial to the sampling of separate trial elements from the pool.

To get what you want -- two complex constraints on sampling -- you would have to rewrite the script completely. As compromise option, you can implement one constraint with moderate effort, by introducing dummy trials for one of the dimensions (let's say target) and sampling *those* dummy trials per noreplacenorepeat() at the block-level. The respective dummy trials can then /branch to the "actual* trials sampling them randomly without replacement from a <list>s.

In a nutshell

<block judgment1>
/ onblockbegin = [values.blockcount +=1]
/ trials = [1-140=noreplacenorepeat(target1_dummy,
target2_dummy,
target3_dummy,
target4_dummy,
target5_dummy,
target6_dummy,
target7_dummy,
target8_dummy,
target9_dummy,
target10_dummy,
target41_dummy,
target42_dummy,
target43_dummy,
target44_dummy,
target45_dummy,
target46_dummy,
target47_dummy,
target48_dummy,
target49_dummy,
target50_dummy)]
/ branch = [if (values.blockcount < 4) block.rest]
</block>

with

<trial target1_dummy>
/ validresponse = (0)
/ trialduration = 0
/ recorddata = false
/ branch = [list.target1_trials.nextvalue]
</trial>

<list target1_trials>
/ items = (likert.target1_attractive, likert.target1_trustworthy, likert.target1_moral, likert.target1_like, likert.target1_getalong, likert.target1_intelligent, likert.target1_competent)
/ selectionmode = random
/ replace = false
</list>

and so forth for the other targets.

Edited 4 Years Ago by Dave
Libra
Libra
Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)Respected Member (466 reputation)
Group: Forum Members
Posts: 34, Visits: 148
Hi, I have a script where I am going to randomly present people with a lot of faces, each repeated for a number of times. Each time the face is presented, a different question about the face would be asked.
I was wondering if there is a way to program the script so that the same face and the same judgment question would not be presented back-to-back.
Right now, I used the noreplacenorepeat function but it still happened that the same face is presented in two consecutive trials. I am attaching a brief version of my script here. May I ask if there is a way to solve the problem? Thank you.

Attachments
HRWP_SDS_inquisit_briefversion.zip (357 views, 3.00 MB)
GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search