@Override public Object report(final Context context) throws LogoException { AgentSet sourceSet = argEvalAgentSet(context, 0); args[1].checkAgentSetClass(sourceSet, context); double winningValue = Double.MAX_VALUE; List<Agent> winners = new ArrayList<Agent>(); org.nlogo.nvm.Context freshContext = new org.nlogo.nvm.Context(context, sourceSet); for (AgentSet.Iterator iter = sourceSet.iterator(); iter.hasNext(); ) { org.nlogo.agent.Agent tester = iter.next(); Object result = freshContext.evaluateReporter(tester, args[1]); if (!(result instanceof Double)) { continue; } double dvalue = ((Double) result).doubleValue(); // need to be careful here to handle properly the case where // dvalue equals Double.MAX_VALUE - ST 10/11/04 if (dvalue <= winningValue) { if (dvalue < winningValue) { winningValue = dvalue; winners.clear(); } winners.add(tester); } } if (winners.isEmpty()) { return org.nlogo.api.Nobody$.MODULE$; } else { return winners.get(context.job.random.nextInt(winners.size())); } }
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; }
public double report_1(Context context, AgentSet sourceSet, Reporter block) throws LogoException { block.checkAgentSetClass(sourceSet, context); Context freshContext = new Context(context, sourceSet); int result = 0; for (AgentSet.Iterator iter = sourceSet.iterator(); iter.hasNext(); ) { Agent tester = iter.next(); Object value = freshContext.evaluateReporter(tester, block); if (!(value instanceof Boolean)) { throw new EngineException( context, this, I18N.errorsJ() .getN( "org.nlogo.prim.$common.expectedBooleanValue", displayName(), Dump.logoObject(tester), Dump.logoObject(value))); } if (((Boolean) value).booleanValue()) { result++; } } return result; }