在技術支援中,我們經常收到有關在 JMP 的實驗設計平台中使用因子約束的問題。三個選項——線性約束、不允許的組合過濾器和不允許的組合腳本——可以限制您的設計空間。然而,有時使用者聯絡我們,報告最終的設計不符合他們定義的約束。
這篇部落格文章將專門介紹不允許的組合腳本的使用,我們通常會引導使用者使用該腳本,因為它比不允許的組合過濾器更用戶友好。線性約束選項相當簡單,但你可以找到相關指導這裡如果需要的話。
不允許的組合腳本選項可讓您使用 JSL 腳本定義對設計空間的限制。要記住的關鍵點是指定哪些因子水準的組合不是設計中允許。輸入的 JSL 腳本必須以布林運算式計算。當表達式為真時,它不允許該組合在設計中出現。腳本不必是線性形式,因此也有能夠指定非線性約束的額外好處。您也可以使用函數(指示函數特別有用,如本文後面的一個範例所示)。
不允許的組合腳本可以與連續、離散數字和分類因子結合使用,但不支援混合或阻塞因子。在後面的範例中描述了在混合場景中定義限制的替代方法。
在表達式中,連續和離散數值因素的水平透過其數值來引用。分類因子的水平可以透過其相關的序數值(1、2、3 等)或命名的水平值來引用。
考慮具有兩個連續因子、一個四級離散數字因子和一個三級分類因子的客製化設計。
使用上面描述的因素重現起始 DOE 對話方塊的腳本是:
DOE(
Custom Design,
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Continuous, -1, 1, "X1", 0 ),
Add Factor( Continuous, 100, 105, "X2", 0 ),
Add Factor( Discrete Numeric, {10, 20, 30, 40}, "X3", 0 ),
Add Factor( Categorical, {"A", "B", "C"}, "X4", 0 ),
Add Term( {1, 0} ), Add Term( {1, 1} ),
Add Term( {2, 1} ), Add Term( {3, 1} ), Add Potential Term( {3, 2} ),
Add Potential Term( {3, 3} ), Add Term( {4, 1} ),
Add Alias Term( {1, 1}, {2, 1} ), Add Alias Term( {1, 1}, {3, 1} ),
Add Alias Term( {1, 1}, {4, 1} ), Add Alias Term( {2, 1}, {3, 1} ),
Add Alias Term( {2, 1}, {4, 1} ), Add Alias Term( {3, 1}, {4, 1} ),
Set Sample Size( 12 ), Simulate Responses( 1 ), Save X Matrix( 0 )}
);
舉例來說,假設您的設計中不能發生任何運行,其中因子 X1 取值為 1,同時因子 X4 取值為 A。
X1 == 1 & X4 == 1
或者
X1 == 1 & X4 == "A"
第一個表達式使用與 X4 = A 的值相關的序數值,第二個表達式僅引用字元值。兩者都可以接受。此表達式可防止任何運行同時出現 X1 = 1 和 X4 = A。
執行腳本後,選擇定義因子約束部分中使用不允許的組合腳本旁的單選按鈕,然後輸入上述表達式之一。
若要為腳本新增額外的設計空間限制,請使用 OR (|) 運算符,當設計不能包含滿足表達式 1 條件的執行時,此運算子是分隔表達式所必需的,或者表達式 2,或者表達式3等
假設在同一設計中,當因子 X3 的值為 3 時,因數 X1 和 X2 總和不能大於 102。
((X1 + X2) > 102 & X3 == 30)
使用 |運算符,完整的不允許組合腳本將寫成:
(X1 == 1 & X4 == 1) |
((X1 + X2) > 102 & X3 == 30)
設計完成後,您會注意到 JMP 可能會像下面這樣重新格式化腳本,用字元值表示分類因子水平,並透過解析刪除不必要的括號。

用戶向我們提出的一些常見場景是:
1)由於混合因子不支援不允許的組合,我該如何在混合設計中指定設計空間的限制?
使用離散數字和/或連續因子代替混合因子,有幾種不同的方法來解決這個問題。首先,我們可以在不允許的組合腳本中施加相等約束(並添加任何其他必要的約束)。 JMP 可能無法使用嚴格等式限制(例如,使用 != 運算符,或在一種條件下使用 < 和 > 嚴格不等式)找到可行的設計。因此,我們必須使用一個表達式來指定因子值的總和附近1.
假設我們有三個混合因子,混合和為一。我們知道其中一個因子(X1)只能取 0、0.25、0.5、0.75 和 1 的離散水準。因此,將第一個定義為五級離散數字因子而將另外兩個定義為連續因子是最有意義的。為了使三個因素總和近似為一,我們可以將偽等式限制條件指定為:
X1 + X2 + X3 > 1.001 | X1 + X2 + X3 < 0.999
這將總數限制在千分之一以內。考慮到這個問題的驅動力是在混合設計的背景下能夠指定因子約束,假設我們還想防止設計中 X3 的值大於 X2 的值。在這種情況下,在禁止組合腳本欄位中輸入的完整表達式為:
X1 + X2 + X3 > 1.001 | X1 + X2 + X3 < 0.999 | X3 > X2
執行下面的 JSL 腳本來建立此設計的範例。
DOE(
Custom Design,
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Discrete Numeric, {0, 0.25, 0.5, 0.75, 1}, "X1", 0 ),
Add Factor( Continuous, 0, 1, "X2", 0 ), Add Factor( Continuous, 0, 1, "X3", 0 ),
Set Random Seed( 12345 ), Number of Starts( 1000 ), Add Term( {1, 1} ),
Add Term( {1, 2} ), Add Term( {1, 3} ), Add Term( {1, 4} ), Add Term( {2, 1} ),
Add Term( {3, 1} ), Add Alias Term( {1, 1}, {2, 1} ), Add Alias Term( {1, 1}, {3, 1} ),
Add Alias Term( {2, 1}, {3, 1} ), Set Sample Size( 20 ),
Disallowed Combinations( X1 + X2 + X3 > 1.001 | X1 + X2 + X3 < 0.999 | X3 > X2 ),
Make Design}
);
由於三個因子的值總和不會剛好等於一,因此您必須在產生的設計表中稍微調整其中一個連續因子的值。
對於原始問題的第二種更清晰的方法是在初始自訂設計對話方塊中僅輸入因子 X1(五級離散數字因子)和 X2(範圍從 0 到 1 的連續因子)。使用公式 1 - X1 - X2 可以輕鬆在設計表中產生 X3 的值。在僅包含因子 X1 和 X2 的初始設計設定中,我們將使用不允許的組合腳本來確保 X1 和 X2 的總和不小於零也不大於 1。由於 X3 = 1 - X1 - X2,我們可以將 X3 > X2 限制重寫為 2*X2 + X1 < 1,並將其包含在具有 OR 運算子的表達式中。
在這種情況下,完整的不允許組合腳本將是:
X1 + X2 > 1 | X1 + X2 < 0 | 2 * X2 + X1 < 1
建立此範例設計的完整腳本是:
DOE(
Custom Design,
{Add Response( Maximize, "Y", ., ., . ), Add Factor(
Discrete Numeric,
{0, 0.25, 0.5, 0.75, 1},
"X1",
0
), Add Factor( Continuous, 0, 1, "X2", 0 ),
Number of Starts( 1000 ), Add Term( {1, 0} ), Add Term( {1, 1} ), Add Potential Term( {1, 2} ),
Add Potential Term( {1, 3} ), Add Potential Term( {1, 4} ), Add Term( {2, 1} ),
Add Alias Term( {1, 1}, {2, 1} ), Set Sample Size( 20 ),
Disallowed Combinations( X1 + X2 > 1 | X1 + X2 < 0 | 2 * X2 + X1 < 1 ),
Simulate Responses( 1 ), Save X Matrix( 0 ), Make Design}
);
在上述兩種方法中,設計表中因子的列屬性需要在最後進行修改,以反映設計的真實混合特性。您可以根據指導手動新增屬性在我們的文件中。但是,更快捷的方法是使用實際混合因子建立另一個自訂設計(不需要不允許的組合),並製作表格(作為模板)。然後,將您的設計複製到該「範本」表中。這樣做可確保存在適合混合因子的列屬性。
2)如何指定單次實驗中可處於「活躍」狀態的最大因子數?假設有六個因素,但在任何一次實驗運行中,最多有三個因素可以取大於零的值。我們選擇定義六個具有不同等級數的離散數字因子(X1 – X6)。
要記住的一個重要工具是不允許的組合腳本接受函數。在此場景中,指示功能是關鍵。例如,如果 X1 大於零,則指示函數 (X1 > 0) 解析為 1,如果不大於零,則指示函數解析為 0。因此,將所有六個因子的指示函數相加,然後排除總和大於 3 的情況,這將限制設計空間,使得單次運行中活躍的因子不會超過三個。不允許的組合腳本寫為:
(X1 > 0) + (X2 > 0) + (X3 > 0) + (X4 > 0) + (X5 > 0) + (X6 > 0) > 3
並且,可以使用以下 JSL 腳本建立此範例設計:
DOE(
Custom Design,
{Add Response( Maximize, "Y", ., ., . ), Add Factor( Discrete Numeric, {0, 1, 2, 3}, "X1", 0 ),
Add Factor( Discrete Numeric, {0, 1, 2, 3}, "X2", 0 ), Add Factor( Discrete Numeric, {0, 1}, "X3", 0 ),
Add Factor( Discrete Numeric, {0, 1, 2, 3}, "X4", 0 ), Add Factor( Discrete Numeric, {0, 1, 5}, "X5", 0 ),
Add Factor( Discrete Numeric, {0, 1, 2, 3}, "X6", 0 ), Add Term( {1, 0} ), Add Term( {1, 1} ), Add Potential Term( {1, 2} ),
Add Potential Term( {1, 3} ), Add Term( {2, 1} ), Add Potential Term( {2, 2} ), Add Potential Term( {2, 3} ),
Add Term( {3, 1} ), Add Term( {4, 1} ), Add Potential Term( {4, 2} ), Add Potential Term( {4, 3} ), Add Term( {5, 1} ),
Add Potential Term( {5, 2} ), Add Term( {6, 1} ), Add Potential Term( {6, 2} ), Add Potential Term( {6, 3} ),
Add Alias Term( {1, 1}, {2, 1} ), Add Alias Term( {1, 1}, {3, 1} ), Add Alias Term( {1, 1}, {4, 1} ),
Add Alias Term( {1, 1}, {5, 1} ), Add Alias Term( {1, 1}, {6, 1} ), Add Alias Term( {2, 1}, {3, 1} ),
Add Alias Term( {2, 1}, {4, 1} ), Add Alias Term( {2, 1}, {5, 1} ), Add Alias Term( {2, 1}, {6, 1} ),
Add Alias Term( {3, 1}, {4, 1} ), Add Alias Term( {3, 1}, {5, 1} ), Add Alias Term( {3, 1}, {6, 1} ),
Add Alias Term( {4, 1}, {5, 1} ), Add Alias Term( {4, 1}, {6, 1} ), Add Alias Term( {5, 1}, {6, 1} ), Set Sample Size( 16 ),
Disallowed Combinations( (X1 > 0) + (X2 > 0) + (X3 > 0) + (X4 > 0) + (X5 > 0) + (X6 > 0) > 3 ),
Save X Matrix( 0 ), Make Design}
);
執行腳本後,請注意設計中每次執行至少有三個因素取零值。
在任何這些情況下,如果出現 JMP 警報“最佳設計器未能收斂”,則您的約束可能過於嚴格。如果可能的話,放寬約束以給出坐標交換演算法找到設計的更大機會。另外,你可以嘗試增加啟動次數和/或將假設模型中的項的可估計性改為如果可能的話而不是必要的看看是否能夠實現收斂。
與往常一樣,如果您對使用 JMP 中的設計空間限制選項有任何疑問,或者您的設計產生的運行不符合您預期的限制,請隨時聯繫技術支援。