Граємо в Бога, заподіюємо непрошену допомогу науці і трішечки Сингулярності

Якщо ви хоча б на підлогу шишечки цікавитеся сучасною наукою, то знаєте хто такий Марков. Лауреат премії «Просвітитель», реально просвітитель, автор купи прекрасних книг, і афігенних роликів на ютубі, а ще основний двигун сайту elementy.ru, що відрізняється тим, що статті готують професіонали, а не журналісти, з посиланнями на першоджерела і ніколи ніякого хайпу, що дуже добре для мозкової гігієни. Загалом він не тільки вивчає збільшення мозку хомосапієнсів, але і реально його наповнює всяким цікавим.

Так ось Марков викотив нову свою роботу «Коеволюція мозку і культури», абстракт на елементах, доповідь на ютубі і оригінал в рецензованому журналі на басурманському наречі. І мені захотілося пограти його моделями і пооптимізувати його код. До чого я вас і запрошую.

Суть роботи якщо коротко, в гіпотезі, що винахід нових цікавих мемів підвищує еволюційний попит на великий мозок, а великий мозок у свою чергу дозволяє знати більше цікавих мемів - навичок корисної поведінки. І вже коли знайшлася екологічна ніша де цікавих мемів - може бути багато то починається самопідтримуваний процес, від якого наш мозок роздуло як фурункул на попі наших менш вдалих конкурентів в еволюційній гонці.

Для того щоб цей процес показати була написана на C # моделька, в якій сотні особин живуть, вмирають, передають один-одному гени, винаходять всякі меми, і вчаться їм один у одного. Штучне життя вміє спільно полювати або відлинювати від роботи, переконувати одноплемінників віддати більше спільно нажитої здобичі, вчитися більш ефективно полювати і кооперуватися з іншими мисливцями. Конкурувати з сусідніми племенами за їжу. Хотіти і вміти вчитися в інших, а так само хотіти і вміти вчити. Прагнути карати халявщиків не бажаючих полює, і окремо вчиться визначати чи того ти покарав. Ще майбутні гети вміють займатися всякою безглуздою фігнею, і відрощувати собі пам'ять в мозку. Все це вони вміють як у вигляді генів, які вони передають потомству при закладі віртуальних дитинчат, так і набуваючи відповідні прийоми - меми, які живуть в популяції своїм життям, використовуючи мізки мешканців симуляції як своє середовище проживання. Загалом запускаючи симуляцію ви робите приблизно те ж саме, що забувши в раковині не помитий посуд - ставите еволюційний експеримент. Тільки з графіками і можливістю порівняти свої результати з результатами серйозних вчених.

Загалом, досить займатися переказом, краще сходіть і подивіться оригінальну доповідь.

Частина перша, про Оптимізацію.

Make it work, Make it right, Make it fast! © Kent Beck

Автором симулятора був син нашого вчителя Михайло JellicleFencer Марков. У коментарях під статтею він виклав посилання на репозитарій: jelliclefencer.visualstudio.com/_git/TribeSim. Написати те він її написав, причому так щоб те, що відбувається всередині, було зрозуміло будь-якому біологу без коментарів. Але часу на те щоб займатися оптимізацією у нього явно не було. В результаті залізши всередину я в порядку хобі прискорив роботу симуляції в 10-20 разів навіть не вдаючись до unsafe коду та інших надмірностей і помацавши поки тільки половину гальмуючих місць. Читаність знизилася, сподіваюся, не критично. Азур мене чомусь не любить, тому я форкнувся на гітхаб ось сюди: github.com/kraidiky/TribeSim і там можна по кіммітах простежити як я від'їдав у купі місць по 5-15% приросту.

Я планую ще якийсь час продовжити цим займатися і запрошую бажаючих взяти участь у цьому занятті. Для цього треба форкнути репозиторій, зробити коду добре, після чого відправити Pull Request. Чесно то кажучи ніколи раніше так не робив за більше ніж 20 років програмістської кар'єри. Так що якщо я щось роблю неправильно - поправляйте.

Тільки давайте з розгорнутими коментарями, без unsafe і екстримізму. Уявіть, що читати і використовувати цей код належить універівському професору, у якого в руках ваша заліковка.:)

Олександр Володимирович планує далі розвивати цю модель. З Михайлом я зв'язався, він тепер контребьютор в цьому репозиторії, так що оптимізація, яка для вас всього лише розвага і хобі зможе реально допомогти науці, а Маркову-старшому вивільнить ще трішки часу і можливо він запише ще який-небудь шикарний ролик на зразок "Еволюційної біології любові" ".

Є ще одне заняття, яке я давно хочу: стріми з розбором коду. Це як транслювати свої ігри в твічі, тільки з аудиторією в 1000 разів менше.:)))

Ось у середу ввечері можна буде приєднатися до трансляції, і побачити як я повільно відкриваю дифи своїх кімтів, плавно рухаю по них мишкою і тихим голосом розповідаю, чому я зробив саме так, а не інакше.

Я не великий спец з оптимізації, зі мною в моєму житті працювали люди сильно покрутіші, але середнього рівня програміст на C # напевно винесе для себе купу корисного. Тому що приблизно те ж саме я бачу не тільки в домашніх проектиках у вільний час, але і у великих ігрових проектах з мільйонними бюджетами.

Частина друга, про Біологію

Налаштування програми зберігаються у файлах * .trsim, і в репозиторії я залишив тільки два коди, що використовуються для вимірювання продуктивності, Один з мінімальним набором фіч та інший в якому все, крім комплексної культури і збору статистики навпаки включено. Обидва файли використовуються для профілювання, тому в них стоїть галочка не використовувати багатопоточність. Не забудьте зняти якщо вирішите зайнятися своїми експериментами на їх основі. Попрошу ещё Михаила подкинуть парочку trsim-ов соответствующих экспериментам описанным в статье, если они у него сохранились. Приклади заповнення налаштувань програми, які використовувалися Марковим-старшим для статті можна переглянути в додатку до оригінальної статті, правда не у вигляді файлу а у вигляді текстових табличок, і написаних по буржуїнськи.

Якщо вам цікаво позапускати симуляцію з різними налаштуваннями і подивитися яку культуру вам виростить свій власний легіон Гетов - ласкаво просимо в коментарі. Викладайте свої trsim-и, показуйте графіки зі спостереженнями і порівняннями, які ваші зміни призводять до яких ефектів. Чи вдалося відтворити результати показані Марковим до статті? Які досліди ви б самі хотіли поставити?

Я хотів тут розписати значення всяких параметрів моделі, але це довго і не дуже цікаво. Замість цього поставте брейкпоінт у функції World.SimulceYear, завантажте trsim allFeatures і пройдіть один рік симуляції за кроками. Відразу зрозумієте що там до чого і навіщо.

Частина третя, про Мрії

У мене ось є такий досвід мрії, я зараз закінчу з оптимізацією і спробую його прикрутити до симулятора, щоб подивитися при яких параметрах те про що я давно роздумую дійсно має сенс:

Уявіть, що не в усіх комбінаціях меми однаково корисні. Існують мемплекси - комплекси мемів які взаємно доповнюють один одного і дають хороший результат. Але якщо змішати шаблони поведінки з двох різних культур, що відповідають за вирішення одних і тих же завдань, може зрідка вийде оригінальний симбмоз, але найчастіше виходить непрацездатна каша.

У генетиці таке представлено в повний зріст, нездатність дати плодовите потомство є найпростішим критерієм виду, що лише іноді дає збої у вигляді лігрів. Мало хто знає, що те ж саме спостерігається і всередині одного виду. Деякі істоти навчилися оцінювати свою генетичну відстань до потенційного партнера і коригувати в зв'язку з цим свої репродуктивні стратегії. Найбільш запам'ятався мені приклад, коли дрозофіли опинившись у стані харчового стресу частіше вибирають у партнери своїх найближчих родичів (ось і посилання відшукалося: scisne.net/a-611). Але цікаво що поведінка мух дуже логічна, близькоспоріднене схрещування дозволяє легше проявиться дивним рецесивним мутаціям серед яких може знайтися щось корисне в непростій життєвій ситуації. Люди селекціонери чинять так само. І мухи не тільки навчилися пізнавати ступінь спорідненості, але й навчилися цим користуватися. Взагалі не варто мушок недооцінювати. Строго показано, що у них може вироблятися культура і передаватися з покоління в покоління.

У статті Маркова і Куликова (див. огляд: "Видоутворення - особиста справа кожного" ") описується поширене зараз припущення, що оцінка генетичної відстані робиться за запахом молекул імунної системи і наводяться приклади інших тварин які так вміють. Наприклад риби колюшки і ми з вами. Деякі дослідження показують, що люди за допомогою вомероназального органу здатні за запахом несвідомо оцінити потенційного партнера на ступінь споріднення - занадто близькі і занадто далекі непривабливі на запах. Є правда й інші дослідження. Тема продовжує вивчатися.

Так от, повертаючись до мемів: комплекси взаємодоповнюючих і взаємно заважаючих шаблонів поведінки очевидно є, і у мене є припущення, що як і в генетиці люди навчилися визначати на скільки сильно за меметичним базисом відстоїть від них потенційний приклад для наслідування, і відповідно цьому легко переймати його стереотипи поведінки або ж навпроти всебічно його меми перевіряти і вивчати з сильно меншою швидкістю. Припускаю, що цей механізм дозволяє за відсутності репродуктивної ізоляції підтримувати деяку цілісність мемплексів. Або навпаки деякий невеликий відсоток населення може воліти запозичувати чужу культуру, стаючи для еволюції мемів - чашками петрі для ізольованих експериментів із запозичення. Хочеться переконатися, що в певних умовах такий поділ «свій-чужий» може бути надзвичайно корисним. Якщо це так раптово виходить, що поділ людей на своїх і чужих, причому саме без урахування генетичної складової не тільки шкідлива ксенофобія, але і дуже корисна особливість, потрібна для розвитку ефективних культур. Будучи підтвердженою таке припущення мало б величезну не тільки біологічну, а й культурну і політичну значимість.

А чи є у вас якісь цікаві ідеї, які можна перевірити в моделюванні за допомогою марківського симулятора після невеликого доопрацювання. Ділимося ідеями, обговорюємо в коментах.

Частина третя, про Сингулярність

Сам Олександр Володимирович обумовлюється, що в їхній моделі не вийшло побачити стрімкого гіперболічного розгону потужності культури, властивого історії людства. Також він згадав, що є ідея пошукати умови такого зростання у вигляді комплексів взаємно підсилюють один одного мемів. У мене ж є дещо інше припущення. Подивитися про сингулярність можна дуже мене надихнув виступ Панова на GF2045. А з ще більш скептичним поглядом ознайомитися в парі статтею Сергія Карелова "Техносингулярність стає технорелігією" "і її другої частини.

Ну так от. Крім того що наша культура розвивається з все більш наростаючим темпом, точно те ж саме відбувається з нашою чисельністю населення. Капиця (молодший) у своїй книзі "Парадокси росту" "показує, що сумарна чисельність населення землі більш легко передбачувана, чим чисельність населення в будь-якій окремо взятій країні, і довгі століття, тисячоліття і десятки і сотні тисяч років вона зростала за гіперболічним законом, поки кілька десятків років тому не почала стабілізуватися і виходити на константу, причому демографічний перехід трапляється в тому числі і в країнах з різним рівнем розвитку економіки і різною культурою.

Можна припустити, що швидкий експоненційний, або гіперболічний (їх не так легко розрізнити далеко від асимптоти) зростання спостерігається до тих пір, поки наш вид не заповнив повністю екологічну нішу, в якій мізки здатні приносити користь.

Зрозуміло, що щоб це перевірити, в першу чергу потрібно змінити зашитий в модель спосіб конкуренції за ресурси. Зараз буквально задано максимальну кількість ресурсів, яку наші гети можуть вичавити з годівної території, і після короткої ділянки на самому початку еволюції розвиток йде тільки в тому щоб віджати більше ресурсів у сусіднього племені. Реальна ж палеолітична революція радикально змінила продуктивність ландшафту, що годує, і разом з нею нашу чисельність. Тобто з сусідами треба конкурувати за контроль над умовними гектарами землі, а скільки центнерів можна зібрати зі свого гектара визначати за допомогою додаткової фічі, залежної як від генів так і від мемів. Зараз такої «Ефективності природокористування» немає, але її легко додати в модель.

Проблема в тому, що на нинішньому симуляторі етап зростання чисельності толком не побачиш. Розумні швидкості моделювання спостерігаються поки кількість особин близько тисяч, а початкова популяція зазвичай десятки-сотні. Насправді ж наша чисельність на цікавому проміжку часу змінилася на 5-6 порядків. Ось що і як потрібно поміняти в програмі щоб можна було успішно змоделювати зростання чисельності агентів на 5 порядків - питання звичайно цікаве. Із задоволенням обговорю його в коментарях. Поки у мене з ідей тільки якісь сумнівні угруповання схожих особин. Ну або все нафіг переписати з нуля для обчислень на GPU за допомогою CUDA. Загалом якщо кому є що сказати ласкаво просимо в коментарі.

Ув'язнення

На цьому творчий колектив нашої передачі прощається з вами, і бажає щоб у вас теж чесалися руки взяти участь в чомусь дійсно важливому, замість того щоб цілодобово пиляти інтерфейсики для обмежених потреб, за які нам всім платять ресусики сильно непропорційно нашій HuntingEfficiency.

COM_SPPAGEBUILDER_NO_ITEMS_FOUND