본문 바로가기

2016/0912

[최적화/전역 최적화] Tabu Search Tabu search는 simulated annealing, genetic algorithm 등과 같이 최적화 문제의 형태에 상관없이 주어진 최적화 문제를 풀기 위한 메타휴리스틱 (metaheuristic) 알고리즘이다. 기존의 simulated annealing, genetic algorithm과 같은 최적화 알고리즘들은 기본적으로 neighbor search를 기반으로 동작하기 때문에 current solution이 개선되는 방향으로만 진행하려는 성질이 있다. 이러한 성질로 인해 simulated annealing 및 genetic algorithm은 빈번하게 [그림 1]과 같은 지역 최적점 (local optimum)에 수렴한다. Tabu search는 빈번하게 지역 최적점에 수렴하는 문제를 해결하.. 2016. 9. 28.
[수리적 최적화] 유전 알고리즘 (Genetic Algorithm)과 전역 최적화 1. 유전 알고리즘 (Genetic Algorithm) 소개 유전 알고리즘은 생물체가 환경에 적응하면서 진화해가는 모습을 모방하여 최적해를 찾아내는 최적화 방법이다. 유전 알고리즘은 이론적으로 전역 최적점을 찾을 수 있으며, 수학적으로 명확하게 정의되지 않은 문제에도 적용할 수 있기 때문에 다양한 응용에서 매우 활발히 이용되고 있다. 일반적으로 유전 알고리즘에 대해 알고리즘이라는 표현을 이용하지만, 유전 알고리즘은 특정한 문제를 풀기 위한 알고리즘이라기 보다는 최적화 문제를 풀기 위한 일반적인 방법론에 가깝다. 즉, 모든 문제에 적용 가능한 하나의 알고리즘이나 소스 코드가 있는 것이 아니기 때문에 유전 알고리즘의 원리를 이해하고, 이를 자신이 원하는 문제에 적용할 수 있도록 설계하는 것이 중요하다. 유전.. 2016. 9. 16.
[C#] - 클래스 정의와 상속 1. 클래스 정의 C#에서는 class 키워드를 이용하여 클래스를 정의할 수 있다. 아래의 [코드 1]은 C#에서 Parent 클래스를 정의한 것이다. 1234567891011121314151617181920212223242526272829303132namespace ex{ class Parent { private string name; public Parent(string name) { this.name = name; Console.WriteLine("constructor - parent"); } ~Parent() { Console.WriteLine("destructor - parent"); } public void PrintName() { Console.WriteLine(name); } } class.. 2016. 9. 15.
[C#] - 메소드 (Method) 1. Call by value와 Call by reference 프로그래밍을 배우다 보면 call by value와 call by reference라는 개념을 한 번쯤은 접해봤을 것이다. 간단히 설명하면, call by value는 변수의 값을 복사해서 전달하는 것이고, call by reference는 메모리상의 주소와 같이 변수에 직접 접근할 수 있는 정보를 전달하는 것이다. 예를 들어, A가 어떠한 문서를 필요로 하는 상황에서 해당 문서를 복사해서 복사본을 전달하는 것은 call by value이고, 해당 문서의 원본 자체를 전달하는 것은 call by reference이다. 기본적으로 int, double과 같은 원시 자료형 (primitive data type)으로 선언된 매개변수에 대해서 C#.. 2016. 9. 15.
[JavaScript] - Web Notification API와 알림 기능 1. 알림 (Notification) 기능 안드로이드나 iOS와 같은 모바일 환경에서는 notification이라는 기능을 이용하여 스마트폰 이용자에게 새로운 정보, 어떠한 작업의 완료 등과 같은 정보를 알릴 수 있다 [그림 1]. [그림 1] 안드로이드와 iOS의 알림 (notification) 기능 그동안 모바일 환경에서 매우 유용하게 이용되고 있는 notification 기능을 데스크톱 브라우저 환경에서 이용하기 위해서는 자바스크립트를 이용하여 직접 notification 기능을 구현하는 수 밖에 없었다. 그러나, 최근에 크롬, 파이어폭스, 사파리에 Web Notification API라는 것이 추가되면서 자바스크립트를 이용하여 간편하게 notification 기능을 구현할 수 있게 되었다. 2. .. 2016. 9. 13.
[JavaScript] - 네임스페이스 (Namespace) 1. 네임스페이스 네임스페이스는 이름이 존재하는 공간과 같다. 우리는 이름이 C로 같은 두 사람을 구분할 때, A 지역에 거주하는 C와 B 지역에 거주하는 C로 구분하기도 한다. 이러한 구분에서 이름이 C로 같은 두 사람이 A와 B라는 서로 다른 지역 (공간)에 존재했기 때문에 우리는 두 사람을 식별할 수 있었다. 복잡한 프로그램을 개발하거나, 협업을 하다보면 전역 범위에 위의 예시와 같이 이름이 같은 변수, 함수, 객체 등을 정의하는 경우가 발생한다. 네임스페이스는 이러한 경우에 발생할 수 있는 충돌을 방지하기 위해 이름이 존재하는 공간을 정의하는 기능을 제공한다. 네임스페이스 기능을 제공하는 대표적인 언어로는 C++와 자바가 있다. C++에서는 아예 namespace라는 키워드를 이용하여 변수, 함수.. 2016. 9. 11.
Java 환경에서 트위터 API를 이용한 SNS 분석 1. 트위터 어플리케이션 생성 트위터 API를 이용하기 위해서는 트위터 가입 및 트위터 어플리케이션 생성이 필요하다. 트위터 가입은 특별한 사항이 없으므로 생략하고, 트위터 어플리케이션 생성에 대해 설명한다. 1) 트위터 어플리케이션을 생성하기 위해 https://apps.twitter.com/에 접속하여 트위터 계정으로 로그인한다. 그 다음, 우측에 있는 Create New App 버튼을 클릭한다 [그릠 1]. [그림 1] 트위터 어플리케이션 생성 1 2) 페이지에 나타난 Name, Description, Website 항목을 입력한다 [그림 2]. 테스트용으로 생성할 경우에는 Website 항목에 임의의 URL을 입력해도 된다. [그림 2] 트위터 어플리케이션 생성 2 3) 어플리케이션 생성 후 나타.. 2016. 9. 9.
[JavaScript] - 자바스크립트와 객체지향 프로그래밍 1. 자바스크립트와 객체지향 프로그래밍 자바스크립트(JavaScript)는 이름에서도 알 수 있듯이 스크립트 프로그래밍 언어이다. 그러나 정확히 말해서 자바스크립트는 객체 기반의 스크립트 프로그래밍 언어라고 할 수 있다. 자바스크립트를 이용하여 웹 어플리케이션을 개발하고자 프로그래밍할 때 많이 사용하는 DOM 객체, XMLHttpRequest 객체 등 자바스크립트에는 많은 객체가 존재한다. [그림 1] 자바스크립트 대부분의 자바스크립트 코드는 브라우저 환경에서 실행된다. 불과 몇 년 전에는 브라우저에 탑재된 자바스크립트 엔진의 성능이 지금보다 매우 떨어졌었기 때문에 자바스크립트 코드가 많은 웹 페이지는 잘못 만들어진 페이지라고 말할 수 있었다. 그러나 지금은 웹 OS라는 말이 나올 정도로 브라우저가 어플.. 2016. 9. 4.
[JavaScript] - 전역 변수의 문제점과 해결 방법 1. 전역 변수의 문제점 자바스크립트는 몇가지 뛰어난 강점을 갖고 있지만, 사실 프로그래밍 언어의 관점에서 보면 잘 디자인된 언어는 아니다. 언어의 잘못된 디자인으로 인해 발생하는 문제 중 대표적인 예시가 전역 변수에 대한 것이다. 자바스크립트에서는 아래의 [코드 1]과 같이 전역 변수를 선언하고, 함수 내부에서 전역 변수를 이용하거나 그와 이름이 똑같은 지역 변수를 선언할 수 있다. 12345function Person(fullName, gender, age) { this.fullName = fullName; this.gender = gender; this.age = age;}Colored by Color Scriptercs[코드 1] 전역 변수로 인한 문제가 발생하는 코드 [코드 1]의 실행 결과는 .. 2016. 9. 4.
[JavaScript] - 코드 블로킹 (Code Blocking) 방지 1. 코드 블로킹 (Cdoe blocking) 코드 블로킹은 어떠한 코드가 실행됨에 따라 해당 코드의 실행 때문에 다른 코드를 실행할 수 없는 현상을 말한다. 아래와 같이 자바스크립트로 작성된 [코드 1]이 있다. 1234567891011121314151617181920212223242526272829 start function func() { document.getElementById('result').innerText = test1(); document.body.style.backgroundColor = '#008299'; } function test1() { var num = 0; for (var i = 0; i 2016. 9. 4.
[머신 러닝] - 은닉 마르코프 모델 (Hidden Markov Model, HMM) Markov model은 어떠한 날씨, 주식가격 등과 같은 어떠한 현상의 변화를 확률 모델로 표현한 것이다. Hidden Markov model (HMM)은 이러한 Markov model에 은닉된 state와 직접적으로 확인 가능한 observation을 추가하여 확장한 것이다. HMM은 observation을 이용하여 간접적으로 은닉된 state를 추론하기 위한 문제를 풀기 위해 사용된다. 아래의 [그림 1]은 은닉된 state와 그에 따른 observation의 개념을 나타낸다. HMM을 이용해 우리가 풀고자 하는 문제는 관측 가능한 것은 오직 $y_t$뿐이며, $y_t$는 $q_t$에 종속적으로 발생한다고 할 때, $y_t$의 sequence를 통해 $q_t$의 sequence를 추론하는 것이다. .. 2016. 9. 2.
라그랑주 승수법 (Lagrange Multiplier Method) 라그랑주 승수법 (Lagrange multiplier method)은 프랑스의 수학자 조세프루이 라그랑주 (Joseph-Louis Lagrange)가 제약 조건이 있는 최적화 문제를 풀기 위해 고안한 방법이다. 라그랑주 승수법은 어떠한 문제의 최적점을 찾는 것이 아니라, 최적점이 되기 위한 조건을 찾는 방법이다. 즉, 최적해의 필요조건을 찾는 방법이다. 1. 기하학적 해석 라그랑주 승수법의 기본 가정은 "제약 조건 $g$를 만족하는 $f$의 최솟값 또는 최댓값은 $f$와 $g$가 접하는 지점에 존재할 수도 있다."는 것이다. 아래의 [그림 1]은 제약 조건 $g(x, y) = c$를 만족하는 $f(x, y)$의 최댓값을 구하는 문제를 나타낸다. 만약, $f(x, y)$의 최댓값을 $k$라고 하면, $k$.. 2016. 9. 1.