전체 글 18

다중 목표 최적화 - 진화 알고리즘 (2)

다중 목표 진화 알고리즘(Multi-Objective Evolutionary Algorithm, MOEA)는 진화 알고리즘을 통해 다중 목표 최적화 문제를 푸는 기법들을 칭한다. 다중 목표 최적화 문제는 목표가 여러 개 존재하는 최적화 문제로, 지난 글에서는 단일목표 최적화 문제로 변환시켜서 푸는 가중 합과, 입실론-조건 기법들을 소개했다면, 이번 글에서는 진화 알고리즘을 통해 다중목표 최적화 문제를 푸는 기법을 소개할 것이다. 진화 알고리즘은 모집단(population)을 반복적으로 변이시키고 선택하여 문제 목표에 가까운 모집단을 반복적으로 얻는 기법이다. 진화생물학에서 생물이 진화될수록 주어진 환경에 적합한 개체가 된다는 아이디어가 적용된 알고리즘으로, 이론적으로 얼마나 잘 작동하는 지에 대해서는 별..

다중 목표 최적화 문제 - 차원의 저주에 걸린 고전 기법들 (1)

다중목표 최적화 문제(multiobjective optimization problem)은 목표가 2개 이상인 최적화 문제이다. 비용을 최소화하거나 성능을 최대화시키는 등의 일반적인 단일 목표 최적화 문제들은 random search나 gradient descent와 같은 기법으로 탐색이 가능한 반면, "비용은 최소화하고 성능을 최대로 만들고 싶다"는 여러 개의 목표를 동시에 달성하고 싶은 상황에 적용하기 좋은 알고리즘이다. 예를 들어, 대부분의 공학 문제는 비용을 최소화히고, 성능을 최대화하는 것을 목표로 하는 다중목표 최적화 문제에 해당한다. 물론,효율 = 성능 / 비용과 같은 새로운 단일목표를 도입하여 최적화하기도 한다. 하지만, 첫째로 이런 단일목표가 과연 좋은 단일목표인지도 알 수 없고, 둘째로 ..

내가 틀릴 수도 있습니다

내가 틀릴 수도 있습니다라는 한마디를 남기고. 거대한 애도의 물결이 스웨덴을 휩쓸었다. 비욘 나티코 린데블라드. 수많은 스웨덴인들을 불안에서 끌어내어 평화와 고요로 이끌었던 그는 2018년 루게릭병에 진단받은 후에도 유쾌하고 따뜻한 지혜를 전했다. 『내가 틀릴 수도 있습니다』는 20대에 눈부신 사회적 성공을 거뒀지만 모든 것을 버리고 숲속으로 17년간 수행을 떠났던 저자의 여정과 깨달음, 그리고 마지막을 담은 책으로 세대를 불문하고 독자들에게 삶의 의미와 희망을 되찾게 하며 국내저자비욘 나티코 린데블라드출판다산초당출판일2024.01.08 여러가지 일들을 걱정하면서 나는 몇 주동안 암흑기를 보냈던 것 같다. 고민을 지인한테 털어놓으니까, 불교에서 이야기하는 '스스로를 분리해보기'를 한번 해보기를 권유했다...

작품감상 2024.11.07

Docker 기반 개발 환경 설정

PC의 로컬 환경을 개발 환경으로 사용할 때 문제가 종종 발생할 때가 있다. 예를 들어, 같은 로컬 환경에서 여러 프로젝트를 개발한다고 할 때,프로젝트 1: 라이브러리 버전 V1을 사용프로젝트 2: 라이브러리 버전 V2를 사용이런 상황이 발생하면, 둘 중에 하나만 작동하는 상황이 되어버린다. 그래서 필자는 개발 환경을 Docker로 분리하는 것을 선호하는데, 이 방법에 대해 구체적으로 써볼까 한다. 먼저, 다음 명령으로 개발을 할 장치(또는 원격 서버)에서 Docker 컨테이너를 띄운다.docker run -itd --name dev ubuntu 예제에서는 가장 기본적인 Ubuntu 시스템의 이미지를 사용하였지만, 설치 과정이 긴 프로그램이 준비되어야하는 경우, 해당하는 Docker 이미지를 만들어 놓는..

컴퓨터 과학 2024.10.31

[네트워크] OSI 계층

OSI (Open Systems Interconnection)은 서로 다른 네트워크 장비의 통신에 대한 설계도이다. 처음에 네트워크 과목을 수강할 때, 왜 이런게 처음 등장하고, 인터뷰에서도 왜 물어보는지 궁금했던 개념이다. 왜냐하면, 7계층이라고 하지만 각 계층간의 역할 경계가 희미하기도 하고, 네트워크를 수강할 때 TCP 등의 프로토콜에 많이 집중하게 되는데, 이게 7계층에 완전히 들어맞지도 않고, 7계층을 모두 깊게 다루지는 않는다고 느꼈기 때문이다.  이에 대한 내 나름의 답으로 생각하는 것은, '표준화'의 장점이다: 멀리 떨어져 있는 두 PC 간의 통신은 꽤 복잡한 스택으로 구현되어있다. OSI 7계층은 이런 네트워크 구현의 틀을 잡아주는 표준으로, 네트워크를 구현하거나 디버깅할 때에 편리함을 ..

쉘의 명령에서 내부적으로 일어나는 일

쉘에서 ls 명령을 입력하면 해당 위치의 파일 목록이 주루륵 출력되고, 다음 명령을 기다리는 상태로 다시 돌아간다. 다음은 현재 경로에 존재하는 모든 *.so 파일들을 출력하는 ls -l *.so 명령을 입력했을 때의 모습이다. 내부적으로 쉘은 어떻게 동작하는 것일까?파싱 (Parsing)쉘에서 받은 문자열 입력을 토큰 단위로 쪼갠다. 예를 들어, "ls -l *.so" 명령은 "ls", "-l", "*.so"로 쪼개져서 executor로 전달된다. 예시에 든 것처럼 공백을 단위로 쪼개는 것이 파서의 전부는 아니다. 쉘은 프로그래밍 언어와 같은 다양한 문법을 가지기 때문이다. 예를 들면 다음과 같다:여러 명령의 순차적 실행: {명령 1}; {명령 2}명령을 백그라운드에서 실행: {명령} &명령의 결과를 ..

[OS] 프로세스 간 통신 방법 (Interprocess Communication, IPC)

프로세스는 실행 중인 프로그램을 의미하고, 운영체제는 여러 프로세스를 운영하는 방식(스케줄링, 외부 입출력 장치와 연결 등)을 제공한다. 하나의 프로세스 내부적으로 작업이 끝나는 경우도 있지만, 실제로는 여러 프로세스가 상호작용하는 일이 많이 일어난다. 편의상 서로 다른 프로세스들을 P1, P2, ...로 나타내었다.웹 서버: 웹 서버(P1)가 클라이언트(P2)의 요청을 받아 처리한 후 클라이언트(P2)에게 결과물을 전송한다.분산 파일 시스템: 여러 서버(P1, P2, P3, ...)가 네트워크를 통해 하나의 파일 시스템을 공유한다.자동차 제어 시스템: 자동차의 다양한 센서(P1, P2, P3, ...)와 제어 장치(Q1, Q2, Q3, ...)들이 데이터를 주고받아 차량을 제어한다.하지만, 프로세스는 ..

[OS] 프로세스와 스레드의 차이

프로세스 Recap:프로세스는 프로그램의 실행을 의미하는 아주 기본적인 단위이다. 운영체제는 여러 프로세스를 독립적으로 운영하기 위해서 각 프로세스마다 다음의 정보가 존재한다. 이런 정보들은 프로세스 제어 블록(Process Control Block, PCB)이라는 단위로 운영체제에서 관리된다.메모리: 해당 프로그램이 읽기/쓰기를 하는 영역 (정확히는, 가상 메모리가 하드웨어 메모리에서 어떤 부분을 쓰는 지에 대한 정보)코드 세그먼트: 프로그램의 코드로부터 만들어진 명령의 나열데이터 세그먼트: 전역변수 등의 초기값들스택: 함수 실행 정보(호출 규약 참조)와 지역변수힙: 동적(malloc, ...)으로 할당된 공간I/O 상태: 프로세스에 할당된 I/O 장치들의 상태File Descriptor각 파일의 현재..