123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715 |
- package ui.view;
- import java.awt.BasicStroke;
- import java.awt.Color;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.RenderingHints;
- import java.awt.geom.GeneralPath;
- import java.util.ArrayList;
- import javax.swing.JPanel;
- import classes.AbstractCpsObject;
- import classes.CpsUpperNode;
- import classes.HolonElement;
- import classes.HolonObject;
- import classes.HolonSwitch;
- import classes.SubNet;
- import classes.TrackedDataSet;
- import ui.controller.Control;
- import ui.model.Model;
- public class StatisticGraph extends JPanel {
- /**
- *
- */
- private static final long serialVersionUID = 1L;
- // Maximum y Value
- float maximum = 0;
- // is the Simulation running?
- private boolean isSimRunning;
- // model and controller
- private Model model;
- private Control controller;
- // Graphics2D
- private Graphics2D g2;
- GeneralPath path = new GeneralPath();
- // Data
- private ArrayList<TrackedDataSet> dataSets = new ArrayList<>();
- /**
- * Constructor.
- *
- * @param model
- * the Model
- * @param control
- * the Controller
- */
- public StatisticGraph(final Model model, Control control) {
- this.controller = control;
- this.model = model;
- this.setBackground(Color.WHITE);
- }
- /**
- * Paints all Components on the Canvas.
- *
- * @param g
- * Graphics
- *
- */
- public void paintComponent(Graphics g) {
- super.paintComponent(g);
- // Graphics2D init
- g2 = (Graphics2D) g;
- RenderingHints rh = new RenderingHints(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
- g2.setRenderingHints(rh);
- // Paint the Grid
- g2.setStroke(new BasicStroke(0));
- g2.setColor(Color.BLACK);
- for (int i = 0; i <= this.getWidth(); i += 10) {
- g2.drawLine(i, 0, i, this.getHeight());
- }
- for (int i = 0; i <= this.getHeight(); i += 5) {
- g2.drawLine(0, i, this.getWidth(), i);
- }
- isSimRunning = true;
- // if sim is on
- if (isSimRunning) {
- g2.setStroke(new BasicStroke(3));
- // Calculate the Maximum
- calcMaximum();
- // Calculate values for each set and add them
- addValues();
- // Create Paths and draw them
- for (TrackedDataSet set : dataSets) {
- path.reset();
- switch (set.getProperty()) {
- case TrackedDataSet.CONSUMPTION:
- case TrackedDataSet.PRODUCTION:
- case TrackedDataSet.ACTIVATED_ELEMENTS:
- case TrackedDataSet.TOTAL_PRODUCTION:
- case TrackedDataSet.TOTAL_CONSUMPTION:
- case TrackedDataSet.AMOUNT_HOLONS:
- case TrackedDataSet.GROUP_CONSUMPTION:
- case TrackedDataSet.GROUP_PRODUCTION:
- case TrackedDataSet.AMOUNT_CLOSED_SWITCHES:
- case TrackedDataSet.AVG_AMOUNT_OBJECTS_IN_HOLONS:
- case TrackedDataSet.AVG_AMOUNT_ELEMENTS_IN_HOLONS:
- case TrackedDataSet.AVG_AMOUNT_PRODUCERS_IN_HOLONS:
- case TrackedDataSet.AVG_CONSUMED_ENERGY_IN_HOLONS:
- case TrackedDataSet.AVG_WASTED_ENERGY_IN_HOLONS:
- case TrackedDataSet.AMOUNT_BROKEN_EDGES:
- case TrackedDataSet.AVG_AMOUNT_CLOSED_SWITCHES_IN_HOLONS:
- case TrackedDataSet.AVG_AMOUNT_ACTIVE_ELEMENTS_IN_HOLONS:
- case TrackedDataSet.AVG_AMOUNT_INACTIVE_ELEMENTS_IN_HOLONS:
- case TrackedDataSet.AVG_PRODUCED_ENERGY_IN_HOLONS:
- createPathFloats(set);
- break;
- case TrackedDataSet.ON_OFF:
- createPathBooleans(set);
- break;
- case TrackedDataSet.PERCENT_SUPPLIED:
- case TrackedDataSet.PERCENT_NOT_SUPPLIED:
- case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
- case TrackedDataSet.RATIO_PRODUCERS_CONSUMERS:
- createPathPercent(set);
- break;
- default:
- break;
- }
- g2.setColor(set.getColor());
- g2.draw(path);
- }
- }
- }
- /**
- * Add an Object to the Graph if the maximum has not reached yet.
- *
- * @param obj
- * the Object to add
- */
- public void addObject(TrackedDataSet set) {
- dataSets.add(set);
- }
- /**
- * Removes an Object from the Graph.
- *
- * @param id
- * the id of the Object to remove
- */
- public void removeObject(int id) {
- dataSets.remove(id);
- }
- /**
- * converts the number to fit the canvas.
- *
- * @param d
- * the number to convert
- * @return the converted number
- */
- public double convertToCanvasY(float d) {
- return Math.abs((this.getHeight() - (d * (this.getHeight() / maximum))));
- }
- /**
- * Does take into account which timestep is watched, calculates the max
- * values.
- *
- * @return the currentEnergy
- */
- public float getEnergyAtCurrentTimeStep(HolonObject obj) {
- float temp = 0;
- for (HolonElement e : obj.getElements()) {
- if (e.getActive()) {
- temp = temp + e.getEnergyAt()[model.getCurIteration()];
- }
- }
- return temp;
- }
- /**
- * Calculate the Max Value of the Graph
- */
- public void calcMaximum() {
- maximum = 0;
- for (TrackedDataSet set : dataSets) {
- float val = 0;
- switch (set.getProperty()) {
- case TrackedDataSet.CONSUMPTION:
- for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
- if (h.getEnergy() < 0) {
- val += h.getEnergy() * h.getAmount();
- }
- }
- val *= -1;
- break;
- case TrackedDataSet.PRODUCTION:
- for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
- if (h.getEnergy() > 0) {
- val += h.getEnergy() * h.getAmount();
- }
- }
- break;
- case TrackedDataSet.ACTIVATED_ELEMENTS:
- for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
- val += h.getAmount();
- }
- break;
- case TrackedDataSet.ON_OFF:
- val = 1;
- break;
- case TrackedDataSet.TOTAL_PRODUCTION:
- val = getMaxTotalProduction(model.getObjectsOnCanvas());
- break;
- case TrackedDataSet.TOTAL_CONSUMPTION:
- val = getMaxTotalConsumption(model.getObjectsOnCanvas());
- val *= -1;
- break;
- case TrackedDataSet.PERCENT_SUPPLIED:
- case TrackedDataSet.PERCENT_NOT_SUPPLIED:
- case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
- val = 1;
- break;
- case TrackedDataSet.GROUP_PRODUCTION:
- val = getMaxTotalProduction(((CpsUpperNode) set.getCpsObject()).getNodes());
- break;
- case TrackedDataSet.GROUP_CONSUMPTION:
- val = getMaxTotalConsumption(((CpsUpperNode) set.getCpsObject()).getNodes());
- val *= -1;
- break;
- case TrackedDataSet.AMOUNT_HOLONS:
- val = controller.getSimManager().getSubNets().size();
- for (int i = 0; i < model.getCurIteration(); i++) {
- if (val < set.getValues()[i]) {
- val = set.getValues()[i];
- }
- }
- break;
- case TrackedDataSet.AMOUNT_CLOSED_SWITCHES:
- val = model.getSwitches().size();
- break;
- case TrackedDataSet.AVG_AMOUNT_OBJECTS_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- if (val < sub.getObjects().size()) {
- val = sub.getObjects().size();
- }
- }
- break;
- case TrackedDataSet.AVG_AMOUNT_ELEMENTS_IN_HOLONS:
- case TrackedDataSet.AVG_AMOUNT_ACTIVE_ELEMENTS_IN_HOLONS:
- case TrackedDataSet.AVG_AMOUNT_INACTIVE_ELEMENTS_IN_HOLONS:
- float eCount = 0;
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- for (HolonObject obj : sub.getObjects()) {
- eCount += obj.getElements().size();
- }
- if (val < eCount) {
- val = eCount;
- }
- eCount = 0;
- }
- break;
- case TrackedDataSet.AVG_AMOUNT_PRODUCERS_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- if (val < sub.getObjects().size()) {
- val = sub.getObjects().size();
- }
- }
- break;
- case TrackedDataSet.AVG_CONSUMED_ENERGY_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- float tempVal = -getMaxTotalConsumption(new ArrayList<AbstractCpsObject>(sub.getObjects()));
- if (val < tempVal) {
- val = tempVal;
- }
- }
- break;
- case TrackedDataSet.AVG_WASTED_ENERGY_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- float tempVal = getMaxTotalProduction(new ArrayList<AbstractCpsObject>(sub.getObjects()));
- if (val < tempVal) {
- val = tempVal;
- }
- }
- break;
- case TrackedDataSet.AMOUNT_BROKEN_EDGES:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- val += sub.getSwitches().size();
- }
- break;
- case TrackedDataSet.RATIO_PRODUCERS_CONSUMERS:
- val = 1;
- break;
- case TrackedDataSet.AVG_AMOUNT_CLOSED_SWITCHES_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- float tempVal = sub.getSwitches().size();
- if (val < tempVal) {
- val = tempVal;
- }
- }
- break;
- case TrackedDataSet.AVG_PRODUCED_ENERGY_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- float tempVal = getMaxTotalProduction(new ArrayList<AbstractCpsObject>(sub.getObjects()));
- if (val < tempVal) {
- val = tempVal;
- }
- }
- break;
- default:
- maximum = 0;
- break;
- }
- if (val > maximum) {
- maximum = val;
- }
- }
- ((StatisticGraphPanel) this.getParent()).setMaximumLabel(maximum);
- }
- /**
- * Add the Current Values to each set
- */
- private void addValues() {
- for (TrackedDataSet set : dataSets) {
- float val = 0;
- switch (set.getProperty()) {
- case TrackedDataSet.CONSUMPTION:
- for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
- if (h.getEnergy() < 0 && h.getActive()) {
- val += Math.abs(h.getEnergyAt()[model.getCurIteration()]) * h.getAmount();
- }
- set.setValAt(val, model.getCurIteration());
- }
- break;
- case TrackedDataSet.PRODUCTION:
- for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
- if (h.getEnergy() > 0 && h.getActive()) {
- val += Math.abs(h.getEnergyAt()[model.getCurIteration()]) * h.getAmount();
- }
- set.setValAt(val, model.getCurIteration());
- }
- break;
- case TrackedDataSet.ACTIVATED_ELEMENTS:
- for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
- if (h.getActive()) {
- val += h.getAmount();
- }
- set.setValAt(val, model.getCurIteration());
- }
- break;
- case TrackedDataSet.ON_OFF:
- if (((HolonSwitch) set.getCpsObject()).getManualMode()) {
- if (((HolonSwitch) set.getCpsObject()).getActiveManual()) {
- set.setValAt(1, model.getCurIteration());
- } else {
- set.setValAt(0, model.getCurIteration());
- }
- } else {
- if (((HolonSwitch) set.getCpsObject()).getActiveAt()[model.getCurIteration()]) {
- set.setValAt(1, model.getCurIteration());
- } else {
- set.setValAt(0, model.getCurIteration());
- }
- }
- break;
- case TrackedDataSet.TOTAL_PRODUCTION:
- set.setValAt(getTotalProductionAt(model.getObjectsOnCanvas(), model.getCurIteration()),
- model.getCurIteration());
- break;
- case TrackedDataSet.TOTAL_CONSUMPTION:
- set.setValAt(-getTotalConsumptionAt(model.getObjectsOnCanvas(), model.getCurIteration()),
- model.getCurIteration());
- break;
- case TrackedDataSet.PERCENT_SUPPLIED:
- set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.SUPPLIED),
- model.getCurIteration());
- break;
- case TrackedDataSet.PERCENT_NOT_SUPPLIED:
- set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.NOT_SUPPLIED),
- model.getCurIteration());
- break;
- case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
- set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.PARTIALLY_SUPPLIED),
- model.getCurIteration());
- break;
- case TrackedDataSet.GROUP_PRODUCTION:
- set.setValAt(
- getTotalProductionAt(((CpsUpperNode) set.getCpsObject()).getNodes(), model.getCurIteration()),
- model.getCurIteration());
- break;
- case TrackedDataSet.GROUP_CONSUMPTION:
- set.setValAt(
- -getTotalConsumptionAt(((CpsUpperNode) set.getCpsObject()).getNodes(), model.getCurIteration()),
- model.getCurIteration());
- break;
- case TrackedDataSet.AMOUNT_HOLONS:
- set.setValAt(controller.getSimManager().getSubNets().size(), model.getCurIteration());
- break;
- case TrackedDataSet.AMOUNT_CLOSED_SWITCHES:
- for (HolonSwitch s : model.getSwitches()) {
- if (s.getState(model.getCurIteration())) {
- val++;
- }
- }
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_AMOUNT_OBJECTS_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- val += sub.getObjects().size();
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_AMOUNT_ELEMENTS_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- for (HolonObject obj : sub.getObjects()) {
- val += obj.getElements().size();
- }
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_AMOUNT_PRODUCERS_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- for (HolonObject obj : sub.getObjects()) {
- if (obj.getCurrentEnergyAtTimeStep(model.getCurIteration()) > 0) {
- val++;
- }
- }
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_CONSUMED_ENERGY_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- val += -getTotalConsumptionAt(new ArrayList<AbstractCpsObject>(sub.getObjects()),
- model.getCurIteration());
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_WASTED_ENERGY_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- val += (getTotalProductionAt(new ArrayList<AbstractCpsObject>(sub.getObjects()),
- model.getCurIteration())
- + getTotalConsumptionAt(new ArrayList<AbstractCpsObject>(sub.getObjects()),
- model.getCurIteration()));
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AMOUNT_BROKEN_EDGES:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- for (HolonSwitch s : sub.getSwitches()) {
- if (s.getState()) {
- val++;
- }
- }
- }
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.RATIO_PRODUCERS_CONSUMERS:
- float prod = 0;
- float cons = 0;
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- for (HolonObject obj : sub.getObjects()) {
- if (obj.getCurrentEnergyAtTimeStep(model.getCurIteration()) > 0) {
- prod++;
- } else if (obj.getCurrentEnergyAtTimeStep(model.getCurIteration()) < 0) {
- cons++;
- }
- }
- }
- val = prod / (prod + cons);
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_AMOUNT_CLOSED_SWITCHES_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- val += sub.getSwitches().size();
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_AMOUNT_ACTIVE_ELEMENTS_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- for (HolonObject obj : sub.getObjects()) {
- for (HolonElement ele : obj.getElements()) {
- if (ele.getActive()) {
- val++;
- }
- }
- }
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_AMOUNT_INACTIVE_ELEMENTS_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- for (HolonObject obj : sub.getObjects()) {
- for (HolonElement ele : obj.getElements()) {
- if (!ele.getActive()) {
- val++;
- }
- }
- }
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- case TrackedDataSet.AVG_PRODUCED_ENERGY_IN_HOLONS:
- for (SubNet sub : controller.getSimManager().getSubNets()) {
- val += getTotalProductionAt(new ArrayList<AbstractCpsObject>(sub.getObjects()),
- model.getCurIteration());
- }
- val /= controller.getSimManager().getSubNets().size();
- set.setValAt(val, model.getCurIteration());
- break;
- default:
- break;
- }
- }
- }
- /**
- * create Path with floats
- *
- * @param set
- */
- private void createPathFloats(TrackedDataSet set) {
- if (set.getValues()[0] != -1) {
- path.moveTo(0, convertToCanvasY(set.getValues()[0]));
- } else {
- path.moveTo(1 * this.getWidth() / model.getIterations(), convertToCanvasY(set.getValues()[1]));
- }
- for (int i = 0; i < model.getCurIteration(); i++) {
- if (set.getValues()[i + 1] != -1) {
- path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
- convertToCanvasY(set.getValues()[i + 1]));
- } else {
- path.moveTo((i + 2) * this.getWidth() / model.getIterations(),
- convertToCanvasY(set.getValues()[i + 2]));
- }
- }
- }
- /**
- * create Path with booleans(0 and 1)
- *
- * @param set
- */
- private void createPathBooleans(TrackedDataSet set) {
- if (set.getValues()[0] != -1) {
- path.moveTo(0, convertToCanvasY((float) (set.getValues()[0] * (maximum / 3 * 2)) + (maximum / 6)));
- } else {
- path.moveTo(1 * this.getWidth() / model.getIterations(),
- convertToCanvasY((float) (set.getValues()[1] * (maximum / 3 * 2)) + (maximum / 6)));
- }
- for (int i = 0; i < model.getCurIteration(); i++) {
- controller.addTextToConsole(set.getValues()[i] + "");
- if (set.getValues()[i + 1] != -1) {
- path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
- convertToCanvasY((float) (set.getValues()[i + 1] * (maximum / 3 * 2)) + (maximum / 6)));
- } else {
- path.moveTo((i + 2) * this.getWidth() / model.getIterations(),
- convertToCanvasY((float) (set.getValues()[i + 2] * (maximum / 3 * 2)) + (maximum / 6)));
- }
- }
- }
- /**
- * create Path for percent values
- *
- * @param set
- */
- private void createPathPercent(TrackedDataSet set) {
- if (set.getValues()[0] != -1) {
- path.moveTo(0, convertToCanvasY(set.getValues()[0] * maximum));
- } else {
- path.moveTo(1 * this.getWidth() / model.getIterations(), convertToCanvasY(set.getValues()[1] * maximum));
- }
- for (int i = 0; i < model.getCurIteration(); i++) {
- if (set.getValues()[i + 1] != -1) {
- path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
- convertToCanvasY(set.getValues()[i + 1] * maximum));
- } else {
- path.moveTo((i + 2) * this.getWidth() / model.getIterations(),
- convertToCanvasY(set.getValues()[i + 2] * maximum));
- }
- }
- }
- /**
- * get the max total production of the given Objects
- *
- * @param objects
- * List of Objects
- */
- private float getMaxTotalProduction(ArrayList<AbstractCpsObject> objects) {
- float val = 0;
- for (AbstractCpsObject obj : objects) {
- if (obj instanceof HolonObject) {
- for (HolonElement ele : ((HolonObject) obj).getElements()) {
- if (ele.getEnergy() > 0) {
- val += ele.getEnergy() * ele.getAmount();
- }
- }
- } else if (obj instanceof CpsUpperNode) {
- val += getMaxTotalProduction(((CpsUpperNode) obj).getNodes());
- }
- }
- return val;
- }
- /**
- * get the max total consumption of the given Objects
- *
- * @param objects
- * List of Objects
- */
- private float getMaxTotalConsumption(ArrayList<AbstractCpsObject> objects) {
- float val = 0;
- for (AbstractCpsObject obj : objects) {
- if (obj instanceof HolonObject) {
- for (HolonElement ele : ((HolonObject) obj).getElements()) {
- if (ele.getEnergy() < 0) {
- val += ele.getEnergy() * ele.getAmount();
- }
- }
- } else if (obj instanceof CpsUpperNode) {
- val += getMaxTotalConsumption(((CpsUpperNode) obj).getNodes());
- }
- }
- return val;
- }
- /**
- * get the max total production of the given Objects
- *
- * @param objects
- * List of Objects
- * @param tStep
- */
- private float getTotalProductionAt(ArrayList<AbstractCpsObject> objects, int tStep) {
- float val = 0;
- for (AbstractCpsObject obj : objects) {
- if (obj instanceof HolonObject) {
- for (HolonElement ele : ((HolonObject) obj).getElements()) {
- if (ele.getEnergyAt()[tStep] > 0 && ele.getActive()) {
- val += ele.getEnergyAt()[tStep] * ele.getAmount();
- }
- }
- } else if (obj instanceof CpsUpperNode) {
- val += getTotalProductionAt(((CpsUpperNode) obj).getNodes(), tStep);
- }
- }
- return val;
- }
- /**
- * get the total consumption of the given Objects at the given timestep
- *
- * @param objects
- * List of Objects
- * @param tStep
- */
- private float getTotalConsumptionAt(ArrayList<AbstractCpsObject> objects, int tStep) {
- float val = 0;
- for (AbstractCpsObject obj : objects) {
- if (obj instanceof HolonObject) {
- for (HolonElement ele : ((HolonObject) obj).getElements()) {
- if (ele.getEnergyAt()[tStep] < 0 && ele.getActive()) {
- val += ele.getEnergyAt()[tStep] * ele.getAmount();
- }
- }
- } else if (obj instanceof CpsUpperNode) {
- val += getTotalConsumptionAt(((CpsUpperNode) obj).getNodes(), tStep);
- }
- }
- return val;
- }
- /**
- * get the Percentage of how many objects with the given state are in the
- * given List
- *
- * @param objects
- * List of Objects
- */
- private float getPercentState(ArrayList<AbstractCpsObject> objects, int state) {
- float count = controller.getNumberHolonObjects(objects);
- float stateObjectss = controller.getNumberStateObjects(objects, state);
- return stateObjectss / count;
- }
- public ArrayList<TrackedDataSet> getDataSets() {
- return dataSets;
- }
- }
|