package tasks; import internetz.Agent; import internetz.Skill; import internetz.Task; import java.util.ArrayList; import java.util.Collection; import java.util.Map; import java.util.Random; import logger.PjiitOutputter; import strategies.Aggregate; public class ArgMinMax { private Map<String, Task> tasks; public ArgMinMax(Map<String, Task> tasks){ this.tasks = tasks; } public Task concludeMath(Agent agent){ ArrayList<Task> tasksWithMatchingSkillsMinMax = new ArrayList<Task>(); Collection<Skill> allAgentSkillsPreMinMax = agent.getSkills(); Task chosen = null; for (Task singleTaskFromPool : tasks.values()) { for (Skill singleSkill : allAgentSkillsPreMinMax) { if (singleTaskFromPool.getTaskInternals().containsKey( singleSkill.toString())) { tasksWithMatchingSkillsMinMax.add(singleTaskFromPool); } } } if (tasksWithMatchingSkillsMinMax.size() < 1) { say("Didn't found task with such skills which agent have!"); return chosen; } Collection<Skill> allAgentSkillsMinMax = agent.getSkills(); Random generator = new Random(); Task randomValue = tasksWithMatchingSkillsMinMax.get(generator .nextInt(tasksWithMatchingSkillsMinMax.size())); Task argMaxMax = randomValue; Task argMaxMin = randomValue; Task argMinMax = randomValue; Task argMinMin = randomValue; for (Task singleTaskFromPool : tasks.values()) { boolean consider = false; for (Skill singleSkill : allAgentSkillsMinMax) { if (singleTaskFromPool.getTaskInternals().containsKey( singleSkill.toString())) { consider = true; break; } } if (consider) { Aggregate aggregate = singleTaskFromPool.argmaxmin(); assert aggregate != null; switch (agent.getStrategy().taskMinMaxChoice) { case ARGMAX_ARGMAX: if (aggregate.argmax > argMaxMax.argmax()) { argMaxMax = singleTaskFromPool; } chosen = argMaxMax; break; case ARGMAX_ARGMIN: if (aggregate.argmin > argMaxMax.argmin()) { argMaxMin = singleTaskFromPool; } chosen = argMaxMin; break; case ARGMIN_ARGMAX: if (aggregate.argmax < argMaxMax.argmax()) { argMinMax = singleTaskFromPool; } chosen = argMinMax; break; case ARGMIN_ARGMIN: if (aggregate.argmin < argMaxMax.argmin()) { argMinMin = singleTaskFromPool; } chosen = argMinMin; break; default: assert false; // should never happen break; } } } return chosen; } private static void say(String s) { PjiitOutputter.say(s); } }