public void perform_1(final Context context) { Turtle turtle = (Turtle) context.agent; turtle.moveToPatchCenter(); Patch patch = turtle.getPatchHere(); double winningValue = Double.MAX_VALUE; List<Patch> winners = new ArrayList<Patch>(); for (AgentSet.Iterator it = patch.getNeighbors4().iterator(); it.hasNext(); ) { Patch tester = (Patch) it.next(); Object value = tester.getPatchVariable(reference.vn()); if (!(value instanceof Double)) { continue; } double dvalue = ((Double) value).doubleValue(); // need to be careful here to handle properly the case where // dvalue equals Double.MAX_VALUE - ST 10/11/04, 1/6/07 if (dvalue <= winningValue) { if (dvalue < winningValue) { winningValue = dvalue; winners.clear(); } winners.add(tester); } } if (!winners.isEmpty() && (!(patch.getPatchVariable(reference.vn()) instanceof Double) || winningValue < ((Double) patch.getPatchVariable(reference.vn())).doubleValue())) { Patch winner = winners.get(context.job.random.nextInt(winners.size())); turtle.face(winner, true); try { turtle.moveTo(winner); } catch (AgentException ex) { // should be impossible throw new IllegalStateException(ex); } } context.ip = next; }