모바일 오유 바로가기
http://m.todayhumor.co.kr
분류 게시판
베스트
  • 베스트오브베스트
  • 베스트
  • 오늘의베스트
  • 유머
  • 유머자료
  • 유머글
  • 이야기
  • 자유
  • 고민
  • 연애
  • 결혼생활
  • 좋은글
  • 자랑
  • 공포
  • 멘붕
  • 사이다
  • 군대
  • 밀리터리
  • 미스터리
  • 술한잔
  • 오늘있잖아요
  • 투표인증
  • 새해
  • 이슈
  • 시사
  • 시사아카이브
  • 사회면
  • 사건사고
  • 생활
  • 패션
  • 패션착샷
  • 아동패션착샷
  • 뷰티
  • 인테리어
  • DIY
  • 요리
  • 커피&차
  • 육아
  • 법률
  • 동물
  • 지식
  • 취업정보
  • 식물
  • 다이어트
  • 의료
  • 영어
  • 맛집
  • 추천사이트
  • 해외직구
  • 취미
  • 사진
  • 사진강좌
  • 카메라
  • 만화
  • 애니메이션
  • 포니
  • 자전거
  • 자동차
  • 여행
  • 바이크
  • 민물낚시
  • 바다낚시
  • 장난감
  • 그림판
  • 학술
  • 경제
  • 역사
  • 예술
  • 과학
  • 철학
  • 심리학
  • 방송연예
  • 연예
  • 음악
  • 음악찾기
  • 악기
  • 음향기기
  • 영화
  • 다큐멘터리
  • 국내드라마
  • 해외드라마
  • 예능
  • 팟케스트
  • 방송프로그램
  • 무한도전
  • 더지니어스
  • 개그콘서트
  • 런닝맨
  • 나가수
  • 디지털
  • 컴퓨터
  • 프로그래머
  • IT
  • 안티바이러스
  • 애플
  • 안드로이드
  • 스마트폰
  • 윈도우폰
  • 심비안
  • 스포츠
  • 스포츠
  • 축구
  • 야구
  • 농구
  • 바둑
  • 야구팀
  • 삼성
  • 두산
  • NC
  • 넥센
  • 한화
  • SK
  • 기아
  • 롯데
  • LG
  • KT
  • 메이저리그
  • 일본프로야구리그
  • 게임1
  • 플래시게임
  • 게임토론방
  • 엑스박스
  • 플레이스테이션
  • 닌텐도
  • 모바일게임
  • 게임2
  • 던전앤파이터
  • 마비노기
  • 마비노기영웅전
  • 하스스톤
  • 히어로즈오브더스톰
  • gta5
  • 디아블로
  • 디아블로2
  • 피파온라인2
  • 피파온라인3
  • 워크래프트
  • 월드오브워크래프트
  • 밀리언아서
  • 월드오브탱크
  • 블레이드앤소울
  • 검은사막
  • 스타크래프트
  • 스타크래프트2
  • 베틀필드3
  • 마인크래프트
  • 데이즈
  • 문명
  • 서든어택
  • 테라
  • 아이온
  • 심시티5
  • 프리스타일풋볼
  • 스페셜포스
  • 사이퍼즈
  • 도타2
  • 메이플스토리1
  • 메이플스토리2
  • 오버워치
  • 오버워치그룹모집
  • 포켓몬고
  • 파이널판타지14
  • 배틀그라운드
  • 기타
  • 종교
  • 단어장
  • 자료창고
  • 운영
  • 공지사항
  • 오유운영
  • 게시판신청
  • 보류
  • 임시게시판
  • 메르스
  • 세월호
  • 원전사고
  • 2016리오올림픽
  • 2018평창올림픽
  • 코로나19
  • 2020도쿄올림픽
  • 게시판찾기
  • 오유인페이지
    개인차단 상태
    キャスター님의
    개인페이지입니다
    가입 : 15-06-04
    방문 : 912회
    닉네임변경 이력
    회원차단
    회원차단해제
    게시물ID : science_58147
    작성자 : 佐倉杏子
    추천 : 1
    조회수 : 463
    IP : 143.248.***.141
    댓글 : 3개
    등록시간 : 2016/04/03 00:39:43
    http://todayhumor.com/?science_58147 모바일
    알고리즘에 진화의 아이디어를 접목시키기 - 유전 알고리즘
    진화론 이야기가 나온 김에 심심해서 예에에에전에 짠 유전 알고리즘 코드를 예토전생 시켜서 소개해봅니다.
    별 생각이 없어서 (사실은 배고파서) 다소 말주변이 없어 보이는 점 양해 부탁드립니다.

    + 스압 주의.


    인간의 지능은 다른 동물들보다 높다는 걸 잘 알고계실 겁니다. 그렇다면 인간은 어떻게 이런 높은 지능을 가지게 되었나라는 의문을 가질 만합니다.
    당연히 누가 인위적으로 그렇게 만들어준 건 아니고(이를 진지하게 믿는 사람이 있지만 이 글에선 넘어가도록 합시다) 진화를 해서 그렇죠.

    유전 알고리즘은 바로 이 진화의 개념을 알고리즘으로 구현한 것입니다.

    함수 f(x, y, z, ...)이 있습니다. 우리가 원하는 건 f의 최댓값인데, 문제는 함수가 너무 복잡한 나머지 f의 최댓값은 물론 f가 최대가 되도록 하는 x, y, z, ...를 적당한 수학적 계산을 통해서는 도저히 못 구하겠다는 거죠. 어떻게 할까요? 유전 알고리즘은 다음과 같은 방법으로 답을 찾아 나갑니다.

    0. x, y, z, ...를 유전자로 하는 인공 생명체를 생각합니다.

    1. 태초에 적당한 유전자(대충 랜덤하게 줬습니다)를 가진 생명체들이 있었습니다.
    2. 각 생명체의 유전자에 대해 f의 값을 계산해서 높은 순서대로 줄을 세웁니다.
    3. 'f 값이 높다'를 '주변 환경에 잘 적응한다'로 정의하고, 주변 환경에 잘 적응하는 상위 몇 마리만 남기고 죽입니다(!)
    4. 살아남은 생명체끼리 교배시킵니다. 이때, (생식세포 감수분열 할 때 처럼) 부모 유전자 사이에 교차를 시켜서 자식의 유전자를 만듭니다.
        4-1. 필요하다면 돌연변이도 생성합니다.
    5. 부모 + 자식으로 생긴 새로운 집단으로 다시 2로 돌아갑니다. 만족할 만한 결과가 나올 때 까지 반복합니다.


    예시 하나 들어볼게요.

    a1, a2, ... , a6는 1부터 5까지의 정수값을 가질 수 있다. a1 + (a2 - a3) * (a4 % a5) - a6의 값을 최대로 하는 a1, a2, ... , a6값을 구하시오.
    (여기서 %는 나머지 연산입니다. a4 % a5 는 a4를 a5로 나눈 나머지.)

    0. 인공 생명체를 생각합시다. 이 인공 생명체는 1부터 5까지의 정수값 6개를 유전자로 가집니다.

    1. 적당히 생명체를 만듭시다.

    Generation 0 : -0.875
    515515 (0)
    355432 (1)
    235414 (-2)
    442221 (3)
    425454 (-12)
    331332 (1)
    444545 (-1)
    332525 (-1)
    545225 (0)
    333555 (-2)
    442235 (3)
    131222 (-1)
    145412 (-1)
    323142 (0)
    321412 (1)
    144154 (-3)

    프로그램을 실행시켜서 나온 제 0 세대입니다. 생명체는 총 16마리고, 각 생명체는 6자리 정수 배열을 가집니다.
    일단은 모든 유전자를 랜덤으로 주었습니다.
    뒤쪽 괄호 안 숫자는 우리가 최대로 만들고 싶은 바로 그 함수의 값입니다. 제일 위 세대 표시 오른쪽은 모든 개체들의 평균 함수 값입니다.

    보면 알겠지만, -12인 것도 있고 0인 것도 있죠. 총체적 난국입니다.
    이제부터 진화를 시작하겠습니다.

    2. 줄을 세웁니다.

    Generation 0 : -0.875
    442221 (3)
    442235 (3)
    355432 (1)
    331332 (1)
    321412 (1)
    515515 (0)
    545225 (0)
    323142 (0)
    444545 (-1)
    332525 (-1)
    131222 (-1)
    145412 (-1)
    235414 (-2)
    333555 (-2)
    144154 (-3)
    425454 (-12)

    줄을 세워봤습니다. -12가 좀 많이 독보적이군요?

    3. 몇 마리만 남깁니다.

    Generation 0 : -0.875
    442221 (3)
    442235 (3)
    355432 (1)
    331332 (1)
    321412 (1)
    515515 (0)

    프로그램 상에서는 6마리만 남기도록 했습니다.

    4. 남은 개체들을 교배시킵니다.

    여기서 교배라는 건, 두 유전자를 섞어서 새 유전자를 만드는 겁니다.
    421353과 511551를 선택했다고 가정합시다.

    부모 1 : 421353
    부모 2 : 511551
    자식   : ******

    여기서 자식의 각 유전자는 양쪽 부모 중 한 쪽에서 물려받게 됩니다. 어느 쪽에서 물려받는지는 완전히 랜덤입니다. 가능한 한 경우는 다음과 같습니다.

    부모 1 : 421353
    부모 2 : 511551
    자식   : 411553

    빨간색은 부모 1, 파란색은 부모 2에게서 물려받았습니다.

    4-1. 필요하다면 돌연변이도 생성합니다.

    돌연변이도 진화의 중요한 원동력입니다. 일정 확률로 돌연변이를 만들어 줍시다.

    부모 1 : 421353
    부모 2 : 511551
    자식   : 412553

    3번째 1을 2로 바꾸었습니다.

    5. 새 집단을 가지고 2로 돌아갑니다.

    일단 제 1 세대를 보시죠.

    Generation 1 : 1.062
    442221 (3)
    442235 (3)
    355432 (1)
    331332 (1)
    321412 (1)
    515515 (0)
    442235 (3)
    321412 (1)
    315515 (-2)
    355421 (2)
    445515 (-1)
    442512 (2)
    515535 (-8)
    542235 (4)
    442232 (6)
    321412 (1)

    저번보다 평균 함숫값이 증가했습니다. 계속 진화시킵니다.

    Generation 2 : 3.688
    442232 (6)
    542235 (4)
    442221 (3)
    442235 (3)
    442235 (3)
    355421 (2)
    355422 (1)
    352235 (4)
    442235 (3)
    542232 (7)
    442235 (3)
    442221 (3)
    442235 (3)
    442232 (6)
    452235 (5)
    442235 (3)

    Generation 3 : 5.312
    542232 (7)
    442232 (6)
    442232 (6)
    452235 (5)
    542235 (4)
    352235 (4)
    542232 (7)
    542235 (4)
    452235 (5)
    452235 (5)
    452235 (5)
    452235 (5)
    442232 (6)
    442232 (6)
    442235 (3)
    352232 (7)

    ======

    Generation 8 : 6.875
    542232 (7)
    542232 (7)
    352232 (7)
    542232 (7)
    542232 (7)
    542232 (7)
    542232 (7)
    352232 (7)
    542132 (5)
    542232 (7)
    542232 (7)
    542232 (7)
    542232 (7)
    542232 (7)
    542232 (7)
    542232 (7)

    제 8 세대까지 진행시키면 거의 유전자들이 똑같아집니다. 대부분의 개체가 환경에 적합해진다는 거죠. 그리고 적합하지 못했던 개체는 도태되어 사라졌습니다.

    ======

    Generation 12 : 7.500
    552232 (9)
    552232 (9)
    542232 (7)
    542232 (7)
    352232 (7)
    542232 (7)
    542232 (7)
    552232 (9)
    552232 (9)
    542232 (7)
    552232 (9)
    542232 (7)
    542232 (7)
    352232 (7)
    542234 (5)
    542232 (7)

    물론 진화는 여기서 끝나지 않습니다. 계속 좋아지고 있네요.

    ======

    Generation 14 : 9.000
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)

    모든 개체의 유전자가 동일해진 시점입니다. 여기선 더이상 교배만으로는 새로운 유전자가 탄생하지 않습니다.
    그래서 이게 답이냐, 하면 그렇지 않습니다. 유전 알고리즘의 맹점이죠.
    유전 알고리즘은 "전역적 최대점"을 보장하지 않습니다. 우리가 구한 건 지역적 최소점이죠.

    최댓점.png
    왼쪽 동그라미가 전역적 최대점, 오른쪽이 지역적 최대점입니다.

    이 상황을 타파하기 위해서 돌연변이가 존재합니다. 적자생존만으로는 완벽한 진화에 다가가기 힘듭니다.

    ======

    Generation 16 : 6.750
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    213432 (-2)
    552232 (9)
    552232 (9)
    212232 (-2)
    552212 (3)
    552232 (9)
    552232 (9)
    552232 (9)
    513432 (1)
    552232 (9)
    552232 (9)

    돌연변이가 나타났습니다. 근데 -2로, 정작 더 값이 낮아져버렸습니다.

    Generation 17 : 9.000
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)
    552232 (9)

    좋은 유전자가 아니니 그 다음 세대에서 자연히 도태됩니다.

    ======

    이후로도 더 진행해봤는데, 도저히 9에서 더 올라가질 않아서 새로 시도해봤습니다.

    Generation 0 : -0.125
    453533 (5)
    151111 (0)
    252352 (9)
    444145 (-1)
    324132 (-1)
    442324 (2)
    311145 (-2)
    131443 (-2)
    115215 (-4)
    334144 (-2)
    112442 (-1)
    545333 (2)
    531413 (2)
    112252 (-3)
    342253 (4)
    114535 (-10)

    ======

    Generation 5 : 11.000
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)

    11까지 올라갔습니다.

    ======

    Generation 10 : 10.812
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    451352 (14)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    452152 (5)

    제 10 세대에서 돌연변이가 두 개 일어났습니다. 이대로 한 세대 더 진행시키면?

    Generation 11 : 4.625
    451352 (14)
    452352 (11)
    452352 (11)
    452352 (11)
    452352 (11)
    214144 (-5)
    212352 (-3)
    451352 (14)
    212352 (-3)
    451344 (12)
    451352 (14)
    214144 (-5)
    214144 (-5)
    452344 (9)
    212352 (-3)
    214352 (-9)

    돌연변이가 폭탄이군요. 유전자들이 완전히 뒤죽박죽이 되었습니다.

    ======

    Generation 20 : 13.188
    451352 (14)
    451352 (14)
    451352 (14)
    451352 (14)
    451342 (14)
    451352 (14)
    451352 (14)
    411342 (2)
    451352 (14)
    451342 (14)
    451352 (14)
    451352 (14)
    451352 (14)
    451352 (14)
    451352 (14)
    351352 (13)

    제 20 세대입니다. 14에서 고정되어버렸군요.


    참고로 최댓값은 5 + (5 - 1) * (4 % 5) - 1 = 20 입니다.




    마무리(?).
    佐倉杏子의 꼬릿말입니다
    VBMmAVH.gif

    앙코쨩 카와이!

    ======== 애니메이션 입문자를 위한 감동/치유물 추천 목록 ========
    신세기 에반게리온
    엘펜리트
    쓰르라미 울 적에
    우리들의
    School Days
    마법소녀 마도카☆마기카
    Fate/Zero
    미래일기
    Another
    유우키 유우나는 용사다
    학교생활
    헬싱

    이 게시물을 추천한 분들의 목록입니다.
    [1] 2016/04/03 12:30:50  112.162.***.88  푸들푸들해  661962
    푸르딩딩:추천수 3이상 댓글은 배경색이 바뀝니다.
    (단,비공감수가 추천수의 1/3 초과시 해당없음)

    죄송합니다. 댓글 작성은 회원만 가능합니다.

    번호 제 목 이름 날짜 조회 추천
    225
    검색 시 특수문자에 관하여 佐倉杏子 16/04/22 16:52 - -
    224
    헬로우드림! 아직 안하시고 계시나요 ? 수익금이 ^_^ !! 정말 수익이 [1] 佐倉杏子 16/04/17 13:10 41 0
    223
    오유 요즘에 너무 이상한 거 같아요 [6] 佐倉杏子 16/04/16 16:38 90 1
    222
    피자 참 맛있어요 佐倉杏子 16/04/14 19:01 15 0
    221
    오유 탈퇴하고 싶어요 [4] 佐倉杏子 16/04/14 16:20 106 3
    220
    5시에 밥 약속 있는데 [1] 佐倉杏子 16/04/14 16:05 29 0
    219
    오유인들의 평균 나이 ‮살 [5] 佐倉杏子 16/04/14 15:56 60 0
    218
    ↑ 이 분 ‮.요세주해하축 .다니답신기생 에뒤년 [13] 佐倉杏子 16/04/14 15:49 52 1
    217
    오유는 이미 예전에 끝났어 佐倉杏子 16/04/14 15:46 40 0
    216
    [주의] 자게가 폭주하려 합니다 [3] 佐倉杏子 16/04/14 15:42 68 0
    215
    오유의 현주소 [1] 佐倉杏子 16/04/14 15:29 42 0
    214
    그냥 다들 짐 싸들고 여기로 떠납시다 [1] 佐倉杏子 16/04/14 15:23 69 0
    213
    혼란하니 달린다 佐倉杏子 16/04/14 15:14 24 0
    212
    솔직히 게시판 분리합시다 [1] 佐倉杏子 16/04/14 15:05 50 0
    211
    요즘 인터넷 참 흥미진진해요. 佐倉杏子 16/04/14 14:17 21 0
    210
    정치 모르는 사람이라 그런데 피닉제씨 뭐하시는 분인가요... [7] 佐倉杏子 16/04/14 01:12 191 0
    209
    창원 성산 노회찬 후보가 당선될 것 같아서 기쁩니다. [1] 佐倉杏子 16/04/14 00:56 100 2
    알고리즘에 진화의 아이디어를 접목시키기 - 유전 알고리즘 [3] 佐倉杏子 16/04/03 00:39 53 1
    207
    우리가 모르던 표준어 [5] 佐倉杏子 16/03/24 16:21 139 11
    206
    오늘은 쿄코를 만난지 70일째 되는 날입니다. [5] 佐倉杏子 16/03/21 00:38 38 4
    205
    └ n년 내로 여친 생김 [2] 佐倉杏子 16/03/18 14:58 35 0
    204
    본격 시원해지는 동영상 [1] 펌글 佐倉杏子 16/03/17 22:24 115 2
    203
    기술의 상용화에는 가성비가 상당히 중요하죠 [5] 펌글 佐倉杏子 16/03/11 00:45 63 0
    202
    오늘은 쿄코를 만난지 60일째 되는 날입니다. [3] 佐倉杏子 16/03/11 00:11 44 4
    201
    뻘) 서울 여행 후기 [1] 佐倉杏子 16/03/07 01:48 52 2
    200
    테스트? [1] 佐倉杏子 16/02/28 04:38 28 1
    199
    오늘은 귀여운 여자 아이의 5주기입니다. [3] 佐倉杏子 16/02/25 11:22 90 2
    198
    뻘) 예언 하나 해보죠 [3] 佐倉杏子 16/02/23 23:57 78 0
    197
    며칠 전 동성애자를 보고 느낀 감정 [1] 佐倉杏子 16/02/21 04:53 54 0
    196
    한국어 발음에 관한 사실 佐倉杏子 16/02/20 02:19 39 0
    [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [다음10개▶]
    단축키 운영진에게 바란다(삭제요청/제안) 운영게 게시판신청 자료창고 보류 개인정보취급방침 청소년보호정책 모바일홈