Как я могу вычислить BAL в NetLogo?

Omran Yaseen спросил: 13 июня 2018 в 10:44 в: r

Я новичок в Netlogo, моя проблема следующая. Во-первых, у меня есть несколько растений (1000 черепах), эти растения имеют два переменных диаметра на высоте груди и высота. Я хочу использовать следующее уравнение для оценки конкуренции (см. Ссылку): Формула количественно определяет сумму базальных областей всех деревьев, которые больше или равны в основной области по сравнению с таковой для данного дерева (i) во времени ( т). Это значение дополнения к дереву (i) базальной области, обозначающее относительное доминирование, где (G (t)) - базальная площадь на гектар данной лесной подставки во время (t). Базальная площадь отдельного дерева - это площадь поперечного сечения его ствола, обычно измеренная на высоте 1,3 м над уровнем земли. Для удобства базальная область часто вычисляется по диаметру ствола, используя формулу окружности. Базальная площадь на гектар - это показатель плотности, учитывающий как количество деревьев, так и их размеры в определенной области. Вычисление этого уравнения: первый шаг - диаметр на высоте груди должен быть от минимального до максимального, тогда базальная площадь для каждого растения должна быть рассчитана, а сумма базальной площади всех деревьев, больших, чем контрольное дерево (наименьшее), рассчитывается для следующая сумма деревьев базальной площади всех деревьев больше, чем две предыдущие наименьшие деревья) и т. д. на последнем шаге: наименьшее дерево имеет наибольшее значение, а наибольший диаметр имеет (0). Я попытался написать формулу BAL таким образом, но это не сработало, я получил тот же результат для всех черепах, результаты должны быть кумулятивными, даже если dbh одинаково, как заставить функцию работать для всех черепах? т. е. функция должна исключать первые черепахи, затем первые две черепахи, затем три черепахи, затем первые 4 черепахи и т. д.:

to calc-treeba                           
   set ba  (pi * (dbh / 2) ^ 2 )      ; ba : tree basal area , pi :3.14, dbh = diameter at breast height
    endto calc-bal-for-all-trees        ; BAL as non-spatially explicit index
   set  bal sum ([ba] of turtles with [ba > [ba] of myself])
   end

Ниже вы можете найти, как BAL вычисляется в R, но, к сожалению, это не помогло мне применить его в Netlogo.

R-код для расчета базальной области на больших деревьях. Лучше всего определить функцию в R, которую вы можете использовать в нескольких экземплярах в вашем R-скрипте. Такая функция может выглядеть как код, указанный в поле ниже (см. Ссылку):

https://blogg.slu.se/forest-biometrics/2017/05/26/basal-area- в более крупных деревьев-и-рост-коррекция в точке / # комментарий-1278

1 ответ

Luke C ответил: 15 июня 2018 в 06:27

Возможно, вы установили BAL как глобальную переменную вместо переменной turtles-own? У меня нет проблем с вашим кодом, Предполагая, что calc-bal-for-all-trees вызывается черепахами, а не наблюдателем. Например, с этой настройкой:

turtles-own [ ba bal ]to setup
  ca
  crt 10 [
    set ba 10 + random 50
    set shape "tree"
    set color green
    setxy random-xcor random-ycor
    set size ba / 10    
  ]
  reset-ticks
end

Вы можете запустить свой код следующим образом:

to get-bal
  ask turtles [
    set bal sum [ba] of turtles with [ ba > [ba] of myself ]
  ]
end

Когда я проверю его с чем-то вроде :

to check-bal
  foreach sort-on [ba] turtles [
    current-turtle ->
    ask current-turtle [
      show ( word "BA: " ba ", BAL: " bal )
    ]
  ]
end

Я получаю вывод что-то вроде:

(turtle 4): "BA: 18, BAL: 301"
(turtle 5): "BA: 21, BAL: 280"
(turtle 3): "BA: 23, BAL: 257"
(turtle 8): "BA: 27, BAL: 230"
(turtle 1): "BA: 29, BAL: 201"
(turtle 0): "BA: 30, BAL: 171"
(turtle 6): "BA: 35, BAL: 136"
(turtle 2): "BA: 37, BAL: 99"
(turtle 7): "BA: 49, BAL: 50"
(turtle 9): "BA: 50, BAL: 0"

Это так, как вы ожидаете?

Omran Yaseen ответил: 15 июня 2018 в 08:00
Спасибо за хорошее объяснение, это помогло мне найти, где я поступил не так, я всегда получал бал 0 для всех черепах, потому что я инициализировал одно значение диаметра для всех значений (0,01). Но когда я использую случайные числа, функция работает хорошо. Но для моего случая я имею дело с ровным лесом, поэтому мне следовало бы предположить, что такое же значение для диаметра в возрасте (0), поэтому случайный нормальный прием хорош для handel с этой проблемой?
Luke C ответил: 15 июня 2018 в 08:12
@OmranYaseen - Возможно, но я не знаю, могу ли я ответить на этот вопрос - я думаю, что это может зависеть от вашей модели / от каких начальных условий вы ожидаете. Мое мнение состояло бы в том, что с точки зрения модели введение некоторых со случайными нормалями имеет смысл устранить повторяющиеся значения БА.

Дополнительное видео по вопросу: Как я могу вычислить BAL в NetLogo?

Section 1: Less Comfortable

Section 4

JavaScript for Web Apps, by Tomas Reimers and Mike Rizzo