|
@@ -15,6 +15,8 @@ import javax.swing.ImageIcon;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.Timer;
|
|
import javax.swing.Timer;
|
|
|
|
|
|
|
|
+import classes.AbstractCpsObject;
|
|
|
|
+import classes.CpsUpperNode;
|
|
import classes.HolonElement;
|
|
import classes.HolonElement;
|
|
import classes.HolonObject;
|
|
import classes.HolonObject;
|
|
import classes.HolonSwitch;
|
|
import classes.HolonSwitch;
|
|
@@ -30,7 +32,7 @@ public class StatisticGraph extends JPanel {
|
|
private static final long serialVersionUID = 1L;
|
|
private static final long serialVersionUID = 1L;
|
|
|
|
|
|
// Maximum y Value
|
|
// Maximum y Value
|
|
- double maximum = 0;
|
|
|
|
|
|
+ float maximum = 0;
|
|
|
|
|
|
// is the Simulation running?
|
|
// is the Simulation running?
|
|
private boolean isSimRunning;
|
|
private boolean isSimRunning;
|
|
@@ -115,7 +117,7 @@ public class StatisticGraph extends JPanel {
|
|
case TrackedDataSet.PERCENT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_NOT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_NOT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
|
|
- //TODO Percentage Method
|
|
|
|
|
|
+ createPathPercent(set);
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
@@ -181,7 +183,7 @@ public class StatisticGraph extends JPanel {
|
|
public void calcMaximum() {
|
|
public void calcMaximum() {
|
|
maximum = 0;
|
|
maximum = 0;
|
|
for (TrackedDataSet set : objects) {
|
|
for (TrackedDataSet set : objects) {
|
|
- int val = 0;
|
|
|
|
|
|
+ float val = 0;
|
|
switch (set.getProperty()) {
|
|
switch (set.getProperty()) {
|
|
case TrackedDataSet.CONSUMPTION:
|
|
case TrackedDataSet.CONSUMPTION:
|
|
for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
|
|
for (HolonElement h : ((HolonObject) set.getCpsObject()).getElements()) {
|
|
@@ -208,10 +210,11 @@ public class StatisticGraph extends JPanel {
|
|
val = 1;
|
|
val = 1;
|
|
break;
|
|
break;
|
|
case TrackedDataSet.TOTAL_PRODUCTION:
|
|
case TrackedDataSet.TOTAL_PRODUCTION:
|
|
- //TODO
|
|
|
|
|
|
+ val = getMaxTotalProduction(model.getObjectsOnCanvas());
|
|
break;
|
|
break;
|
|
case TrackedDataSet.TOTAL_CONSUMPTION:
|
|
case TrackedDataSet.TOTAL_CONSUMPTION:
|
|
- //TODO
|
|
|
|
|
|
+ val = getMaxTotalConsumption(model.getObjectsOnCanvas());
|
|
|
|
+ val *= -1;
|
|
break;
|
|
break;
|
|
case TrackedDataSet.PERCENT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_NOT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_NOT_SUPPLIED:
|
|
@@ -276,19 +279,19 @@ public class StatisticGraph extends JPanel {
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case TrackedDataSet.TOTAL_PRODUCTION:
|
|
case TrackedDataSet.TOTAL_PRODUCTION:
|
|
-
|
|
|
|
|
|
+ set.setValAt(getTotalProductionAt(model.getObjectsOnCanvas(), model.getCurIteration()), model.getCurIteration());
|
|
break;
|
|
break;
|
|
case TrackedDataSet.TOTAL_CONSUMPTION:
|
|
case TrackedDataSet.TOTAL_CONSUMPTION:
|
|
-
|
|
|
|
|
|
+ set.setValAt(-getTotalConsumptionAt(model.getObjectsOnCanvas(), model.getCurIteration()), model.getCurIteration());
|
|
break;
|
|
break;
|
|
case TrackedDataSet.PERCENT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_SUPPLIED:
|
|
-
|
|
|
|
|
|
+ set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.SUPPLIED), model.getCurIteration());
|
|
break;
|
|
break;
|
|
case TrackedDataSet.PERCENT_NOT_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_NOT_SUPPLIED:
|
|
-
|
|
|
|
|
|
+ set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.NOT_SUPPLIED), model.getCurIteration());
|
|
break;
|
|
break;
|
|
case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
|
|
case TrackedDataSet.PERCENT_PARTIAL_SUPPLIED:
|
|
-
|
|
|
|
|
|
+ set.setValAt(getPercentState(model.getObjectsOnCanvas(), HolonObject.PARTIALLY_SUPPLIED), model.getCurIteration());
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
break;
|
|
break;
|
|
@@ -344,5 +347,133 @@ public class StatisticGraph extends JPanel {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * create Path for percent values
|
|
|
|
+ *
|
|
|
|
+ * @param set
|
|
|
|
+ */
|
|
|
|
+ private void createPathPercent(TrackedDataSet set) {
|
|
|
|
+ boolean init = true;
|
|
|
|
+ path.moveTo(0, 0);
|
|
|
|
+ for (int i = 0; i < model.getCurIteration(); i++) {
|
|
|
|
+ if (init && set.getValues()[i] != -1) {
|
|
|
|
+ path.moveTo(i * this.getWidth() / model.getIterations() - 1, convertToCanvasY(set.getValues()[i]*maximum));
|
|
|
|
+ init = false;
|
|
|
|
+ }
|
|
|
|
+ if (!init) {
|
|
|
|
+ if (set.getValues()[i + 1] != -1) {
|
|
|
|
+ path.lineTo((i + 1) * this.getWidth() / model.getIterations(),
|
|
|
|
+ convertToCanvasY(set.getValues()[i + 1]*maximum));
|
|
|
|
+ } else {
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 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;
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|