12 #include "../Landscape/ls.h"
14 #include "../BatchALMaSS/PopulationManager.h"
58 if (m_memorylocations.size() == 0)
60 m_memorylocations.push_back(a_gml);
64 std::vector<GooseMemoryLocation>::iterator ci;
65 for (ci = m_memorylocations.begin(); ci != m_memorylocations.end(); ++ci)
67 if (ci->m_polygonid>polyid)
69 m_memorylocations.insert(ci, a_gml);
72 if (ci->m_polygonid == polyid)
83 m_memorylocations.push_back(a_gml);
93 for (std::vector<GooseMemoryLocation>::iterator ci = m_memorylocations.begin(); ci != m_memorylocations.end(); ++ci)
95 if (ci->m_polygonid == a_polyid)
97 m_memorylocations.erase(ci);
110 std::vector<GooseMemoryLocation>::iterator it;
111 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); ++it)
113 if (it->m_polygonid == a_polyid)
115 it->m_foodresource += a_foodres;
128 std::vector<GooseMemoryLocation>::iterator it;
129 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); ++it)
131 if (it->m_polygonid == a_polyid)
133 it->m_threat += a_threat;
146 std::vector<GooseMemoryLocation>::iterator it;
147 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); ++it)
149 if (it->m_polygonid == a_polyid)
151 it->m_foodresource *= a_foodres;
167 std::vector<GooseMemoryLocation>::iterator it;
168 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); ++it)
170 if (it->m_polygonid == a_polyid)
172 it->m_grain = a_grain;
173 it->m_maize = a_maize;
174 it->m_grazing = a_grazing;
175 it->m_foodresource = m_myOwner->GetMaxIntakeRate(a_grain, a_maize, a_grazing);
176 APoint roost = m_myOwner->GetRoost();
178 it->m_score = CalcScore(dist, it->m_foodresource, it->m_threat);
192 std::vector<GooseMemoryLocation>::iterator it;
193 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); ++it)
195 if (it->m_polygonid == a_polyid)
197 it->m_threat *= a_threat;
211 std::vector<GooseMemoryLocation>::const_iterator ci;
212 for (ci = m_memorylocations.begin(); ci != m_memorylocations.end(); ++ci)
214 if (ci->m_polygonid == a_polyid)
return ci->m_foodresource;
216 GooseMemoryError(
"Polygonid not found", a_polyid);
226 std::vector<GooseMemoryLocation>::const_iterator ci;
227 for (ci = m_memorylocations.begin(); ci != m_memorylocations.end(); ++ci)
229 if (ci->m_polygonid == a_polyid)
return ci->m_threat;
231 GooseMemoryError(
"Polygonid not found", a_polyid);
246 double score = -9999.0;
247 if (m_memorylocations.size()<1)
254 std::vector<GooseMemoryLocation>::iterator ci, ci_best;
255 for (ci = m_memorylocations.begin(); ci != m_memorylocations.end(); ++ci)
257 if (ci->m_score>score)
275 double cost = a_dist * m_myOwner->GetFlightCost();
276 double score = (a_foodresource * m_expectedforagingtime) - cost;
277 score = score * (1 - a_threat);
285 std::vector<GooseMemoryLocation>::iterator it;
286 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); ++it)
289 if (it->m_polygonid == a_polyid)
return true;
304 vector<GooseMemoryLocation>::iterator it;
305 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); it++)
308 it->m_threat *= m_threatdecayrate;
311 int rx = m_myOwner->GetRoost().m_x;
312 int ry = m_myOwner->GetRoost().m_y;
314 double flightcost = m_myOwner->GetFlightCost();
315 it->CalcScore(dist, flightcost, m_expectedforagingtime);
318 m_memorylocations.erase(remove_if(m_memorylocations.begin(), m_memorylocations.end(),
IsMarkedToDelete), m_memorylocations.end());
325 double theThreat = 0.0;
327 std::vector<GooseMemoryLocation>::iterator it;
328 for (it = m_memorylocations.begin(); it != m_memorylocations.end(); ++it)
331 theThreat += it->m_threat;
337 m_memorylocations.erase(m_memorylocations.begin(), m_memorylocations.end());
344 std::ofstream ofile(
"GooseMemoryMapError.txt", std::ios::app | std::ios::out);
345 ofile << a_str <<
':' << a_value << std::endl;
347 std::vector<GooseMemoryLocation>::iterator ci;
348 ofile <<
"polygonid" <<
'\t' <<
"m_x" <<
'\t' <<
"m_y" <<
'\t' <<
"foodresource" <<
'\t' <<
"threat" << std::endl;
349 for (ci = m_memorylocations.begin(); ci != m_memorylocations.end(); ++ci)
351 ofile << ci->m_polygonid <<
'\t' << ci->m_x <<
'\t' << ci->m_y <<
'\t' << ci->m_foodresource <<
'\t' << ci->m_threat << std::endl;