01. 서론

원래는 MATLAB 소스코드를 LS-OPT 실험계획법에 넣고 돌리려는 목적이였다.

실제로 LS-OPT는 Solver type에 Matlab을 제공하고 있다.


Cap 2017-12-26 03-32-17-064.png

[Fig. 1] Package name : MATLAB


그런데 MATLAB-LSOPT란 키워드로 구글링을 하면 마땅한 예제가 나오지 않는다.

실제로 LS-OPT Support site1)에도 MATLAB-LSOPT예제는 제공하지 않는다.

정확히 말하면 Perl 언어로 되어있는 예제2)는 제공되고 있다.


MATLAB AnswersTM 사이트에는 2건의 질문이 올라와 있다.

첫번째 질문과 두번째 질문 모두 Adwait(2015)3)가 "Using Matlab as a solver in LS-OPT"란 제목으로 올렸다.

LS-OPT Support에서 제공되는 Perl 언어 script를 MATLAB으로 변경해서 돌리는데 LS-OPT 상에서 뭔가 잘 안된다는 것이다.


그래서 필자는 MATLAB 최적화를 하기 전에 Perl을 이용한 최적화를 수행해보기로 했다.

사실 별거 없다. 그냥 예제를 돌려본다는 것이다.


02. 문제 정의


문제는 LS-OPT Support에서 제공하는 [Fig. 2]의 최소 f 값 문제를 따른다.


image_preview.jpg EXIF Viewer사진 크기400x375

[Fig. 2] f = sin(4x)-2x+x^2 + sin(4y)-2y+y^2, x=-1:0.1:3, y=-1:0.1:3


일단 Perl로 제공되는 스크립트는 아래와 같다.


#!/usr/bin/perl
 $x=<<X:10>>;
 $y=<<Y:10>>;
$f=sin(4*$x)-2*$x+$x**2+sin(4*$y)-2*$y+$y**2;

open(FILE,'>out.txt');
print FILE "$fn";
close FILE;
print "N o r m a ln";

제 1행, #으로 시작하는 문장은 주석이다.

제 2행, $로 시작하는 문자열은 변수다. 물론 그 뒤에는 상수 혹은 변수가 대입되어야 한다. <<X:10>>이라고 입력하는 Perl 문법은 없다.

제 3행, 제 2행과 같다.

제 4행, 제 2행과 제 3행에서 초기화된 x 및 y 값을 기준으로 f를 초기화 한다.

제 6행, out.txt라는 파일을 생성한다.

제 7행, 파일에 f값을 넣는다.

제 8행, 파일 핸들을 이용하여 스트림을 닫는다.

제 9행, cmd에 N o r m a l 을 출력한다. 아마도 이것이 LS-OPT에서 인식하는 Script 종료 메시지 인 것 같다.


제 2행에 대해 사설을 붙이면 <<X:10>>은 변수의 초기화 문법이 아니다.

LS-OPT에서 변수를 인식시키기 위한 문법이다.

즉, 순수한 Perl 언어라고 보기는 어렵다.


실제로 Perl을 컴파일 하기 위해서는 몇몇 자료를 뒤져야 한다.

아래에 Perl 언어를 검증하기 위한 몇가지 참고 사이트를 나열한다.


1. Gabor Szabo, "펄 설치하고 사용하기"4)

2. DWIM Perrl for Windows5)

  - Download : dwimperl-5.14.2.1-v7-32bit.exe-x


3. @aer0, "첫째 날 : MS Windows에서 Perl 활용하기"6)


위에서 언급했듯이 실제로 컴파일을 해보면 에러 먹기 때문에 Perl 컴파일은 아래의 코드로 해보자.

위의 코드와 다른 줄은 붉은색으로 표시했다.


#!/usr/bin/perl
 $x=1;
 $y=3;
$f=sin(4*$x)-2*$x+$x**2+sin(4*$y)-2*$y+$y**2;


open(FILE,'>out.txt');
print FILE "$fn";
close FILE;

print "N o r m a ln";


(다시 언급하지만 LS-OPT에서 인식시키려면 첫번째 코드로 수정해줘야 한다. 귀찮게 자꾸 강조하는 것은 그만큼 중요하다는 것이다.)


LS-OPT Support 에서 제공하는 optimierung_2variables_for_win.zip 파일을 열어보면 lsopt 파일의 구성도 볼 수 있다.

이리저리 빙빙 돌아가면서 파일 보는것이 귀찮다면 필자가 미리 다 작성하고 결과까지 첨부한 파일(Original_file.zip) 을 참고하도록 하자.



Cap 2017-12-26 04-11-42-871.png

[Fig. 3] lsopt.lsopt 파일의 내부 모습


lsopt.lsopt 파일의 Stage 셋팅은 아래와 같다.


2017-12-26.png

[Fig. 4] lsopt.lsopt 파일의 stage 모습


컴퓨터 환경에 따라서 input 파일의 function 앞, 경로는 바뀌어야 한다.


2017-12-26 (4).png

[Fig. 4] lsopt.lsopt 파일의 stage 내부, Responses 모습


Responses는 출력되는 out.txt로 잡는다. 어짜피 그 안에 값이 하나라서 가능하다.


2017-12-26 (3).png

[Fig. 5] lsopt.lsopt 파일의 parameter 모습


parameter는 continuous 타입에 값의 범위는 -1 부터 3까지로 설정한다.


2017-12-26 (5).png

[Fig. 6] lsopt.lsopt 파일의 objective 모습 


objective에서는 out.txt가 설정된 response를 잡아준다.


2017-12-26 (6).png

[Fig. 7] lsopt.lsopt 파일의 metamodel setting 모습 


metamodel은 polynomial-D-Optimal로 설정한다.


그 밖에 Termination criteriafmf 10으로 변경하고 Domain reduction과 Global sensitivities를 추가하는 설정을 해준다.



03. 최적화 수행


이 부분은 생략한다.

여기까지 잘 따라왔으면 당연히 된다.


04. 결과 보기


Graphic쪽은 History를 보면 된다.


2017-12-26 (7).png

[Fig. 8] Iteration에 따른 x값의 변화


[Fig. 2]을 통해 X와 Y가 대칭이므로 X값의 변화와 Y값의 변화가 같다는 것을 예측할 수 있는데, 결과를 보더라도 그렇다.


2017-12-26 (8).png

[Fig. 9] Iteration에 따른 f 값의 변화


[Fig. 2]에서 제시한 결과 f의 변화도 Iteration이 증가함에 따라 최소화 됨을 볼 수 있다.



Reference

[1] Problem description, LS-OPT Support

[2] Solution with LS-OPT, LS-OPT Support

  - Download :  optimierung_2variables_for_win.zip

  - Complete : Original_file.zip, 2017.12.25, 신동석

[3] Adwait, "Using Matlab as a solver in LS-OPT", MATLAB AnswersTM, 2015

[4] Gabor Szabo, "펄 설치하고 사용하기"

[5] DWIM Perrl for Windows

  - Download : dwimperl-5.14.2.1-v7-32bit.exe-x