You're almost there - first thing I noticed, is that you'll want to connect your conditions with OR ( "|"s). With the semicolons, the disallowed combinations is only looking at the final statement to evaluate.
The other issue you'll run into is with the Mod function. Because words is continuous, outside the min and the max, the custom designer is going to have issues landing right on an integer.
If you put a bound on the mod function, it will find a design, such as in the code below. You could then change the value to the nearest increment for each level of mux.
The other option is to have words be a discrete numeric variable with a small subset of increments that work. For example, you could take the lower, upper bounds and midpoint for each level of mux. The Mod function should behave better in that case (ie, you don’t need to set the bounds on it like in the code below).
Hope that helps!
Cheers,
Ryan
DOE(
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Categorical, {"8", "16", "32"}, "mux", 0 ),
Add Factor( Continuous, 1024, 32768, "words", 0 ),
Add Factor( Continuous, 4, 144, "bpw", 0 ), Set Random Seed( 1253068796 ),
Number of Starts( 40 ), Add Term( {1, 0} ), Add Term( {1, 1} ),
Add Term( {2, 1} ), Add Term( {3, 1} ), Set Sample Size( 20 ),
Disallowed Combinations(
mux == 1 & words > 8192 | mux == 1 & (Mod( words, 32 ) >= 1) | mux == 2 &
words > 16384 | mux == 2 & words < 2048 | mux == 2 & (Mod( words, 64 ) >= 1)
| mux == 2 & bpw > 72 | mux == 3 & words < 4096 | mux == 3 &
(Mod( words, 128 ) >= 1) | mux == 3 & bpw > 36
)}
);