package strategies; import internetz.Agent; import strategies.Strategy.SkillChoice; import strategies.Strategy.TaskChoice; import strategies.Strategy.TaskMinMaxChoice; import constants.ModelFactory; import repast.simphony.random.RandomHelper; public class StrategyDistribution { public static final int SINGULAR = 0; public static final int MULTIPLE = 1; private String[] taskChoiceSet = { "homophyly", "homophyly_experience", "heterophyly", "preferential", "heterophyly_experience", "random", "social_vector", "machine_learned", "comparision", "minmax", "central" }; private String[] skillChoiceSet = { "proportional", "greedy", "choice", "random" }; private String[] taskMinMaxChoiceSet = { "maxmax", "maxmin", "minmax", "minmin" }; private int type; private String skillChoice; private String taskChoice; private String taskMinMaxChoice; public TaskChoice getTaskStrategy(Agent agent) { if (type == 0) { if (taskChoice.equals(taskChoiceSet[0])) { return Strategy.TaskChoice.HOMOPHYLY_CLASSIC; } else if (taskChoice.equals(taskChoiceSet[1])) { return Strategy.TaskChoice.HOMOPHYLY_EXP_BASED; } else if (taskChoice.equals(taskChoiceSet[2])) { return Strategy.TaskChoice.HETEROPHYLY_CLASSIC; } else if (taskChoice.equals(taskChoiceSet[3])) { return Strategy.TaskChoice.PREFERENTIAL; } else if (taskChoice.equals(taskChoiceSet[4])) { return Strategy.TaskChoice.HETEROPHYLY_EXP_BASED; } else if (taskChoice.equals(taskChoiceSet[5])) { return Strategy.TaskChoice.RANDOM; } else if (taskChoice.equals(taskChoiceSet[6])) { return Strategy.TaskChoice.SOCIAL_VECTOR; } else if (taskChoice.equals(taskChoiceSet[7])) { return Strategy.TaskChoice.MACHINE_LEARNED; } else if (taskChoice.equals(taskChoiceSet[8])) { return Strategy.TaskChoice.COMPARISION; } else if (taskChoice.equals(taskChoiceSet[9])) { return Strategy.TaskChoice.ARG_MIN_MAX; } else if (taskChoice.equals(taskChoiceSet[10])) { return Strategy.TaskChoice.CENTRAL_ASSIGNMENT; } } return null; } public SkillChoice getSkillStrategy(Agent agent) { if (type == 0) { if (skillChoice.equals(skillChoiceSet[0])) { return Strategy.SkillChoice.PROPORTIONAL_TIME_DIVISION; } else if (skillChoice.equals(skillChoiceSet[1])) { return Strategy.SkillChoice.GREEDY_ASSIGNMENT_BY_TASK; } else if (skillChoice.equals(skillChoiceSet[2])) { return Strategy.SkillChoice.CHOICE_OF_AGENT; } else if (skillChoice.equals(skillChoiceSet[3])) { return Strategy.SkillChoice.RANDOM; } } return null; } public String getSkillChoice() { return skillChoice; } public void setSkillChoice(String skillChoice) { this.skillChoice = skillChoice; } public void setSkillChoice(ModelFactory modelFactory, String skillChoice) { if (modelFactory.getFunctionality().isMultipleValidation()) { int intRandomized = RandomHelper.nextIntFromTo(0, skillChoiceSet.length - 1); assert (intRandomized >= 0) && (intRandomized <= skillChoiceSet.length - 1); this.skillChoice = skillChoiceSet[intRandomized]; } else this.skillChoice = skillChoice; } public String getTaskChoice() { return taskChoice; } public void setTaskChoice(String taskChoice) { this.taskChoice = taskChoice; } public void setTaskChoice(ModelFactory modelFactory, String taskChoice) { if (modelFactory.getFunctionality().isMultipleValidation()) { int intRandomized = RandomHelper.nextIntFromTo(0, taskChoiceSet.length - 1); assert (intRandomized >= 0) && (intRandomized <= taskChoiceSet.length - 1); this.taskChoice = taskChoiceSet[intRandomized]; } else this.taskChoice = taskChoice; } public int getType() { return type; } public void setType(int type) { this.type = type; } public TaskMinMaxChoice getTaskMaxMinStrategy(Agent agent) { if (type == 0) { if (taskMinMaxChoice.equals("maxmax")) { return Strategy.TaskMinMaxChoice.ARGMAX_ARGMAX; } else if (taskMinMaxChoice.equals("maxmin")) { return Strategy.TaskMinMaxChoice.ARGMAX_ARGMIN; } else if (taskMinMaxChoice.equals("minmax")) { return Strategy.TaskMinMaxChoice.ARGMIN_ARGMAX; } else if (taskMinMaxChoice.equals("minmin")) { return Strategy.TaskMinMaxChoice.ARGMIN_ARGMIN; } } return null; } public String getTaskMinMaxChoice() { return taskMinMaxChoice; } public void setTaskMinMaxChoice(String taskMinMaxChoice) { this.taskMinMaxChoice = taskMinMaxChoice; } public void setTaskMinMaxChoice(ModelFactory modelFactory, String taskMinMaxChoice) { if (modelFactory.getFunctionality().isMultipleValidation()) { int intRandomized = RandomHelper.nextIntFromTo(0, taskMinMaxChoiceSet.length - 1); assert (intRandomized >= 0) && (intRandomized <= taskChoiceSet.length - 1); this.taskMinMaxChoice = taskMinMaxChoiceSet[intRandomized]; } else this.taskMinMaxChoice = taskMinMaxChoice; } }