ESP32-S3 Bench Guide
ESP32-S3 N16R8 bench guide: live pinout, lessons, simulators and the bench log.
신경망 기반 인공생명 생태계 시뮬레이터 — 137개 가중치의 뇌가 돌연변이·자연선택으로 종 분화. 순수 바닐라 JS + Canvas 단일 HTML.
Translation pending
EducationHTMLGitHub @MoriochoRadioOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
아무도 가르치지 않은 신경망이 스스로 사냥을 배우는 인공생명 생태계 시뮬레이터. 모든 개체는 137개 가중치의 작은 신경망(뇌)을 갖고 태어나고, 돌연변이와 자연선택만으로 먹이 추적·종 분화(초식 → 포식자)·포식자-피식자 진동이 창발합니다. 순수 바닐라 JavaScript + Canvas 2D, 단일 HTML 파일 하나입니다. ▶ 브라우저에서 바로 실행 — 설치·빌드 없음 이 프로젝트의 출발점은 시뮬레이터가 아니라 모델 실험이었다. Anthropic의 창작 특화 모델 Fable로 "생성형 모델이 어디까지 만들어 내는가"를 시험해 보려 했고, 주제로 인공생명을 골랐다. 주제를 그렇게 잡은 이유는 정답을 미리 정할 수 없는 문제여서다. 화면에 무엇이 나타날지는 만드는 사람도 모른다. 무작위 뇌를 가진 개체들이 대부분 굶어 죽고, 우연히 "먹이 쪽으로 도는" 뇌가 살아남아 퍼지고, 식성이 갈라지며 종이 분화되고, 포식자와 피식자가 서로를 조절하는 진동이 나타난다 — 그걸 설계한 게 아니라 규칙만 주고 지켜보는 것이 목적이었다.Read the full README ↗
🇰🇷 한국어 · 🇬🇧 English
아무도 가르치지 않은 신경망이 스스로 사냥을 배우는 인공생명 생태계 시뮬레이터. 모든 개체는 137개 가중치의 작은 신경망(뇌)을 갖고 태어나고, 돌연변이와 자연선택만으로 먹이 추적·종 분화(초식 → 포식자)·포식자-피식자 진동이 창발합니다. 순수 바닐라 JavaScript + Canvas 2D, 단일 HTML 파일 하나입니다.
▶ 브라우저에서 바로 실행 — 설치·빌드 없음
이 프로젝트의 출발점은 시뮬레이터가 아니라 모델 실험이었다. Anthropic의 창작 특화 모델 Fable로 "생성형 모델이 어디까지 만들어 내는가"를 시험해 보려 했고, 주제로 인공생명을 골랐다.
주제를 그렇게 잡은 이유는 정답을 미리 정할 수 없는 문제여서다. 화면에 무엇이 나타날지는 만드는 사람도 모른다. 무작위 뇌를 가진 개체들이 대부분 굶어 죽고, 우연히 "먹이 쪽으로 도는" 뇌가 살아남아 퍼지고, 식성이 갈라지며 종이 분화되고, 포식자와 피식자가 서로를 조절하는 진동이 나타난다 — 그걸 설계한 게 아니라 규칙만 주고 지켜보는 것이 목적이었다.
만드는 방식에도 제약을 하나 걸었다. 단일 HTML 파일, 빌드 없음, 의존성 0개. 링크만 열면 바로 돌아가야 실험 결과를 남에게 보여줄 수 있다고 봤다.
Q. 왜 바닐라 JS 단일 HTML 파일인가?
이 프로젝트의 볼거리는 UI가 아니라 시뮬레이션 자체입니다. 프레임워크·빌드 도구·외부 라이브러리를 전부 빼고 파일 하나(index.html, 약 950줄)로 만들면, 누구든 더블클릭 한 번으로 오프라인에서도 돌려볼 수 있습니다. 의존성 0은 데모 접근성이자 제약 조건이었습니다: 렌더링(Canvas 2D), 신경망, 공간 분할까지 전부 직접 작성했습니다.
Q. 신경망이 왜 137개 가중치뿐인가?
구조는 입력 12(가장 가까운 먹이/이웃의 방향·거리·크기·식성, 자기 상태 등) → 은닉 9 → 출력 2(회전·추진)의 완전연결망으로, 편향 포함 9×(12+1) + 2×(9+1) = 137개입니다. 수백 개체가 매 틱 forward를 돌려야 하므로 작아야 실시간이 나오고, 무엇보다 "이 정도로 작은 뇌도 학습 없이 선택압만으로 사냥을 익힌다"를 보여주는 것이 목적이라 일부러 최소로 잡았습니다.
Q. 왜 학습(역전파)이 없나? 개체는 태어난 뇌 그대로 평생을 삽니다. 잘 움직인 개체가 번식하고, 자식의 뇌 가중치에 가우시안 돌연변이가 들어갈 뿐입니다. 보상 함수를 설계하는 순간 "내가 정의한 행동"이 나오므로, 순수 자연선택만으로 무엇이 창발하는지 보는 실험입니다.
Q. 종 분화를 왜 하드코딩하지 않았나? 초식/육식을 이산적인 종으로 구현하면 종 분화는 '기능'이지 '창발'이 아닙니다. 대신 식성을 0~1 연속 스펙트럼으로 두고, 사체(고기)라는 중간 먹이 니치를 만들어 잡식 단계도 생존 가능하게 했습니다. 그 결과 분포가 스스로 갈라지는 순간을 차트에서 관찰할 수 있습니다.
Q. 성능은 어떻게 확보했나? 이웃 탐색이 병목이라 공간 해시 그리드로 주변 셀만 조회합니다(전수 비교 O(n²) 회피). 핫루프에서는 조회 결과 배열을 재사용해 할당을 줄였습니다.
index.html
├─ 1부. 시뮬레이션 코어 — DOM 의존 없음 (유전자·신경망·생태계 로직)
└─ 2부. UI — Canvas 렌더링, 카메라, 차트, 인스펙터, 신의 손
코어와 UI를 분리한 이유는 아래 '검증' 때문입니다.
index.html을 브라우저에서 열기만 하면 됩니다. (또는 위 데모 링크)
시뮬레이션 코어가 DOM과 분리되어 있어 Node.js로 헤드리스 장기 실행이 가능합니다. 60,000틱 테스트에서 절멸 없이 90세대 이상 진화, 평균 이동 속도 3배 향상, 포식자 종 분화를 확인했습니다.
같은 작성자의 Mindlings(Godot 4)는 여기서 탐구한 "신경망 + 자연선택" 주제를 다른 방향으로 파고듭니다 — 고정 토폴로지 137 가중치 대신 NEAT식 토폴로지 진화 + 생애 내 학습, 수백 개체 군집 대신 소수 개체를 가까이서 돌보는 신 시점 샌드박스입니다.
MIT