Optimization  

 

수학 (Mathematics) 에서의 최적화 (Optimization) 는, 어떤 제약조건 (constraints) 이 있을 수도 있는 상황에서 함수의 최대치와 최소치 (maxima and minima) 를 찾는 것과 관련된 과목이다. 최적화 문제의 예는 다음과 같다 : 자원들이 확실히 어떤 한계를 넘지 않고, 가능한 한 직면하는 요구사항의 대부분을 만족시키면서, 제조과정 (manufacturing operation) 의 이익을 최대로 하기위한 것이다. 최적화는 물류 (logistics), 설계 (design) 문제등에 실제적으로 많이 응용된다.

컴퓨터과학에서의 최적화는 효율적인 실행속도와 주파수대역폭 (bandwidth) 를 증가시키고 메모리 요구량을 감소시키는 방향으로 어떤 시스템을 개선시키는 과정이다. 그 명칭에도 불구하고, 최적화가 반드시 문제에 대한 최적의 (optimum) 해를 찾는 것을 의미하지는 않는다. 가끔 그것이 불가능할 경우에는 휴리스틱 (Heuristic) 알고리즘이 대신에 사용되어야 한다. .... (Wikipedia : Optimization)

lab

최적화이론과 그 해법은 일찍이 수학의 한 분야로서 유럽과 미국에서 여러 분야의 학자들에 의해 많이 연구돼 왔으며 제2차 세계대전 이후에는 산업 군사 행정 등의 여러 조직에 적극적으로 활용되기 시작하여 생활에 많은 변화를 가져왔다 ....... 사실은 우리 모두가 알게 모르게 최적화의 개념을 인식하고 있으며 그 해법 또한 나름대로 지니고 있다. 예를 들면 어떠한 물건을 구입하려 할 때 우리는 몇 가지 대안 중에서 재정적인 고려와 함께 구입이유, 사용기간, 애프터서비스 사용대상, 구입가격 등의 여러 조건을 비교 검토한 후 결정 내리게 된다. 물론 수학적인 기호나 컴퓨터를 통한 계산은 하지 않고 정형적인 모델은 수립하지 않더라도 그 방법론에 있어서는 최적화기법이 그대로 적용되고 있는 셈이다. ...... 더욱이 우리는 사회생활 주위에서 "최대의 효과" "최소의 비용" "최적의 선택" 등의 단어를 자주 접촉하고 있는 실정이다. 그러나 최적화기법을 체계적인 접근방법으로 이용, 의사결정을 하기는 그리 쉬운 일 이 아니며 또한 그 결정의 질을 평가하기도 무척 어려운 일이다. ...... (최적화 이론 : 한양대 ISOL : 최적화 관련 링크 사이트)

근 (Root) 구하기 와 최적화 (Optimization) 는 둘 다 함수 위의 한 점을 추측하거나 찾는다는 점에서 관련성이 있다. 두 방법의 근본적인 차이점은 다음 그림에서 찾아볼 수 있으며, 근 (root) 구하기는 함수 혹은 함수들의 근들을 구하는 반면 최적화는 최소값 혹은 최대값을 찾는 것이다 .... (Steven Chapra 2000)

근 (root) 과 최적점 (minimum or maximum) 사이의 차이점을 보여주는 단일 (single) 변수의 함수 

term :

최적화 (Optimization)   수학 (Mathematics)   경영과학 (Operation Research)   비결정 완전 (NP-complete)   비결정 난해 (NP-hard)  순회판매원 문제 (Travelling Salesman Problem)   휴리스틱 (Heuristic)   유전알고리즘 (Genetic Algorithm)   조합최적화 (Combinatorial Optimization)   분기한정법 (Branch and bound)

Site :

Yahoo 백과사전 : 최적화

Paper :

조합적 최적화 : 문병로

최적화 : Steven C. Chapra, Raymond P. Canale

연관규칙 기반의 상품검색 데이터베이스 최적화 연구 (A Study on the Product Searching Database Optimization Based on Association Rules) : 박규선, 황현숙, 한국멀티미디어학회, 2004 

유전자 알고리즘과 시뮬레이티드 어닐링을 이용한 활성외곽선 모델의 에너지 최소화 기법 비교 (Comparison of Genetic Algorithm and Simulated Annealing Optimization Technique to Minimize the Energy of Active Contour Model) : 박선영, 김명희, 박주영, 컴퓨터그래픽학회, 1998

Genetic 알고리즘을 이용한 풀 온도제어 시스템의 지식베이스 최적화 (The Optimization of Knowledgebase for Swimming Pool Temperature Control Systems using Genetic Algorithms) : 김성학, 한국정보처리학회, 1994

Particle Swarm Optimization 탐색과정의 가시화를 위한 툴 설계 (Visualization Tool Design for Searching Process of Particle Swam Optimization) : 유명련, 한국멀티미디어학회, 2003

제약식 프로그래밍과 최적화를 이용한 하이브리드 솔버의 구현 (On Implementing a Hybrid Solver from Constraint Programming and Optimization) : 김학진, 한국경영정보학회, 2003 

컴퓨터에서 최적화는 시스템의 효율이 증가되도록 변형시키는 것 의미한다. 시스템 자원의 소모를 줄일 수도 있고 성능을 증가 시킬 수도 있다. 시스템은 단 하나의 컴퓨터일 수도 있고, 여러대가 모인 것 일 수도 있고, 인터넷 같은 전체 네트워크 일 수도 있다. 최적화는 최대실행시간, 메모리 사용, 밴드위스, 다른 자원들을 줄일 수 있게 한다. 그러한 목적들은 상호배제 (서로 무관하게 발생) 일 수 있으며 tradeoff (교환, 균형을 취함) 를 요한다.

경영과학 (Operation Research) 에서, 최적화는 그 값을 최소 또는 최대로 하는 함수의 입력을 결정하는 문제이다. 입력이 가질 수 있는 값을 정함에 있어 제약들이 있을 때가 있는데, 이러한 문제를 constrained optimization 라고 부른다. 컴퓨터 프로그래밍에서, 최적화는 더욱 효율적인 소프트웨어를 만들기 위해 주어진 컴퓨터 구조상의 code 와 컴파일 세팅을 변경하는 것을 보통 의미한다. 다음과 같이 용어 정의를 하기도 한다.

Code optimization 은 가장 효과적이고 효율적인 코드를 의미하며 아카데믹 환경에서 사용된다. performance tuning 과의 혼동을 피하기 위해 code improvement 라고 쓰기도 한다. Performance tuning 은 네트워크 환경의 컴퓨팅과 대규모 소프트웨어 프로젝트가 필요한 크기와 code improvement 를 포함하여 부르는 말이다.

최적화는 컴파일러에 의해 자동화 될 수 있고 프로그래머가 수행하기도 한다. local optimization 에서는 이득 (gains) 은 보통 제한되지만, global optimization 에서는 더 크게 된다. 아마도 가장 강력한 최적화는 최상의 알고리즘을 찾아내는 것일것이다.

최적화로 성능을 향상시키기에만 사용되다 보면 코드를 첨가하여 읽기가 힘들어 진다. 그래서 복잡한 시스템과 프로그램에서는 유지와 디버그가 어려워진다. 예를들면 컴파일러 최적화는 버그 때문에 예상치 않은 일이 발생할 수 있다. 따라서 최적화 또는 performance tuning 은 개발의 마지막 단계에서 수행된다. 달리 말하면, 개발도중의 시스템이나 프로그램은 성능이 안 좋을 수 있다.

시스템 최적화 : 시스템의 구조 설계는 전적으로 그 성능에 영향을 줄 수 있다. Load balancing 은 많은 수의 서버에 로드를 전파한다. 소위 layer 4 router 를 사용해서 load balancing 은 투명하게 (예를들면 사용자가 알지 못하게) 행해진다. Caching 은 복사 (duplicate) 를 피하기 위해 계산의 중간 산물을 저장한다. 전체 시스템을 최적화 하는 것은 보통 사람이 하게 되는데, 그 이유는 자동 optimizer 가 하기에는 시스템이 너무 복잡하기 때문이다. Grid computing 이나 distributed computing 은 많이 사용하는 컴퓨터로부터 휴식중인 컴퓨터로 작업을 이동시킴으로써 전체 시스템을 최적화 하는 것을 목적으로 한다.

알고리즘과 자료구조 : 알고리즘의 선택은 설계의 어떤 다른 요소보다도 효율성에 영향을 미친다. 보통, 단순한 알고리즘이 소량의 데이터에 더 적당한 반면에, 복잡한 알고리즘과 자료구조는 많은 자료를 가진 경우에 좋은 성능을 보인다. 소량의 데이터의 경우 더 복잡한 알고리즘의 초기에는 더 좋은 알고리즘의 장점을 뛰어넘을 수 있다. 그러나....... 보통 프로그램이 메모리를 더 많이 사용하면 더 빨리 작동한다. filtering program을 취하면 각각의 line을 읽고, filter 하고, 동시에 출력한다. 메모리가 한 line 만을 읽는다면 성능은 떨어진다. 성능을 향상시키기 위해 전체 파일을 읽고 filtered 결과를 출력한다. 이것은 성능을 극적으로 향상시키지만 메모리 사용은 크게 늘어난다. 결과를 Caching 하는 것이 메모리 사용량이 많을 때 효과적이다.

Manual optimization : 프로그래머나 시스템 관리자가 직접 code 를 바꿔서 시스템 성능을 향상시키는 것이다. 더 효율적인 방법이긴 하지만 automated optimization 에 비해 훨씬 비용이 많이든다. 이러한 code optimization 은 프로그램에서 사용되는 알고리즘에 대해 다시 생각하는 것으로 출발한다. 흔히 특별한 프로그램을 위해서 특별한 알고리즘이 만들어져서 더 좋은 성능을 보이게 된다. 예를들면 큰 list 데이터를 정렬시키기 위해 quick sort routine을 사용하여 효율적으로 만드는 것과 같다. 최적의 알고리즘이 선택되면 code optimization을 시작하는데, loop 들이 unrolled (펴다, 전개하다) 되며, 데이터형은 가능하면 작은 정수형을 사용하고, hash tables 가 linear vector 를 대체하는 등등 ....... 성능의 저하는 알고리즘이나 자료구조보다 프로그램에서 사용되는 언어 때문일 수도 있다. 가끔 프로그램의 핵심 부분이 다른 더 빠른 프로그램 언어로 다시 쓰여진다. 예를들면 속도 향상을 위해 C 로 쓰여진 모듈을 가진 Python 같은 high-level 언어는 흔하다. 또한 assembly 로 만든 모듈을 가진 C 프로그램도 흔하다 ........ Manual optimization 은 읽기가 어렵다는 부작용이 있다. 그래서 code optimization 은 주의깊게 해야되며 미래의 개발시 영향을 고려해야 한다.

Automated optimization : 자동으로 최적화를 하는 프로그램을 optimizer 라고 부른다. 대부분의 optimizer 는 컴파일러 속에 내장된어 컴파일동안에 작동한다. 특정 프로세서를 위해 optimizer 가 code 생성할 수도 있다. 요즈음의 자동 최적화는 거의 컴파일러 최적화에 제한되어 있다. 그것을 컴파일러가 만드는 코드의 효율을 증진시키기 위해 사용된다. 이 기술로 인해 프로그래머는 쉬운 방법으로 코드를 작성할 수 있으며, 그들의 의도를 명확하게 표현한다. ..... (Wikipedia : Optimization (computer-science))