operator01.jpg

안녕하세요? LGS입니다.
오늘은 Optimization(최적화)에 대해서 이야기할까 합니다.

공학(Engineering)의 궁극적인 목적은 무엇일까요?
과학(Science)의 목적은 세상이 돌아가는 원리(Principle)을 알아내는데 있지만
공학의 목적은 principle을 응용하여 원하는 기능을 수행하는 것을 만들되(design)
가장 싸고 효율적인 것(optimization)을 만드는 것이 되겠습니다.
같은 가격이면 성능이 우수한 것이 좋고, 같은 성능이면 가격이 저렴한 것이 당연히 좋습니다.^^
즉 Engineering의 Final goal은 Design(설계)이고 Design의 궁극적인 지향점은
Optimal Design(최적설계)입니다.
결국 여러분이 지금 열심히 공부하는 이유가 결론적으로는 ‘최적설계’를 하기 위한 거예요!!
(수강과목 중 Optimal Design(최적설계)이 있으면 꼭 수강 하시길 권해드립니다.)
MATLAB을 활용하시면 이 Optimization을 빠른 시간 내에 쉽게 할 수 있다 이거죠~ 헤헤

강의를 시작하기 전에 Terminology(용어) 정리부터 하고 갈께요~

SeB7ANxSsGOm-RRdWJq9_xJWLyYMI--uSwYTo8fSzFI25iRf8UORkAhviUF20T6-QS22RNuMTCaBsN_cO9IisBpK_O8KUAxR28iBRT5TgzNkx6A1Nfk

Local(지역)과 Global(전역)의 차이는 일부 구간을 보는가? 전체 구간을 보는가에 따릅니다.
위의 그래프에는 minimum 이 2개가 있는데 주위보다 값이 작으면 minimum이예요
즉 아래로 볼록한 곳은 모두 Local Minimum 입니다.
Global minimum이란 전체 minimum 중에서도 가장 작은 값을 가지는 minimum을 말합니다.
그럼 전체 구간중에 가장 작은 값은 Local minimum 이기도 하고 Global minimum이기도 하겠죠?
maximum도 minimum과 같은 원리이구요~~
결국 Optimization의 목적은 Global Minimum이나 Global Maximum을 찾아내는 것에 있습니다.

이제부터 여러분은 머그컵 만드는 회사의 싸장님입니다.
회사를 차린지 1주일만에 첫 주문이 들어왔어요~
'커피 프린스' 카페에서 머그컵 1만개를 주문한거예요~ (제가 '커피 프린스' 팬입니다요 ^^)
고객의 요구는 머그컵의 용량은 800cm³ 이상이어야 하고 지름은 5cm보다 크고 12cm 보다는 작아야 됨.
높이는 10cm이상 20cm이하가 될 것. 머그컵 1개당 1만원
대박 기회가 찾아온걸까요?? ^^

H4upkmVb5RHJLhnb6LrziTXjadKwbNu4LaGGK8OS0SehZ8-qRKnPt3Scgk9io-g7CoH9DjR3dB76tDCQ0N172bUNq0TpYoPTIdBZV_lmSyUImWIQqe8

자~ 지금부터 싸장님의 고민이 시작됩니다.
머그컵을 만들 재료를 줄이면 줄일 수록 이윤이 커지기 때문에 가능한 적은 재료를 사용해서
고객이 원하는 머그컵을 만드는 것이 좋겠죠? o(^o^)o

quPR9UoYEq0b-DRlw4ZUpcOces3jJ_Agxy37AzuXFEOqAhQTXOhGxSnmMgvvhCkqSbXWTOUdmHZHmbrA3Xnte-nnzlN1vTGjMMKD3J8qdsMKi5adDOs

지금 우리가 해야 할 것은 머그컵의 재료비(cost)를 minimization 하는 겁니다.
머그컵의 재료비는 밑면과 옆면의 넓이의 합에 비례하겠죠? (점토 1cm² 당 10원)
다시 머그컵의 넓이는 지름과 높이의 함수입니다.
minimize하고자 하는 함수를 Cost Function(가격함수) 또는 Objective Function(목적함수)라고 합니다.

제품의 모양,성능 등을 결정짓는 변수를 설계변수(Design Variables)이라고 해요.
머그컵의 경우는 지름(d, diameter)와 높이(h, height)가 설계변수가 되시겠습니다,
설계변수는 가능한 독립적으로 작게 잡는 것이 좋아요. ^^

우리 싸장님의 경우 제약조건(Constraint)이 있었죠?
‘고은찬’이 요구한 제약조건은 5cm≤d(지름)≤12cm와 10≤h(높이)≤20cm,
그리고 800cm³≤부피(V, volume) 이고 이 Constraints를 반드시 지켜야 합니다. ;;


정리해보면..

aIhK3xvptgh3BCxY2mjBKGCCbF_QMJqeOjFDQLchiUYX1vx5vMeZ4020GwkdwIM3CugCVlCGIGADfJN9QH3KHMcdpW4DdXSLdd2pMfEBR6wNLoTF_gw

아! 한 가지 알아두셔야 할 건 MATLAB에서 제공하는 Optimization solver는
Maximum이 아니라 Minimum을 찾는데 최적화 되어 있다는 거예요..
Maximize 문제는 maximum을 찾고자 하는 함수 전체에 마이너스를 붙이면
간단하게 minimize 문제로 바꿀 수 있습니다. 이해가시죵?

RIjreBh9Sf-WDN-sRxQOptvuythbZxpLhcyrxo8aPIWSxMcf62k0cMwTSwha3EC-zElsFVJLNvoA_FJlgz2NgwJcRCoGdkCedQahoJTwraOlhcvafnY




자~ 문제에 대한 사전 설명이 다 끝났습니다. 드디어 드디어 MATLAB으로 갑니다요 고고싱~ ^^
MATLAB은 최적화 문제를 위해 Optimization Toolbox를 제공하고 있습니다.
MATLAB에서 Optimization Toolbox를 실행시키시려면
command window에서 >>optimtool이라고 입력하시면 됩니다.
(또는 Start -> Toolboxes -> Global Optimization -> Optimization Tool(optimtool)을
차례데로 클릭하셔도 되구요~)

AQ0awNzozOVQg5ALpcoG8MaJ2rw6tHoR6U3hc-dXGUmv8lQmMg86dDAd_YModWZN_JC6_FYlWXNse34Pycm6Q0lFmaB0XlwVSG0HcwiJokU01AvbT-Y

Optimization Tool은 크게 3부분으로 구성되어 있습니다.
1. Problem Setup and Results : Solver Type, Objective function, Constraints등을 설정하고 결과값을 보여줍니다.
2. Options : 세부적인 옵션을 설정할 수 있습니다.
3. Quick Reference : 간단한 도움말이예욤 ^^

이번 시간에 우리가 놀 곳은 왼쪽에 있는 Problem Setup 쪽 입니다~~
어떤 항목들이 있는지 그냥 한번 쭉~ 훑어 보세용

aKRrqQrYlSTd71gzHbTnrjL02cIKqbN_hpDEq80pDTxMs9gFvps0SEZ8nMGW9TCNft99WJ4bM_Kwnx1idGLQ1GvzIUx1MH8fA6Vb0J8rYSyL53fe9A8

자~ 그럼 위에서 이야기했던 머그컵 싸장님의 고민을 진짜 해결해 봅시다.
맨 처음으로 나오는 것이 Solver입니다.Solver의 종류가 많기도 많군요~ ;;
Solver는 해(solution 즉 minimum)을 찾아내는 녀석인데
어떤 알고리즘을 가지고 해를 찾는 지가 제각기 다릅니다.

Solver를 크게 두 부류로 나누면
기울기값(gradiant)을 사용하는 solver (fmincon, fminunc, fseminf, lsqcurvefit 등)와
확률(probablity)에 기반을 둔 solver (GA, Pattern search, simulated anealing 등)로
나눌 수 있으니 참고하세요~
즉 풀고자하는 문제가 미분 불가능하면 GA(Genetic Algorithm: 유전자 알고리즘) 등을 쓰셔야 해요

Problem에 맞는 적절한 Solver를 잘 선택하시면 빠른 시간 내에 효율적으로 해를 찾아 낼 수 있고
Solver를 잘못 선택하시면 solution을 못 찾을 수도 있구요 시간이 굉장히 많이 걸릴 수도 있습니다!!!.

Solver에 굉장히 여러가지 종류가 있습니다만 오늘 우리가 사용할 Solver는 바로바로바로
fmincon Solver입습죠. 헤헷 (각각의 Solver는 이후 강의에서 설명하도록 하겠습니다.)
fmincon은 Constrainted Nonlinear Minimization 문제를 풀 수 있는 녀석입니다.
잘 생각해보세요~ 우리가 풀고자 하는 문제는 constraints도 있구요(지름, 높이, 용량 제한 있음)
Objective Function도 Nonlinear(목적함수 안에 제곱과 변수들끼리의 곱셈이 난무합니다;;)였습니다..

Linear와 Nonlinear를 간단하게 설명드리자면
Linear는 쉽게 말해서 1차식으로만 이루어 져 있는 겁니다. 즉 Ax=b의 꼴로 만들 수 있으면 Linear입니다.
반대로 만약 식 안에 제곱,세제곱, 변수끼리의 곱이 나오면 그~냥~ 무조건 Nonlinear라고 보시면 됩니다.

Objective Function은 function handle(@)로 함수를 통째로 Optimization Tool에 넘겨주면 됩니다.
(function handle은 ‘MATLAB 때려잡기 - Data Type 2부’ 참조하세요)
우선 Objective Function(목적함수)를 만들어 줘야겠죠?


Editor에서 m-file 하나 만들어 주시구요~

WldVmjdqn6B4qv8o73NsBCAPDlBiJurUI2rZbUlwA-g7cU7AISYrXaQlcvkUQRjNnIvOCeJfi69MrFtdOQ0inpPhxMgwyhcxwYEqf1z8i1zavuQ69CI

mugcup.m으로 저장합시다.
Design Variable(설계변수)는 Optimization Tool로 부터 vector로 받아오게 됩니다.
x(1), x(2) 이런 식으로 바로 참조하셔도 되구요~
아니면 여러분이 알아보기 쉬운 변수에 다시 넣어도 됩니다.
어려운건 없죠?? ^^ Objective Function 다 작성하셨으면 @mugcup으로 Optimization Tool에 넘겨주면 되요


다음으로 Constrains 부분!!

BT3HcGnh7uJzQXgTPEgs9g_DzOO9FQAECHIB7Ob7r1ysAXoVNC8hAe0Xrhj9sBxKI6FCXrHcfzHVFacjjfzkmgpi4f60vNTy874DSXOP0oOWpjMyZGY

Constraint는 크게 Linear Constraint와 Nonlinear Constraint로 나눌 수 있습니다.
Lineaer와 Nonlinear의 차이점은 위에서 간단하게 설명했구요..

V5O8ppyiwphaqX-UFToNHTjYCPd9tXmCgRnUSIx0EoYAh01IXwbIam2T7m3saZ792jOZLc31nGtK9KuW3UukR8mHPsL2tZPa3oEBOe716KlmjZ9ZE0I.

예를 들어 제약조건이 5x₁+3x₂-x₃≤2 , 4x₁+2x₃≤0 이라면 Ax≤b 의 matrix 형식으로 나타낼 수 있겠죠?
(만약 식이 5x₁+3x₂≤2+x₃ 와 같이 정리가 되어있지 않을 경우
식을 잘 정리하셔서 5x₁+3x₂-x₃≤2 형태로 바꿔 주시면 됩니다.)
위의 예제는 Linear Inequality:의 A에는 [5 3 -1; 4 0 2]를 입력하면 되구요
b에는 [2 ; 0]을 입력하시면 되겠네용.

Linear Equality는 부등호(≤)가 등호(=)로 바뀌것 빼고는 Linear Inequality와 똑같이
사용하시면 문제 없으십니다.
우리의 머그컵은 Linear Inequality, Linear Equality Constraint가 없으므로 pass~ ^^


T-ld1CUIFCK313JdWKA-0FmKGOjeauXvapv_lxosklNtiETnsAOtyJuikjRQhW0aaVJVTaQdIhdRkJiHQVgGcvVCXsSgo0wr5k4_MmFDgueMYCksHus

Bound는 말 그대로 Design Variable의 범위를 지정해주는 곳입니다.
주의하셔야 할 건 범위가 열여있으면 Inf나 -Inf로( Inf는 무한대(Infinity)를 나타내는 MATLAB 예약어 입니다)
값을 넣어주셔야 한다는 겁니다.
그럼 위의 그림에 나와있는 예제는 Lower에는 [-Inf; -Inf; 3] , Upper에는 [ Inf; 8; Inf] 라고 입력하면 되겠네요~
흄흄... 그럼 그럼 그럼 우리의 머그컵은!!?
넵 잘하셨어요~ Lower에는 [5 10] , Upper에는 [12 20]을 입력하시면 됩니다요.
(constraint 입력하는 곳에 workspace에 있는 변수를 바로 쓸 수도 있어요)

Linear Constraint는 다 알아봤습니다. 다음으로 Nonlinear Constraint 알아 봐야겠죵? ;;
Nonlinear Constraint는 Objective Function처럼 함수로 만들어 주어야 합니다.
(함수가 간단하다면 anonymous function으로 만들어 주셔도 되요 ^^;)

function [c ceq] = FunctionName(x)

함수의 형식은 위와 같구요 반드시 출력변수가 2개이어야 해요(주의)
c 는 5x₁x₂-x₃²-2 ≤0 와 같이 부등식이 들어간 비선형 제약조건 값이구요
ceq는 등식이 들어간 Nonlinear Constraint 값입니다.
5x₁x₂≤2+x₃² 와 같은 경우 5x₁x₂-x₃²-2 ≤0 와 같이 c≤0 형태로 정리해주세요
만약 Nonlinear equality 제약조건이 없는 경우 ceq = [ ]; 로 빈행렬을 돌려 주면 됩니다.

그럼 다시 우리의 머그컵의 경우는??

(이하생략)
생략된 내용은 VIP 게시판에서 확인 가능합니다.
profile