просить красных черепах избегать других черепах и переместиться к одному из его соседей, который пуст и имеет наибольшую концентрацию

Я новичок в Netlogo. Вот я пытаюсь попросить красных черепах подойти к холму. патчи. желтые черепахи не двигаются. Я это сделал! но я также хочу попросить красных черепах избегать участков, на которых изображены желтые или красные черепахи, и двигаться к соседу с высокой концентрацией. В моем коде я просил их остановиться, как только они окажутся рядом с занятым участком только потому, что я не мог этого сделать. Я также хочу, чтобы две черепахи не появлялись на одном участке в любое время. Кто-нибудь может помочь мне с этим, пожалуйста?

    patches-own [conc] 

to set-up
clear-all
ask patch random-pxcor random-pycor [
set conc 200
set pcolor scale-color red conc 0 1]
crt 5 [setxy random-xcor random-ycor  set shape "circle" set color red]
crt 20 [setxy random-xcor random-ycor set shape "circle" set color yellow]
reset-ticks
end




to go
diffuse conc 0.1
ask patches [set pcolor scale-color red conc 0 1]
ask turtles with [color = red]
[ifelse  not any? turtles-on neighbors
[if [conc] of max-one-of neighbors [conc]  > conc [
face max-one-of neighbors4 [conc]
 move-to max-one-of neighbors4 [conc]]]

[stop]

]

tick

end

person Fehaid    schedule 17.11.2013    source источник
comment
прости @Fiver, я не получил твоего комментария!   -  person Fehaid    schedule 17.11.2013


Ответы (1)


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

let target max-one-of neighbors [conc]
if [conc] of target > conc [
  face target
  move-to target
]

Для некоторых различных возможных подходов к применению правила «одна черепаха на патч» см. Модель «Одна черепаха на патч» в разделе «Примеры кода» библиотеки моделей NetLogo.

Я предполагаю, что ifelse not any? turtles-on neighbors это ваша попытка заставить черепах избегать занятых участков. Но, как вы это написали, он имеет более сильный эффект, чем этот - он делает так, что любая черепаха с соседним занятым участком вообще не двигается.

Я думаю, вы могли иметь в виду нечто большее, вроде:

ask turtles with [color = red] [
  let targets neighbors with [not any? turtles-here]
  let target max-one-of targets [conc]
  if target != nobody and [conc] of target > conc [
    face target
    move-to target
  ]
]

Надеюсь это поможет.

person Seth Tisue    schedule 18.11.2013
comment
Спасибо @Seth за вашу помощь - person Fehaid; 19.11.2013