2017-07-27 25 views
2

如何阻止我的海龟在NetLogo上堆积起来?如何阻止我的海龟在NetLogo上堆积起来?

我需要我的海龟移动,但不是彼此顶部,并停止堆放。

我已经尝试用下面的代码:

to go ask turtles [ let empty-patches neighbors with [not any? turtles-here] 

if (breed = ricos) [ 
face one-of patches with [ price = 1000 ] 
if any? empty-patches [ 
    fd 1 ] 
    ] 
if (breed = pobres) [ 
face one-of patches with [ price = 1000 ] 
if any? empty-patches [ 
fd 1 ] 
] 
    if (breed = medias)[ 
    if any? empty-patches [ 
    face one-of patches with [ price = 1000 ] 
fd 1] 

] 
] 

end 

to move-to-empty-one-of [locations] 

    move-to one-of locations 
    while [any? other turtles-here] [ 
    move-to one-of locations 
    ] 
end 

但他们仍然堆积如山。

+2

你是否因为海龟而失望? –

回答

3

欢迎来到Stack Overflow!提供代码的minimal complete verifiable example通常很有帮助,因此它很容易重现 - 这将增加您获得有用答案的机会。

如果你已经设置了进入龟品种(breed [ ricos rico ]),你就可以说ask ricos [ ...

你的地方打电话给你move-to-empty-one-of [locations]程序?它在示例代码中没有被调用,所以这个可能帮助乌龟堆栈的过程没有运行。

一个笔记记录你的代码说是这样的:
- 空补丁是邻居的补丁没有龟
- 如果有任何空补丁,前进1

- 人脸与价格1000年
补丁之一

问题在于neighbors包含当前乌龟周围的8个空单元。所以,当你说if any? empty-patches [ ...时,可能会有至少一个空的补丁,所以龟几乎总是向前移动。这是一种替代方法可能会为你工作:

breed [ ricos rico ] 
patches-own [ price ] 

to setup 
    ca 
    reset-ticks 

    ask n-of 20 patches [ 
    set price 1000 
    set pcolor grey + 2 
    ] 
    create-ricos 20 [ 
    set color random 3 + 63 
    setxy random-xcor random-ycor 
    ] 
end 


to go 

    ask ricos [ 
    ifelse [price] of patch-here != 1000 or any? other turtles-here [ 
     let target min-one-of patches with [ price = 1000 and not any? turtles-here ] [ distance myself] 
     face target 
     fd 1 
    ] 
    [ 
     move-to patch-here 
    ] 
    ] 
    tick 
end 

这是通过具有ricos(在这个例子中)检查它们是否在与price不等于1000或与其它龟打了补丁的当下。如果他们是,他们将面临与price = 1000最近的补丁,并且该补丁上没有龟。然后,他们会走向那个补丁。如果另一只乌龟在那里击败他们,他们将重新评估并面对满足这些条件的新补丁。

+0

我试图让我的海龟(以及我的模型中的3个品种)去补丁价格= 1000 [目标]。我想让另一只乌龟不可能移动到与其他乌龟相同的地方,一旦我的第一只乌龟到达目标,我希望它停留并不再移动。 –

+0

我正在尝试下面的代码: 要去 问龟儿[ 补丁这里的ifelse [价格]!= 1000或任何?其他海龟在这里[ ]让目标最低限度的补丁与[价格= 1000,而不是任何?龟-这里] [距离自己] 面目标 FD 1 ] [ 移动到补丁这里 ] ] –

+0

并没有说给你一个错误?那个代码有什么问题?在我的示例代码中,我相信海龟会像你说的那样做。 –