Как использовать вычисленную переменную A, принадлежащую черепахе, для вычисления другой переменной B, принадлежащей черепахе
В моей программе каждая черепаха (а именно глюкоза и бактерии) имеет свою переменную, называемую массой. Процедура настройки гласит, что начальная масса глюкозы и бактерий составляет 1 ммоль. Точная процедура говорит о том, что глюкоза будет гидролизована и разделена. Таким образом, глюкоза_масса будет отличаться от первоначального 1 ммоль. Точная процедура для бактерий гласит, что когда бактерии съедают одну глюкозу, масса бактерий вырастет от первоначального 1 ммоль плюс масса глюкозы (стохастическое число, определенное в процедуре делить_гидролизованная_глюкоза), которую она потребляла раз фиксированное число (то есть 0,3). Я попытался использовать команду "себя", чтобы включить переменную другой черепахи в бактериальную черепаху. Однако, это дает мне ошибку, говоря, что "OF ожидал, что этот вход будет репортерским блоком, но получил вместо него переменную или что-нибудь еще".
Любые комментарии или предложения по этому вопросу?
Breed [glucose a-glucose];; Food
Breed [bacteria a-bacteria] ;; Predator
glucose-own [glucose_mass]
Bacteria-own [Bacteria_mass]
установить
;;;;;; ГЛЮКОЗЫ
set-default-shape glucose "circle"
Create-glucose (8) ;; Create the glucose available in mmol/d,
[set glucose_mass (1) ;; in mmol
]
;;; БАКТЕРИИ;;;
Create-Bacteria (8) ;; Create the clostridiales in mmol
[set Batceria_mass (1)
]
end
идти
ask glucose
[
Hydrolyse_glucose
Divide_hydrolyzed_glucose
]
ask Bacteria
[ Bacteria_eat_glucose]
to hydrolyse_glucose
if (glucose_mass < 200) [
set glucose_mass ((glucose_mass * 0.025 + random-float 32.975) / 24)
]
end
to divide_hydrolyzed_glucose
if (glucose_mass > 1)
[
set glucose_mass (glucose_mass / 2)
hatch 1
]
end
to Bacteria_eat_glucose
let prey one-of glucose-here
if prey != nobody
[ask prey [die]
set Bacteria_mass (Bacteria_mass + ((glucose_mass of myself) * 0.3))
]
end
1 ответ
Поначалу сообщение об ошибке может показаться трудным для интерпретации, но оно точно говорит вам, что не так: of
Примитив хотел блок репортера, но вместо этого вы дали ему переменную.
Так что вам нужно:
[ glucose_mass ] of myself
Квадратные скобки сообщают NetLogo, что glucose_mass
должен быть заключен в "блок репортера", то есть то, что может быть запущено в другом контексте (в этом случае [ glucose_mass ]
будет выполняться в контексте myself
.)
Однако при более внимательном рассмотрении кода кажется, что myself
это не то, что вам нужно. myself
примитив используется для обращения к агенту из "внешнего" контекста... когда он есть, а здесь это не так.
Я бы предложил вам реструктурировать Bacteria_eat_glucose
процедура такая:
to Bacteria_eat_glucose
let prey one-of glucose-here
if prey != nobody [
set Bacteria_mass Bacteria_mass + [ glucose_mass * 0.3 ] of prey
ask prey [ die ]
]
end
Несколько вещей, на которые стоит обратить внимание:
myself
был замененprey
;- блок репортера по-прежнему заключен в квадратные скобки;
- Я поставил
* 0.3
внутри блока репортера, потому что мне легче читать, но[ glucose_mass ] of prey * 0.3
было бы так же хорошо; -
set Bacteria_mass ...
линия должна прийти, прежде чем жертва умрет, в противном случаеglucose_mass
жертвы больше не будут доступны.