在 AnyLogic 中删除具有特定参数值的代理
Removing agent with specific parameter value in AnyLogic
在一个模型中,我有两个代理群体:OriginalAgent
和 CopiedAgent
。它们是不同的代理类型。每个 CopiedAgent
都是从 OrginalAgent
复制的,并且它们共享 p_id
.
的相同值
我想要实现的是在 OriginalAgent
进入其状态图中的最终状态后删除 CopiedAgent
的一个实例。
我创建了一个函数 myfunction
,它在 OriginalAgent
的状态图中的最终状态的 Action
字段中调用。调用时函数出错,但它显示了我尝试过的内容:
int agent_index = 99999;
for(int i=0; i<main.CopiedAgent.size();i++){
if(p_id == main.CopiedAgent(i).p_id){
agent_index = main.CopiedAgent(i).p_id;
}
}
if(my_biopsy_index != 99999)
main.remove_CopiedAgent(agent_index);
我认为错误源于循环,因为如果我对特定索引值进行硬编码并注释掉循环,if 语句会按预期工作。
也许试试这个?
for(int i=0; i<main.CopiedAgent.size();i++){
if(p_id == main.CopiedAgent(i).p_id){
main.remove_CopiedAgent(i);
break;
}
}
在一个模型中,我有两个代理群体:OriginalAgent
和 CopiedAgent
。它们是不同的代理类型。每个 CopiedAgent
都是从 OrginalAgent
复制的,并且它们共享 p_id
.
我想要实现的是在 OriginalAgent
进入其状态图中的最终状态后删除 CopiedAgent
的一个实例。
我创建了一个函数 myfunction
,它在 OriginalAgent
的状态图中的最终状态的 Action
字段中调用。调用时函数出错,但它显示了我尝试过的内容:
int agent_index = 99999;
for(int i=0; i<main.CopiedAgent.size();i++){
if(p_id == main.CopiedAgent(i).p_id){
agent_index = main.CopiedAgent(i).p_id;
}
}
if(my_biopsy_index != 99999)
main.remove_CopiedAgent(agent_index);
我认为错误源于循环,因为如果我对特定索引值进行硬编码并注释掉循环,if 语句会按预期工作。
也许试试这个?
for(int i=0; i<main.CopiedAgent.size();i++){
if(p_id == main.CopiedAgent(i).p_id){
main.remove_CopiedAgent(i);
break;
}
}