프로파일 러 시뮬레이터 배포판을 프로그래밍 방식으로 설정시뮬레이터 옵션이 켜져있는 프로필러를 만들려고하는데 입력 중 일부에 임의의 분포가 있습니다. 그 분배의 유형 및 매개 변수 유형은 필요에 따라 질의 될 테이블 변수로 저장됩니다. 그러나 Profiler () 함수의 JSL은 if 문을 인식하지 못하는 것 같습니다.
예를 들어,이 코드는 잘 작동합니다.
Profiler(
Y( :a, :b ),
Profiler(
1,
Simulator(
1,
Factors(
c << Fixed( 3.5 ),
d << Random( Normal( :dist_p1, :dist_p2 ) )
),
Resimulate
)
)
)그러나이 코드는 "d"에 대한 배포 정보를로드하지 않습니다.
Profiler(
Y( :a, :b ),
Profiler(
1,
Simulator(
1,
Factors(
c << Fixed( 3.5 ),
if(
dist_type == "Normal", d << Random( Normal( :dist_p1, :dist_p2 ) ),
dist_type == "Weibull", d << Random( Weibull( :dist_p1, :dist_p2 ) )
)
),
Resimulate
)
)
)
Re : 프로그래밍 방식으로 시뮬레이터 배포판 설정나는이 접근법을 간단히 생각했지만, 실제 파일에서는 100 + 라인의 코드를 9 번 (3 개의 임의 변수, 3 가지 분포 유형)으로 복제 할 것입니다. 그것은 매우 빠르게 관리하기 어려워집니다.
편집 : 이것은 David_Burnham에 대한 것입니다. 아직도이 포럼을 사용하는 방법을 배우는 중 ...
Re : 프로그래밍 방식으로 시뮬레이터 배포판 설정좋아, 내가 최고 수준의 기능 (이 경우에는 프로파일 러)로 돌아가 Eval, Substitute 및 Expr로 감싸면 원하는 동작을 얻을 수 있습니다. if가 먼저 평가되어야하고 내부에있는 함수의 인수로 사용되어야한다고 생각했기 때문에 혼란 스러웠습니다. 그러나 왜 그것이 작동하지 않는지 이해할 수 있습니다.
Eval(
Substitute(
Expr(
Profiler(
Y( :a, :b ),
Simulator(
Factors(
c << Fixed( 3.5 ),
d_
),
Resimulate
)
)
),
Expr( _d_ ),
if (:dist_type == "Normal", Parse( "d << Random( Normal( :dist_p1, :dist_p2 ))" ),
:dist_type == "Weibull", Parse( "d << Random( Weibull( :dist_p2, :dist_p1 ))" )
)
)
)Re : 프로그래밍 방식으로 시뮬레이터 배포판 설정프로파일 러는 기능입니다. 함수 내부의 모든 함수는 함수를 실행하는 데 필요한 함수 인수 여야합니다. 따라서 내부에 임의의 JSL 코드 만 붙일 수는 없습니다. 조건부 로직을 외부로 이동해야합니다.
type = "Normal";
p1 = 3.0;
p2 = 0.5;
If (type == "Normal",
Profiler(
Y( :a, :b ),
Profiler(
1,
Simulator(
1,
Factors(
c << Fixed( 3.5 ),
d << Random( Normal( p1, p2 ) ),
),
Resimulate
)
)
)
);