根据业务代表的邻居位置设计一个业务代表的移动。我们通常会参加这个控制协议:
x'_i(t) = ai1*x_i(t)+ +aij*x_j(t) ; j=1,..,N,
N
是i
的总邻居。aij
:是常数(设计系数)。最后我们来解决这个等式:
x'(t) = Ax(t) : A is a design matrix, x is the position of the agent.
最简单的案例之一可能是:(x,y
是邻居)
x'(t) = x(t) + 2y(t)
y'(t) = 2x(t) + y(t)
有没有任何数值方法可以解决这个等式。因此,在每个滴答时间,我都可以显示x(t)
和y(t)
。
在matlab中我们有ode45求解器来做这个。但是使用Netlogo我不知道如何。使用Runge-Kutta方法,它只能使用一个变量x(t) = f(x,t)
。
答案 0 :(得分:4)
NetLogo在处理时间方面本质上是离散的,而不是连续的。它也是以代理为中心的(因此从代理的角度制定模型规则,而不是外部的人)。
将其视为差异方程式。您可以为每个代理存储属性(在您的情况下:x,x-prime)。确定了邻居的含义(例如最近的代理,随机选择的链接另一端的代理),然后直接计算x-prime的新值并将代理的变量设置为该值。
如果您希望所有内容同时更新,您的代码可能如下所示:
turtles-own
[ x
x-prime
next-x
next-x-prime
]
to setup
clear-all
create-turtles 10
[ setxy random-xcor random-ycor
set x random-float 10
set x-prime random-float 10
]
reset-ticks
end
to go
ask turtles
[ let partner one-of other turtles
set next-x x + x-prime
set next-x-prime x + 2 * [x] of partner * [x-prime] of partner
]
ask turtles
[ set x next-x
set x-prime next-x-prime
]
tick
end