Skip to main content
LibreTexts - Ukrayinska

19.4: Екологічні та еволюційні моделі

  • Page ID
    67740
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)

    У цьому самому заключному розділі цього підручника ми обговоримо ПРО екологічної та еволюційної динаміки. Такі ПРО відрізняються від інших прикладів, обговорюваних досі в цьому розділі щодо одного важливого аспекту: Агенти можуть народитися і можуть померти під час моделювання. Це означає, що кількість змінних стану, що беруть участь у системі, може динамічно змінюватися понаднормово, тому традиційні концепції динамічних систем не застосовуються легко до цих систем. Ви, можливо, пам'ятаєте, що подібний виклик ми бачили, коли ми зробили перехід від динаміки мереж до динаміки мереж у розділі 16. Динамічне збільшення або зменшення кількості компонентів системи порушує припущення, що поведінка системи можна представити як траєкторію в межах статичного фазового простору. Для вивчення поведінки таких систем найбільш загальним, практичним підходом, ймовірно, було б проведення явних симуляцій на комп'ютерах.

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

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

    1. Розробіть структуру даних для зберігання атрибутів агентів. Екосистема хижака-здобич, очевидно, складається з двох типів агентів: видобутку та хижаків. Отже, інформація про тип агента повинна бути представлена в структурі даних. Крім того, якщо ми хочемо імітувати їх взаємодію в просторі, інформація про їх просторове розташування також потрібна. Зауважте, що ці атрибути ідентичні атрибутам агентів у моделі сегрегації Шеллінга, тому ми можемо використовувати той самий дизайн агента наступним чином:

    Тут ми називаємо видобуток «кроликами», а хижаків «лисицями» в коді, тому можемо позначити їх r і f відповідно (так як і видобуток, і хижаки починаються з «pre»!). Крім того, ми використовуємо r_init та f_init для представлення початкової популяції кожного виду. Цикл for повторює r_init + f_init раз, і в першій ітерації r_init генеруються агенти видобутку, тоді як агенти хижака генеруються для решти.

    2. Розробіть структуру даних для зберігання станів навколишнього середовища, 3. Опишіть правила того, як середовище поводиться самостійно, & 4. Опишіть правила взаємодії агентів з навколишнім середовищем. Цей ПРО не включає оточення явно, тому ми можемо ігнорувати ці завдання проектування.

    5. Опишіть правила того, як агенти поводяться самостійно, & 6. Опишіть правила взаємодії агентів один з одним. У цій моделі властива поведінка та взаємодія агентів - це те, що переплітається, тому ми разом обговоримо ці два дизайнерські завдання. Для видобутку та хижаків повинні бути розроблені різні правила, такі як.

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

    Для агентів-хижаків правила дещо протилежні. Якщо агент хижака не може знайти поблизу жодного видобутку, він з певною ймовірністю гине через брак їжі. Але якщо він може споживати здобич, він також може розмножуватися з певною швидкістю розмноження.

    Нарешті, обидва типи агентів дифундують у просторі випадковою ходьбою. Швидкість дифузії може бути різною між двома видами, тому припустимо, що хижаки можуть розсіюватися трохи швидше, ніж видобуток.

    Припущення, розроблені вище, можуть бути реалізовані взагалі в функції оновлення наступним чином. Як бачите, код стає трохи довшим, ніж раніше, що відображає підвищену складність поведінкових правил агентів:
    Тут ag - агент, випадково обраний для асинхронного оновлення. Модуль копіювання Python використовується для створення копії кожного агента як потомства, коли він відтворює. Зауважимо, що обмеження росту логістичного типу реалізується для видобувних агентів шляхом множення ймовірності відтворення на те\((1−x/n_r)\), де\(x\) знаходиться поточна популяція видобутку і\(n_r\) є несучою здатністю. Також відзначимо, що на самому початку цієї функції перевіряється, чи є якийсь агент в списку агентів. Це тому, що існує можливість для всіх агентів вимирати в екологічних ПРО.

    Тепер я хотів би підняти одне тонке питання, яке виникає в ПРО з різною кількістю агентів, які моделюються асинхронно. Коли кількість агентів була фіксованою та постійною, тривалість часу, що минув у модельованому світі, була лінійно пропорційною кількості виконань функції асинхронного оновлення (наприклад, у моделі сегрегації Шеллінга), тому нам не довелося робити нічого особливого, щоб обробляти потік часу. Однак, коли кількість агентів змінюється, виконання функції асинхронного оновлення на одному випадково вибраному агенті не завжди представляє однакову кількість часу, що минув у модельованому світі. Щоб краще зрозуміти це питання, уявіть собі дві різні ситуації: моделювання 10 агентів та імітація 1000 агентів. У колишній ситуації кожен агент оновлюється один раз, в середньому, коли функція оновлення виконується 10 разів. Однак в останній ситуації 10 разів виконання функції означає лише близько 1% оновлюваних агентів. Але в модельованому світі агенти повинні вести себе одночасно паралельно, тому кожен агент повинен оновлюватися один раз, в середньому, за одну одиницю довжини модельованого часу. Це означає, що минулий час кожного асинхронного оновлення повинен залежати від розміру популяції агентів. Як же впоратися з цим додатковим ускладненням моделювання?

    Швидке і просте рішення цієї проблеми полягає в тому, щоб припустити, що в кожному асинхронному оновленні проходить 1/\(n\) одиниці тривалості часу, де\(n\) розмір популяції агента на момент оновлення. Цей метод може природно обробляти ситуації, коли розмір популяції агента швидко змінюється, і він (майже) гарантує, що кожен агент оновлюється один раз, в середньому, за кожну одиницю часу. Щоб реалізувати моделювання для однієї одиниці тривалості часу, ми можемо написати наступну функцію «обгортки», щоб переконатися, що час у імітованому світі закінчується на одну одиницю довжини:
    Цей трюк усвідомлює, що прогрес часу виглядає стабільним у моделюванні, навіть якщо кількість агентів змінюється з плином часу.

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

    Типовий результат моделювання показаний на малюнку 19.5. Крихітні сині точки представляють видобуток особин, тоді як більші червоні кола представляють хижаків. Як ви бачите на малюнку, взаємодія між здобиччю та хижаками створює дуже динамічні просторові закономірності, які дещо нагадують закономірності, помічені в моделі СА господаря-збудника, розглянутої в розділі 11.5. Популяція видобутку зростає, утворюючи скупчення (хмари крихітних блакитних крапок), але якщо вони заражені хижаками, хижаки також швидко ростуть, щоб споживати здобич, залишаючи позаду пустельний порожній простір. В результаті система в цілому починає показувати динамічні хвилі видобутку, за якими слідують хижаки. Зрозуміло, що просторові розподіли цих видів дуже неоднорідні. Хоча ми спостерігаємо періодичний віск і спад цих видів, як передбачено в моделям хижака-здобич на основі рівнянь, версія ПРО генерує набагато складнішу динаміку, яка передбачає просторову місцевість та стохастичність. Можна стверджувати, що результати, отримані з цієї версії ПРО, були б більш реалістичними, ніж результати, отримані з моделей, заснованих на чисто рівняннях.

    Ми можемо додатково змінити код симулятора ПРО хижака-здобич, щоб він вивів часовий ряд сюжету видобутку та популяцій хижаків поруч із візуалізацією позицій агентів. Це можна зробити в досить простому перегляді: нам просто потрібно створити списки для зберігання часових рядів популяції здобичі та хижаків, а потім переглянути функцію спостереження, щоб підрахувати їх, додати результати до списків та візуалізувати списки як графіки часових рядів. Ось оновлені функції ініціалізації та спостереження:

    Типовий результат моделювання з цим переглянутим кодом наведено на рис.19.6. Ви можете бачити, що популяції двох видів, безумовно, демонструють коливальну динаміку, але вони не схожі на регулярні циклічні, передбачені моделями на основі рівнянь (наприклад, рис. 4.8). Натомість існують значні коливання, і період коливань також не є регулярним. Просторове розширення, дискретність окремих агентів та стохастичність у їхній поведінці сприяють тому, щоб результати моделювання на основі агентів були більш динамічними та «реалістичними».

    Вправа\(\PageIndex{1}\)

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

    Вправа\(\PageIndex{2}\)

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

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

    Три складові еволюції

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

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

    до функції ініціалізації, а потім заміна

    із

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

    з чимось на кшталт:

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

    Для повноти, ось переглянутий код еволюційного ПРО хижака-здобич (з переглянутими частинами, позначеними ###):

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

    Вправа\(\PageIndex{1}\)

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

    Вправа\(\PageIndex{2}\)

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

    Вправа\(\PageIndex{3}\)

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

    Вірите чи ні, ми зараз в кінці нашої подорожі довжиною понад 450 сторінок. Дякую, що досліджували світ складних систем зі мною. Сподіваюся, вам сподобалося. Само собою зрозуміло, що це тільки початок для вас занурюватися в набагато більшу, незвідану територію складних систем науки. Я вважаю, що є ще багато нових властивостей різних складних систем, і мені було б дуже приємно, якби цей підручник допоміг вам зробити такі відкриття в найближчі роки. Бон вояж!