This step demonstrates how to remove agents that were originally borrowed via an Agent Request but whose requests have been cancelled and about which information is no longer being received from the agents' home processes. Note that removing local agents- that is, removing agents from their home processes- is a completely different operation that will be covered in a later demonstration step.

The additional code to remove the agents after their requests are cancelled can be inserted into the cancelAgentRequests function:

void RepastHPCDemoModel::cancelAgentRequests(){
	int rank = repast::RepastProcess::instance()->rank();
	if(rank == 0) std::cout << "CANCELING AGENT REQUESTS" << std::endl;
	repast::AgentRequest req(rank);
	
	repast::SharedContext<RepastHPCDemoAgent>::const_state_aware_iterator non_local_agents_iter  = context.begin(repast::SharedContext<RepastHPCDemoAgent>::NON_LOCAL);
	repast::SharedContext<RepastHPCDemoAgent>::const_state_aware_iterator non_local_agents_end   = context.end(repast::SharedContext<RepastHPCDemoAgent>::NON_LOCAL);
	while(non_local_agents_iter != non_local_agents_end){
		req.addCancellation((*non_local_agents_iter)->getId());
		non_local_agents_iter++;
	}
        repast::RepastProcess::instance()->requestAgents<RepastHPCDemoAgent, RepastHPCDemoAgentPackage, RepastHPCDemoAgentPackageProvider, RepastHPCDemoAgentPackageReceiver>(context, req, *provider, *receiver, *receiver);
	
	std::vector<repast::AgentId> cancellations = req.cancellations();
	std::vector<repast::AgentId>::iterator idToRemove = cancellations.begin();
	while(idToRemove != cancellations.end()){
		context.importedAgentRemoved(*idToRemove);
		idToRemove++;
	}
}

Notice that the AgentRequest is itself used as the list of agents to be removed from the context. It is not a good idea to remove the agents using the context.importedAgentRemoved(AgentId) function while looping through the agent list using the iterator because the iterator will become invalid when an agent is removed.

The code produces output like:

 TICK 2
 BEFORE PLAY: 
AgentId(3, 0, 0, 0) 100 200
AgentId(4, 0, 0, 0) 100 200
AgentId(5, 0, 0, 0) 100 200
AgentId(6, 0, 0, 0) 100 200
AgentId(7, 0, 0, 0) 100 200
AgentId(0, 0, 0, 0) 100 200
AgentId(8, 0, 0, 0) 100 200
AgentId(1, 0, 0, 0) 100 200
AgentId(9, 0, 0, 0) 100 200
AgentId(2, 0, 0, 0) 100 200
AgentId(8, 3, 0, 3) 100 200
AgentId(2, 3, 0, 3) 100 200
AgentId(3, 1, 0, 1) 100 200
AgentId(4, 2, 0, 2) 100 200
AgentId(5, 2, 0, 2) 100 200
AgentId(5, 3, 0, 3) 100 200
AgentId(6, 1, 0, 1) 100 200
AgentId(6, 2, 0, 2) 100 200
AgentId(7, 1, 0, 1) 100 200
AgentId(7, 2, 0, 2) 100 200
AgentId(7, 3, 0, 3) 100 200
AgentId(8, 1, 0, 1) 100 200
AgentId(0, 3, 0, 3) 100 200
AgentId(1, 1, 0, 1) 100 200
AgentId(1, 2, 0, 2) 100 200
 AFTER PLAY, BEFORE SYNC: 
AgentId(3, 0, 0, 0) 114 224
AgentId(4, 0, 0, 0) 100 230
AgentId(5, 0, 0, 0) 100 223
AgentId(6, 0, 0, 0) 108 211
AgentId(7, 0, 0, 0) 114 224
AgentId(0, 0, 0, 0) 114 217
AgentId(8, 0, 0, 0) 108 211
AgentId(1, 0, 0, 0) 107 220
AgentId(9, 0, 0, 0) 114 217
AgentId(2, 0, 0, 0) 107 220
AgentId(8, 3, 0, 3) 100 200
AgentId(2, 3, 0, 3) 100 200
AgentId(3, 1, 0, 1) 100 200
AgentId(4, 2, 0, 2) 100 200
AgentId(5, 2, 0, 2) 100 200
AgentId(5, 3, 0, 3) 100 200
AgentId(6, 1, 0, 1) 100 200
AgentId(6, 2, 0, 2) 100 200
AgentId(7, 1, 0, 1) 100 200
AgentId(7, 2, 0, 2) 100 200
AgentId(7, 3, 0, 3) 100 200
AgentId(8, 1, 0, 1) 100 200
AgentId(0, 3, 0, 3) 100 200
AgentId(1, 1, 0, 1) 100 200
AgentId(1, 2, 0, 2) 100 200
 AFTER SYNC: 
AgentId(3, 0, 0, 0) 114 224
AgentId(4, 0, 0, 0) 100 230
AgentId(5, 0, 0, 0) 100 223
AgentId(6, 0, 0, 0) 108 211
AgentId(7, 0, 0, 0) 114 224
AgentId(0, 0, 0, 0) 114 217
AgentId(8, 0, 0, 0) 108 211
AgentId(1, 0, 0, 0) 107 220
AgentId(9, 0, 0, 0) 114 217
AgentId(2, 0, 0, 0) 107 220
AgentId(8, 3, 0, 3) 107 220
AgentId(2, 3, 0, 3) 108 218
AgentId(3, 1, 0, 1) 103 203
AgentId(4, 2, 0, 2) 102 212
AgentId(5, 2, 0, 2) 100 223
AgentId(5, 3, 0, 3) 108 218
AgentId(6, 1, 0, 1) 101 221
AgentId(6, 2, 0, 2) 101 214
AgentId(7, 1, 0, 1) 108 218
AgentId(7, 2, 0, 2) 109 209
AgentId(7, 3, 0, 3) 100 216
AgentId(8, 1, 0, 1) 114 224
AgentId(0, 3, 0, 3) 102 212
AgentId(1, 1, 0, 1) 100 223
AgentId(1, 2, 0, 2) 101 207
 TICK 3
 BEFORE PLAY: 
AgentId(3, 0, 0, 0) 114 224
AgentId(4, 0, 0, 0) 100 230
AgentId(5, 0, 0, 0) 100 223
AgentId(6, 0, 0, 0) 108 211
AgentId(7, 0, 0, 0) 114 224
AgentId(0, 0, 0, 0) 114 217
AgentId(8, 0, 0, 0) 108 211
AgentId(1, 0, 0, 0) 107 220
AgentId(9, 0, 0, 0) 114 217
AgentId(2, 0, 0, 0) 107 220
AgentId(8, 3, 0, 3) 107 220
AgentId(2, 3, 0, 3) 108 218
AgentId(3, 1, 0, 1) 103 203
AgentId(4, 2, 0, 2) 102 212
AgentId(5, 2, 0, 2) 100 223
AgentId(5, 3, 0, 3) 108 218
AgentId(6, 1, 0, 1) 101 221
AgentId(6, 2, 0, 2) 101 214
AgentId(7, 1, 0, 1) 108 218
AgentId(7, 2, 0, 2) 109 209
AgentId(7, 3, 0, 3) 100 216
AgentId(8, 1, 0, 1) 114 224
AgentId(0, 3, 0, 3) 102 212
AgentId(1, 1, 0, 1) 100 223
AgentId(1, 2, 0, 2) 101 207
 AFTER PLAY, BEFORE SYNC: 
AgentId(3, 0, 0, 0) 128 248
AgentId(4, 0, 0, 0) 107 250
AgentId(5, 0, 0, 0) 107 236
AgentId(6, 0, 0, 0) 116 222
AgentId(7, 0, 0, 0) 115 245
AgentId(0, 0, 0, 0) 116 229
AgentId(8, 0, 0, 0) 110 223
AgentId(1, 0, 0, 0) 108 234
AgentId(9, 0, 0, 0) 122 235
AgentId(2, 0, 0, 0) 122 235
AgentId(8, 3, 0, 3) 107 220
AgentId(2, 3, 0, 3) 108 218
AgentId(3, 1, 0, 1) 103 203
AgentId(4, 2, 0, 2) 102 212
AgentId(5, 2, 0, 2) 100 223
AgentId(5, 3, 0, 3) 108 218
AgentId(6, 1, 0, 1) 101 221
AgentId(6, 2, 0, 2) 101 214
AgentId(7, 1, 0, 1) 108 218
AgentId(7, 2, 0, 2) 109 209
AgentId(7, 3, 0, 3) 100 216
AgentId(8, 1, 0, 1) 114 224
AgentId(0, 3, 0, 3) 102 212
AgentId(1, 1, 0, 1) 100 223
AgentId(1, 2, 0, 2) 101 207
 AFTER SYNC: 
AgentId(3, 0, 0, 0) 128 248
AgentId(4, 0, 0, 0) 107 250
AgentId(5, 0, 0, 0) 107 236
AgentId(6, 0, 0, 0) 116 222
AgentId(7, 0, 0, 0) 115 245
AgentId(0, 0, 0, 0) 116 229
AgentId(8, 0, 0, 0) 110 223
AgentId(1, 0, 0, 0) 108 234
AgentId(9, 0, 0, 0) 122 235
AgentId(2, 0, 0, 0) 122 235
AgentId(8, 3, 0, 3) 114 233
AgentId(2, 3, 0, 3) 115 231
AgentId(3, 1, 0, 1) 104 217
AgentId(4, 2, 0, 2) 123 233
AgentId(5, 2, 0, 2) 101 237
AgentId(5, 3, 0, 3) 109 232
AgentId(6, 1, 0, 1) 108 241
AgentId(6, 2, 0, 2) 101 237
AgentId(7, 1, 0, 1) 116 236
AgentId(7, 2, 0, 2) 109 225
AgentId(7, 3, 0, 3) 100 232
AgentId(8, 1, 0, 1) 115 231
AgentId(0, 3, 0, 3) 104 217
AgentId(1, 1, 0, 1) 101 230
AgentId(1, 2, 0, 2) 109 225
CANCELING AGENT REQUESTS
 TICK 4
 BEFORE PLAY: 
AgentId(3, 0, 0, 0) 128 248
AgentId(4, 0, 0, 0) 107 250
AgentId(5, 0, 0, 0) 107 236
AgentId(6, 0, 0, 0) 116 222
AgentId(7, 0, 0, 0) 115 245
AgentId(0, 0, 0, 0) 116 229
AgentId(8, 0, 0, 0) 110 223
AgentId(1, 0, 0, 0) 108 234
AgentId(9, 0, 0, 0) 122 235
AgentId(2, 0, 0, 0) 122 235 Non-Local Agents are gone!
 AFTER PLAY, BEFORE SYNC: 
AgentId(3, 0, 0, 0) 128 271
AgentId(4, 0, 0, 0) 114 270
AgentId(5, 0, 0, 0) 114 256
AgentId(6, 0, 0, 0) 117 236
AgentId(7, 0, 0, 0) 123 263
AgentId(0, 0, 0, 0) 117 250
AgentId(8, 0, 0, 0) 111 244
AgentId(1, 0, 0, 0) 116 245
AgentId(9, 0, 0, 0) 130 246
AgentId(2, 0, 0, 0) 137 250
 AFTER SYNC: 
AgentId(3, 0, 0, 0) 128 271
AgentId(4, 0, 0, 0) 114 270
AgentId(5, 0, 0, 0) 114 256
AgentId(6, 0, 0, 0) 117 236
AgentId(7, 0, 0, 0) 123 263
AgentId(0, 0, 0, 0) 117 250
AgentId(8, 0, 0, 0) 111 244
AgentId(1, 0, 0, 0) 116 245
AgentId(9, 0, 0, 0) 130 246
AgentId(2, 0, 0, 0) 137 250
 TICK 5
 BEFORE PLAY: 
AgentId(3, 0, 0, 0) 128 271
AgentId(4, 0, 0, 0) 114 270
AgentId(5, 0, 0, 0) 114 256
AgentId(6, 0, 0, 0) 117 236
AgentId(7, 0, 0, 0) 123 263
AgentId(0, 0, 0, 0) 117 250
AgentId(8, 0, 0, 0) 111 244
AgentId(1, 0, 0, 0) 116 245
AgentId(9, 0, 0, 0) 130 246
AgentId(2, 0, 0, 0) 137 250
 AFTER PLAY, BEFORE SYNC: 
AgentId(3, 0, 0, 0) 142 295
AgentId(4, 0, 0, 0) 129 285
AgentId(5, 0, 0, 0) 121 269
AgentId(6, 0, 0, 0) 132 251
AgentId(7, 0, 0, 0) 130 290
AgentId(0, 0, 0, 0) 125 261
AgentId(8, 0, 0, 0) 113 256
AgentId(1, 0, 0, 0) 117 252
AgentId(9, 0, 0, 0) 145 261
AgentId(2, 0, 0, 0) 146 259
 AFTER SYNC: 
AgentId(3, 0, 0, 0) 142 295
AgentId(4, 0, 0, 0) 129 285
AgentId(5, 0, 0, 0) 121 269
AgentId(6, 0, 0, 0) 132 251
AgentId(7, 0, 0, 0) 130 290
AgentId(0, 0, 0, 0) 125 261
AgentId(8, 0, 0, 0) 113 256
AgentId(1, 0, 0, 0) 117 252
AgentId(9, 0, 0, 0) 145 261
AgentId(2, 0, 0, 0) 146 259
 TICK 6
 BEFORE PLAY: 
AgentId(3, 0, 0, 0) 142 295
AgentId(4, 0, 0, 0) 129 285
AgentId(5, 0, 0, 0) 121 269
AgentId(6, 0, 0, 0) 132 251
AgentId(7, 0, 0, 0) 130 290
AgentId(0, 0, 0, 0) 125 261
AgentId(8, 0, 0, 0) 113 256
AgentId(1, 0, 0, 0) 117 252
AgentId(9, 0, 0, 0) 145 261
AgentId(2, 0, 0, 0) 146 259
 AFTER PLAY, BEFORE SYNC: 
AgentId(3, 0, 0, 0) 149 315
AgentId(4, 0, 0, 0) 131 297
AgentId(5, 0, 0, 0) 121 285
AgentId(6, 0, 0, 0) 140 262
AgentId(7, 0, 0, 0) 132 302
AgentId(0, 0, 0, 0) 126 282
AgentId(8, 0, 0, 0) 115 261
AgentId(1, 0, 0, 0) 125 270
AgentId(9, 0, 0, 0) 145 277
AgentId(2, 0, 0, 0) 161 274
 AFTER SYNC: 
AgentId(3, 0, 0, 0) 149 315
AgentId(4, 0, 0, 0) 131 297
AgentId(5, 0, 0, 0) 121 285
AgentId(6, 0, 0, 0) 140 262
AgentId(7, 0, 0, 0) 132 302
AgentId(0, 0, 0, 0) 126 282
AgentId(8, 0, 0, 0) 115 261
AgentId(1, 0, 0, 0) 125 270
AgentId(9, 0, 0, 0) 145 277
AgentId(2, 0, 0, 0) 161 274
 TICK 7
 BEFORE PLAY: 
AgentId(3, 0, 0, 0) 149 315
AgentId(4, 0, 0, 0) 131 297
AgentId(5, 0, 0, 0) 121 285
AgentId(6, 0, 0, 0) 140 262
AgentId(7, 0, 0, 0) 132 302
AgentId(0, 0, 0, 0) 126 282
AgentId(8, 0, 0, 0) 115 261
AgentId(1, 0, 0, 0) 125 270
AgentId(9, 0, 0, 0) 145 277
AgentId(2, 0, 0, 0) 161 274
 AFTER PLAY, BEFORE SYNC: 
AgentId(3, 0, 0, 0) 149 331
AgentId(4, 0, 0, 0) 132 311
AgentId(5, 0, 0, 0) 121 301
AgentId(6, 0, 0, 0) 141 276
AgentId(7, 0, 0, 0) 146 326
AgentId(0, 0, 0, 0) 128 287
AgentId(8, 0, 0, 0) 115 277
AgentId(1, 0, 0, 0) 139 294
AgentId(9, 0, 0, 0) 146 291
AgentId(2, 0, 0, 0) 164 277
 AFTER SYNC: 
AgentId(3, 0, 0, 0) 149 331
AgentId(4, 0, 0, 0) 132 311
AgentId(5, 0, 0, 0) 121 301
AgentId(6, 0, 0, 0) 141 276
AgentId(7, 0, 0, 0) 146 326
AgentId(0, 0, 0, 0) 128 287
AgentId(8, 0, 0, 0) 115 277
AgentId(1, 0, 0, 0) 139 294
AgentId(9, 0, 0, 0) 146 291
AgentId(2, 0, 0, 0) 164 277