Netlogo - Заполнение соседних участков черепахами определенного цвета до полного заполнения

Я пытаюсь попросить белых черепах создать желтых черепах на одной из 8 пустых соседних областей. Если свободного места нет, черепаха ничего не должна производить. Примечание: белые черепахи остаются белыми и производят желтых черепах, которые способны воспроизводить самих себя, как и другие желтые черепахи. Подводя итог, в конце я хотел бы заполнить черные пространства желтыми черепахами.

breed [ cells cell ]
cells-own [ n ]

to setup
  clear-all
  set-default-shape cells "square"
  ask patches [ if pycor = min-pycor [sprout-cells 1]]
  ask cells [ ifelse random 10 < 2 [set color white] [set color yellow]]

Спасибо за ответ.

Я объясню, что пытаюсь сделать:

  1. Белые квадраты представляют собой «стволовые клетки», которые обладают способностью воспроизводить себя и производить клетки другого типа (например, ТА-клетки), так что изначально каждая белая клетка будет производить другую клетку над собой или в одном из своих углов.
  2. На втором этапе каждая ячейка ТА произвольно производит другие ячейки в любом пустом пространстве вокруг нее.
  3. В-третьих, стволовые клетки (белые квадраты) повторяют шаг 1, и в то же время ТА-клетки заполняют одно из пустых пространств вокруг себя. Клетки (как стволовые, так и ТА-клетки) перестают производить новые клетки, если вокруг них не остается пустого пространства (когда 8 соседей уже заполнены).
  4. На заключительном этапе все черное пространство должно быть заполнено ячейками ТА. Желтые квадраты в последнем ряду практически ничего не делают.

В очередной раз благодарим за помощь.

  reset-ticks
end

to go
  ask cells
    [ set n count neighbors with [pcolor = yellow] ]
  ask cells
    [ if n >= 1
      [ set color yellow] ]
  tick
  ;ask cells 
  ;[if ticks = 10
    ;[set color yellow]]
end

person Fehaid    schedule 05.11.2012    source источник


Ответы (1)


Что именно вы пытаетесь сделать, мне не совсем понятно. Я собираюсь пойти с вероятной интерпретацией, но независимо от того, верна ли моя интерпретация, вам следует попытаться прояснить свой вопрос.

Пытаясь понять ваш код, мне кажется, что есть небольшая путаница между patches и turtles. В вашей go процедуре вы просите cells стать желтым, если у них есть желтый сосед. Я думаю, что вы хотите, чтобы желтый квадрат появлялся на участках, соседствующих с желтыми квадратами. На пустых участках, которые вы пытаетесь заполнить, еще нет cells, поэтому желтый цвет ask cells вам здесь не поможет.

Если вы действительно хотите использовать cell агентов, сохраняя текущую setup процедуру, вы можете сделать что-то вроде:

to go
  ask patches with [not any? turtles-here] [
    if any? neighbors with [any? turtles-here] [
      sprout-cells 1 [
        set color yellow
      ]
    ]
  ]
end

(Если вы хотите, чтобы ваши ячейки росли только снизу вверх, вы должны отключить перенос в настройках представления, щелкнув правой кнопкой мыши на представлении и выбрав Edit...)

Совершенно другой подход, который может быть проще, если все, что вам нужно, это какой-то клеточный автомат, - это отказаться от агентов и работать только с заплатами. Это даст вам что-то вроде:

to setup
  clear-all
  ask patches [
    if pycor = min-pycor [
      ifelse random 10 < 2 
        [set pcolor white]
        [set pcolor yellow]  
    ]
  ]
  reset-ticks
end

to go
  ask patches with [pcolor = black] [
    if any? neighbors with [pcolor = yellow or pcolor = white] [
      set pcolor yellow
    ]
  ]
  tick
end

Оба подхода действительны. Первый визуально немного приятнее. Второй вариант немного проще, потому что черепахи вам совсем не нужны. Это зависит от того, чем вы в конечном итоге хотите заниматься.

person Nicolas Payette    schedule 05.11.2012