package algorithms.geneticAlgorithm.holegGA.Components; import ui.controller.Control; import ui.controller.SimulationManager; import ui.model.Model; import classes.AbstractCpsObject; import classes.HolonObject; import classes.SubNet; import algorithms.geneticAlgorithm.Components.GAFittnessFunctionStrategy; import algorithms.geneticAlgorithm.holegGA.ParameterArray; public class HolegFittnessFkt implements GAFittnessFunctionStrategy{ Control controller; Model model; SimulationManager simManager; ParameterArray params; double suppliedPoints; double oversuppliedPoints; double undersuppliedPoints; double partiallysuppliedPoints; boolean everyoneSupplied; public HolegFittnessFkt(Control controller){ model = new Model(); simManager = new SimulationManager(model); } @Override public double calculateFittness(HolegIndividual candidate){ model.getObjectsOnCanvas().clear(); model.getEdgesOnCanvas().clear(); candidate.configurateNetwork(); model.getObjectsOnCanvas().addAll(candidate.getObjects()); model.getEdgesOnCanvas().addAll(candidate.getAllEdges()); simManager.calculateStateForTimeStep(model.getCurIteration()); everyoneSupplied = true; double fittness = 0; for(AbstractCpsObject abs : candidate.getObjects()){ if(abs instanceof HolonObject){ switch (((HolonObject) abs).getState()){ case HolonObject.SUPPLIED : fittness += suppliedPoints; break; case HolonObject.OVER_SUPPLIED : fittness += oversuppliedPoints; everyoneSupplied = false; break; case HolonObject.NOT_SUPPLIED : fittness += undersuppliedPoints; everyoneSupplied = false; break; case HolonObject.PARTIALLY_SUPPLIED: fittness += partiallysuppliedPoints; everyoneSupplied = false; break; } } } return fittness; } public float getCurrentOverProduction(){ float overProd = 0; for(SubNet subnet : simManager.getSubNets()){ overProd += subnet.spareProduction; } return overProd; } public boolean getEveryoneSupplied(){ return everyoneSupplied; } public Model getModel(){ return model; } public void setParameters(ParameterArray params){ this.params = params; suppliedPoints = (double)params.get(params.SUPPLIED_POINTS); oversuppliedPoints = (double)params.get(params.OVERSUPPLIED_POINTS); undersuppliedPoints = (double)params.get(params.UNDERSUPPLIED_POINTS); partiallysuppliedPoints = (double)params.get(params.PARTIALSUPPLIED_POINTS); } }