Как построить распределение двух разных пород - PullRequest
0 голосов
/ 20 октября 2019

Я настраиваю две разные породы с помощью команды породы:

breed [breeds1 breed1]
breed [breeds2 breed2]

и на ходу я прошу случайную черепаху выполнить команду действия, например:

to go
ask one-of turtles [
   action
  ]
end

где action определяется как

    to action
      ifelse (breed = breeds1) 
      [
        set q random-float 1
        set c q
        set potential_1 (1 + d) * (1 - c)^(d)
      ]
      [
        set c random-float 1
        set potential_2 (1 + (1 / d))*(1 - c)^(1 / d)
      ]
    end

Для breeds1, q имеет значение в [0,1], а c принимает его значение. Для breeds2, q имеет значение, равное 0, а c принимает случайные значения в [0,1]. Обе породы имеют d=3 (фиксированное значение).

c,q, и оба потенциала являются глобальными переменными. Что мне нужно сделать, это построить два потенциала / распределения. Я использовал plotxy для построения распределений в окне кода графика: [! [Введите описание изображения здесь] [1]] [1]

Мне бы хотелось получить следующие два распределения на одном графике. График 1 показывает распределение для пород1, график 2 для пород2.

Если я считаю potential_1 и potential_2 собственными черепахами (первый для breeds1, второй для breeds2), я получаю сообщение, что не могу использовать potential_1в контексте наблюдателя, потому что potential_1 только для черепах. То же самое для potential_2. Если я считаю q и c собственными черепахами следующим образом:

breeds1-own
[ q
  c
  potential_1
]
breeds2-own
[
  q
  c
  potential_2
]

я получаю следующую ошибку:

Вы не можете использовать c вконтекст наблюдателя, потому что c только для черепах

Итак, мой вопрос: как я могу построить два распределения?

Надеюсь, вы мне поможете.

1 Ответ

1 голос
/ 22 октября 2019

Хорошо, я не могу ответить на ваш вопрос, используя ваш код, так как не могу понять логику ask one-of. Итак, вместо этого я создал полную модель, которая выполняет построение графиков в надежде, что она поможет вам понять, что не так с вашим кодом.

Попробуйте:

globals [d]

turtles-own
[ potential
  group
  c
]

to setup
  clear-all
  set d 3
  create-turtles 100
  [ set group one-of ["type1" "type2"]
    action
  ]
  reset-ticks
end

to action
  ifelse (group = "type1") 
  [ let q random-float 1
    set c q
    set potential (1 + d) * (1 - c)^(d)
  ]
  [ set c random-float 1
    set potential (1 + (1 / d))*(1 - c)^(1 / d)
  ]
end

ТогдаВам понадобится следующее как ручки на вашем участке. Вам также необходимо изменить настройки графика для каждого пера на «точка», а не «линия».

ask turtles with [group = "type1"] [plotxy c potential]
ask turtles with [group = "type2"] [plotxy c potential]

Я создал 100 черепах в двух группах со значениями переменных. с 'и' потенциал 'рассчитывается для каждой группы с использованием вашего кода. Но все это делается за один проход - каждая черепаха выполняет свои расчеты, а затем управление переходит к следующей черепахе по мере ее создания. Затем у меня есть каждое перо на графике, просто выведите значения из одной группы.

Полученное вами сообщение об ошибке «Вы не можете использовать c в контексте наблюдателя, потому что c только для черепах» означает, что выпопытался использовать переменную c, не сообщая NetLogo, какое значение черепахи 'c' вы хотите использовать.

...