안녕하세요 여러분,
대형 모델의 평균 제곱 오차를 최소화하는 두 개 이상의 변수 값을 얻기 위해 JSL의 최소화 기능을 사용하려고 합니다. 어떤 값으로 수렴해야 하는지 알더라도(시행 착오를 통해) 수렴할 수 없습니다.
내가 사용한 기본 구문은 다음과 같습니다.
minfun = Minimize( min_test, {kD( 0.4, 0.8 ), wshc( 0.1, 1.5 )}, <<DETAILS></DETAILS>다른 메시지를 시도했지만 아무 것도 변경되지 않습니다.
여기서 목표는 다음과 같이 평가된 표현식의 시퀀스인 min_test 표현식을 최소화하는 kD 및 wshc의 값을 찾는 것입니다.
min_test = Expr(
Eval( light );
Eval( parafile );
Eval( runprg );
Eval( reshandling2 );
Eval( SSE2 );
);
변경된 kD 및 wshc 값은 "light" 및 "parafile" 표현식을 수정한 다음 프로그램 실행 파일(runprg 표현식에서)을 실행합니다. 그 결과는 조작되고 평균 제곱 오류(MSE)는 마지막 항목입니다. SSE2 표현식에서 평가됩니다. 맥락에 따라 "runprg" 표현식은 호수의 열 변화를 시뮬레이션하는 독립 실행형 실행 파일에 생성된 여러 파일을 제출합니다. "runprg" 표현식의 각 패스에는 약 10~20초의 컴퓨팅이 필요하며 그 결과는 JSL에서 다시 수집되어 MSE를 계산합니다.
프로세스 자체는 각 단계에서 목적함수 값을 정확하게 읽고, 매개변수의 값을 표현식에 올바르게 전달한다는 점에서 제대로 작동하는 것 같습니다. 문제는 알고리즘이 kD 및 wshc 매개변수를 내가 제공한 초기 값에 비해 너무 약간(소수점 다섯 번째 자리에서만) "이동"하여 수렴하지 못한다는 것입니다. 예를 들어, 각각 0.8과 0.5의 초기 값으로 시작하면 일반적으로 다음과 같은 결과를 얻게 됩니다.
0.8
0.49999945654133
다음 반복에서는 결과 MSE에 큰 영향을 미치지 않습니다. 최소화 함수에 지정한 매개변수 범위를 사용하면 매개변수가 이동할 수 있는 공간이 충분합니다. 나는 내 사례가 일반적인 단순 미분 함수와는 거리가 멀다는 것을 이해합니다. 그러나 다른 매개변수 값을 사용하여 프로그램을 "수동으로" 실행함으로써 목적 함수가 매개변수와 관련하여 상당히 볼록하다는 것을 알고 있으므로 특히 <
이 상황에서 도움이 될 수 있는 해결 방법을 제안해 주시겠습니까?
미리 감사드립니다. 이브