Transporter 是否能够检测到另一个代理?
Is Transporter able to detect another agent?
我正在模拟挖掘机的公用事业罢工。我将挖掘机建模为具有自由 space 运动的运输车。我有另一个名为 Utility 的代理。 Utility 的人口称为 utilities.
我想计算运输工具的公用事业罢工。运输车是有检测能力的,比如|Z(transporter) - Z(utility)| <= 3
就不会出事!但是如果|Z(transporter) - Z(utility)| > 3
会发生罢工,运输车需要停止工作一段时间,比如2分钟,然后重新开始工作。
我创建了一个名为 v_utilityStrikeNumber 的变量和一个名为 e_checkUtilitystrike 的事件。这是@Benjamin 为其他人建议的。我为事件 Action 编写了以下代码。
for (Utility u: main.utilities){
dist = distanceTo(u);
return dist;
}
if (dist <= 3){
main.utilities_remove(u);
}
else{
v_utilityStrikeNumber += 1;
u.v_isUtilityStrike = true;
state_excavator.receiveMessage("interrupt");
}
我收到以下错误:
- u 无法解析为变量
- dist 无法解析为变量
- 你的类型不可见
你能告诉我如何解决它们吗?谢谢。
错误主要是编码错误。让我们一一解决:
u只能在第一个for循环内访问,不能在for循环外再次使用。 u 是每个循环迭代中的不同实用程序。那么,当您跳出循环时,您指的是哪个实用程序?如果您打算在 for 循环内继续,例如检查每个实用程序的 dist 是否小于 3,那么在结束之前不要关闭 for 循环。
您的模型中似乎没有名为 dist 的变量?因此,只需在第一次引入 dist 之前添加 double
。
1 我相信应该可以解决这个问题。
因此您的代码将如下所示:
for (Utility u: main.utilities){
double dist = 0;
dist = distanceTo(u);
if (dist <= 3){
main.remove_utilities(u);
}
else{
v_utilityStrikeNumber += 1;
u.v_isUtilityStrike = true;
state_excavator.receiveMessage("interrupt");
}
}
试试这个,如果仍然有错误请告诉我。
我正在模拟挖掘机的公用事业罢工。我将挖掘机建模为具有自由 space 运动的运输车。我有另一个名为 Utility 的代理。 Utility 的人口称为 utilities.
我想计算运输工具的公用事业罢工。运输车是有检测能力的,比如|Z(transporter) - Z(utility)| <= 3
就不会出事!但是如果|Z(transporter) - Z(utility)| > 3
会发生罢工,运输车需要停止工作一段时间,比如2分钟,然后重新开始工作。
我创建了一个名为 v_utilityStrikeNumber 的变量和一个名为 e_checkUtilitystrike 的事件。这是@Benjamin 为其他人建议的。我为事件 Action 编写了以下代码。
for (Utility u: main.utilities){
dist = distanceTo(u);
return dist;
}
if (dist <= 3){
main.utilities_remove(u);
}
else{
v_utilityStrikeNumber += 1;
u.v_isUtilityStrike = true;
state_excavator.receiveMessage("interrupt");
}
我收到以下错误:
- u 无法解析为变量
- dist 无法解析为变量
- 你的类型不可见
你能告诉我如何解决它们吗?谢谢。
错误主要是编码错误。让我们一一解决:
u只能在第一个for循环内访问,不能在for循环外再次使用。 u 是每个循环迭代中的不同实用程序。那么,当您跳出循环时,您指的是哪个实用程序?如果您打算在 for 循环内继续,例如检查每个实用程序的 dist 是否小于 3,那么在结束之前不要关闭 for 循环。
您的模型中似乎没有名为 dist 的变量?因此,只需在第一次引入 dist 之前添加
double
。1 我相信应该可以解决这个问题。
因此您的代码将如下所示:
for (Utility u: main.utilities){
double dist = 0;
dist = distanceTo(u);
if (dist <= 3){
main.remove_utilities(u);
}
else{
v_utilityStrikeNumber += 1;
u.v_isUtilityStrike = true;
state_excavator.receiveMessage("interrupt");
}
}
试试这个,如果仍然有错误请告诉我。