你好@jthi ,
你的建议确实和我们私下讨论时 Ryan Lekivetz 推荐我的建议一致;他建议在设计脚本中引入Tick Seconds()函数,用于在设计生成前后计算设计生成时间。
下面的例子(灵感来自使用矩阵):
t1 = Tick Seconds();
DOE(
Space Filling Design,
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Continuous, -1, 1, "X1", 0 ),
Add Factor( Continuous, -1, 1, "X2", 0 ),
Add Factor( Continuous, -1, 1, "X3", 0 ),
Add Factor( Continuous, -1, 1, "X4", 0 ),
Add Factor( Continuous, -1, 1, "X5", 0 ),
Add Factor( Continuous, -1, 1, "X6", 0 ),
Add Factor( Continuous, -1, 1, "X7", 0 ),
Add Factor( Continuous, -1, 1, "X8", 0 ),
Add Factor( Continuous, -1, 1, "X9", 0 ), Set Random Seed( 830486233 ),
FFF Optimality Criterion( MaxPro ),
Space Filling Design Type( Fast Flexible Filling, 27 ), Simulate Responses( 0 ),
Set Run Order( Randomize ), Make Table}
);
t2 = Tick Seconds();
Show( t2 - t1 );
对于此设计生成,我可以在日志中找到值:
t2 - t1 = 2.31666666665114;
因此,我将手动使用此方法进行不同的设计(这不会花费太长时间),如果您对如何自动化此过程或使其更简单有任何想法,欢迎您:)
感谢您的关注和推荐,
如果你打算用 JSL 做 DoE,我会这样做。如果你需要用不同的种子/设置多次执行,可以稍微深入一点 JSL。
Names Default To Here(1);
record_doe = function({doe_expr}, {Default Local},
wait(0);
start = Tick Seconds();
d = Eval(doe_expr);
dt = d << Make Table;
wait(0);
end = Tick Seconds();
d << Close Window;
Close(dt, no save);
return(end - start);
);
designs = Associative Array();
designs["Space Filling MaxPro"] = Expr(DOE(
Space Filling Design,
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Continuous, -1, 1, "X1", 0 ),
Add Factor( Continuous, -1, 1, "X2", 0 ),
Add Factor( Continuous, -1, 1, "X3", 0 ),
Add Factor( Continuous, -1, 1, "X4", 0 ),
Add Factor( Continuous, -1, 1, "X5", 0 ),
Add Factor( Continuous, -1, 1, "X6", 0 ),
Add Factor( Continuous, -1, 1, "X7", 0 ),
Add Factor( Continuous, -1, 1, "X8", 0 ),
Add Factor( Continuous, -1, 1, "X9", 0 ), Set Random Seed( 830486233 ),
FFF Optimality Criterion( MaxPro ),
Space Filling Design Type( Fast Flexible Filling, 27 ), Simulate Responses( 0 ),
Set Run Order( Randomize )}
));
designs["Space Filling Centroid"] = Expr(DOE(
Space Filling Design,
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Continuous, -1, 1, "X1", 0 ),
Add Factor( Continuous, -1, 1, "X2", 0 ),
Add Factor( Continuous, -1, 1, "X3", 0 ),
Add Factor( Continuous, -1, 1, "X4", 0 ),
Add Factor( Continuous, -1, 1, "X5", 0 ),
Add Factor( Continuous, -1, 1, "X6", 0 ),
Add Factor( Continuous, -1, 1, "X7", 0 ),
Add Factor( Continuous, -1, 1, "X8", 0 ),
Add Factor( Continuous, -1, 1, "X9", 0 ), Set Random Seed( 1 ),
FFF Optimality Criterion( Centroid ),
Space Filling Design Type( Fast Flexible Filling, 20 ), Simulate Responses( 0 ),
Set Run Order( Randomize )}
));
design_durations = Associative Array();
For Each({{design_name, design_expr}}, designs,
design_dur = record_doe(design_expr);
design_durations[design_name] = design_dur
);
Show(design_durations);
You could also of course save the designs</CODE></P>
</LINGO-BODY>
<LINGO-SUB id="lingo-sub-897331" slang="en-US" mode="CREATE">回复:如何记录 DoE 生成时间?</LINGO-SUB>
<LINGO-BODY id="lingo-body-897331" slang="en-US" mode="CREATE">
<P>非常感谢<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/14366" target="_blank">@jthi</A>提供的解决方案!<BR />这个脚本听起来不错,可以自动化处理少数几个设计,但由于我需要运行 31 个设计,所以将每个 DOE 生成脚本都添加到数组中会有点繁琐。我将继续使用“手动”版本,并按照<A href="https://community.jmp.com/t5/user/viewprofilepage/user-id/5358" target="_blank">@Mark_Bailey</A>提到的升级方法,用 HP Time() 替换 Tick Seconds(),因为它可以提供更精确的微秒级测量。<BR />一个具体示例的最终脚本如下所示:</P>
<PRE><CODE class=" language-jsl">t1 = HP Time();
DOE(
Space Filling Design,
{Add Response( Maximize, "Y", ., ., . ),
Add Factor( Continuous, -1, 1, "X1", 0 ),
Add Factor( Continuous, -1, 1, "X2", 0 ),
Add Factor( Continuous, -1, 1, "X3", 0 ),
Add Factor( Continuous, -1, 1, "X4", 0 ),
Add Factor( Continuous, -1, 1, "X5", 0 ),
Add Factor( Continuous, -1, 1, "X6", 0 ),
Add Factor( Continuous, -1, 1, "X7", 0 ),
Add Factor( Continuous, -1, 1, "X8", 0 ),
Add Factor( Continuous, -1, 1, "X9", 0 ), Set Random Seed( 830486233 ),
FFF Optimality Criterion( MaxPro ),
Space Filling Design Type( Fast Flexible Filling, 27 ), Simulate Responses( 0 ),
Set Run Order( Randomize ), Make Table}
);
t2 = HP Time();
Show( t2 - t1 );
感谢大家的宝贵意见!