반응형

Computational Intelligence/Evolutionary Computation 3

배낭문제 (Knapsack problem)를 유전자 알고리즘 (Genetic algorithm)으로 풀기

배낭문제는 한정된 배낭속에 최대한 값어치 나가게 물건을 담는 경우를 찾아내는 문제이다.여기서 기술할 문제는 총 무게가 한정되어있을때 얼마나 비싼 값어치를 담아낼수 있느냐의 문제를 해결한다.사용할 알고리즘은 유전자 알고리즘으로, 교차와 돌연변이를 이용하였다. 배낭문제에 대한 자세한 설명은 위키백과 참조... 배낭문제 (위키백과) 아래는 참고용 베타 소스코드. Mac 10.8.5에서 Xcode Version 5.0.1로 작성한 소스이다.윈도우에서도 실행은 안해봤지만 기본적으로 C언어를 이용하였으니 크게 문제가 없을듯...적당히 프로그래밍 한거라서, 여기저기 오류가 있을수도 있고 수정이 필요할듯 하지만 값은 확인가능 함. 최대허용중량이 1000 일때의 계산결과는 아래와 같더라. Weight 960 Best f..

Genetic Algorithm

머리 정리 좀 하자.. 유전적 알고리즘 : 어떤 문제에 관한 최적해를 찾기 위한 일련의 수법, 복수의 해를 유전적으로 변화 시키면서 더 좋은해를 구하는 방법. 코딩 : 유전자 알고리즘에서 계산을 하기 위해 룰을 결정해서 유전자를 결정하는 것을 코딩이라 한다. 일차방정식 y= ax+b를 풀위해 x에 대한 y의 값이 최적이 되기위해 a,b를 조절하는 것. 여기서 a,b는 표현형으로 a=7, b=10 일때 a=0111 ,b=1010 이라고 표현한다. GA의 계산순서로는 아래와 같이 나타낼수 있다. ① 초기 모집단 생성 → 해의 집단 (개체군), 일반적으로 난수를 이용해서 생성되나, 다양성이 있는 패턴으로 시도하는 것이 중요함. ② 평가 → GA가 종료되기위한 조건으로 일정 조건을 만족시키면 종료된다. 평가항목..

0~1까지의 난수의 생성

include double random_number(){return ((double)(rand()%RAND_MAX)/(double)RAND_MAX);// return (double)rand()/(double)RAND_MAX 을 해도 같은 결과가 나옴.} rand() : 0에서 RAND_MAX까지의 자연수를 랜덤하게 불러낸다. stdlib.h를 include로 불러낼 필요가 있음.RAND_MAX: Xcode에서 불러내본 결과 2147483647이 나왔다. int로 선언될 수 있는 최대값인데 시스템 마다 다를수도? ・srand(time(NULL)); //난수의 초기화난수의 생성이란 컴퓨터에 있는 난수표를 불러내는 것이기 때문에 난수표를 매번 다른것을 불러내지 않으면 고정된 값이 나올수가 있다. 따라서 현재 ..

반응형