SGFunctions.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package psoAlgoCode;
  2. import java.util.Vector;
  3. import classes.AbstractCpsObject;
  4. import classes.HolonElement;
  5. import classes.HolonObject;
  6. import ui.controller.Control;
  7. import ui.model.Model;
  8. public class SGFunctions {
  9. private Model model;
  10. private Control control;
  11. private Particle p;
  12. public SGFunctions(Particle p, Model model, Control control) {
  13. this.p = p;
  14. this.model = model;
  15. this.control = control;
  16. }
  17. public void implementState() {
  18. Coordinate<Vector<Object>> pos = p.getPositionAdv();
  19. // Set states of the HolonSwitches depending on the pos of the swarm (dim=0)
  20. for (int i = 0; i < pos.getCoord(0).size(); i++) {
  21. model.getSwitches().get(i).setManualMode(true);
  22. model.getSwitches().get(i).setManualState((boolean) pos.getCoord(0).get(i));
  23. }
  24. int position = 0;
  25. for (int j = 0; j < model.getObjectsOnCanvas().size(); j++) {
  26. if (model.getObjectsOnCanvas().get(j) instanceof HolonObject) {
  27. for (int h = 0; h < ((HolonObject) model.getObjectsOnCanvas().get(j)).getElements().size(); h++) {
  28. ((HolonObject) model.getObjectsOnCanvas().get(j)).getElements().get(h)
  29. .setActive((boolean) pos.getCoord(1).get(position));
  30. position++;
  31. }
  32. }
  33. }
  34. }
  35. public double calcValuewithSliderState() {
  36. implementState();
  37. HelpFunctions.calculateStateForTimeStepPSO(model, control);
  38. double value = 0.0;
  39. for (AbstractCpsObject obj : model.getObjectsOnCanvas()) {
  40. if (obj instanceof HolonObject) {
  41. int state = ((HolonObject) obj).getState();
  42. double suppliedPerc = ((HolonObject) obj).getSuppliedPercentage();
  43. double elementsActive = (double) elementsActive((HolonObject) obj);
  44. double totalElements = (double) ((HolonObject) obj).getElements().size();
  45. double difference = Math.abs(1.0 - suppliedPerc) * 100;
  46. double differenceEle = (1.0 - (elementsActive / totalElements)) * 100;
  47. // Supply States (see HolonObject class for more informations)
  48. switch (state) {
  49. case 0:
  50. value += (100 * 8);
  51. break;
  52. case 1:
  53. value += difference * 4 + differenceEle;
  54. break;
  55. case 2:
  56. value += difference + differenceEle;
  57. break;
  58. case 4:
  59. value += difference + differenceEle;
  60. break;
  61. case 5:
  62. value += difference * 2 + differenceEle;
  63. break;
  64. default:
  65. break;
  66. }
  67. }
  68. }
  69. return value;
  70. }
  71. // Check the amount of HolonElements that are active
  72. private int elementsActive(HolonObject obj) {
  73. int counter = 0;
  74. for (HolonElement ele : obj.getElements()) {
  75. if (ele.isActive()) {
  76. counter++;
  77. }
  78. }
  79. return counter;
  80. }
  81. }