ExampleFitnessFunction.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package exampleAlgorithms;
  2. import java.awt.BorderLayout;
  3. import java.awt.Component;
  4. import java.awt.Dimension;
  5. import javax.swing.BoxLayout;
  6. import javax.swing.JButton;
  7. import javax.swing.JFrame;
  8. import javax.swing.JPanel;
  9. import javax.swing.JScrollPane;
  10. import javax.swing.JTextArea;
  11. import api.Algorithm;
  12. import ui.controller.Control;
  13. import ui.model.DecoratedHolonObject.HolonObjectState;
  14. import ui.model.DecoratedNetwork;
  15. import ui.model.DecoratedState;
  16. public class ExampleFitnessFunction implements Algorithm {
  17. private Control control;
  18. private JTextArea textArea;
  19. private JPanel content = new JPanel();
  20. // public static void main(String[] args)
  21. // {
  22. // JFrame newFrame = new JFrame("exampleWindow");
  23. // ExampleFitnessFunction instance = new ExampleFitnessFunction();
  24. // newFrame.setContentPane(instance.getAlgorithmPanel());
  25. // newFrame.pack();
  26. // newFrame.setVisible(true);
  27. // }
  28. public ExampleFitnessFunction(){
  29. content.setLayout(new BorderLayout());
  30. content.add(createParameterPanel(), BorderLayout.CENTER);
  31. JButton buttonRun = new JButton("Run");
  32. buttonRun.addActionListener(actionEvent -> run());
  33. content.add(buttonRun, BorderLayout.PAGE_END);
  34. content.setPreferredSize(new Dimension(300,300));
  35. }
  36. private void run() {
  37. float fitness = getFitnessValue();
  38. println("" + fitness);
  39. }
  40. private JPanel createParameterPanel() {
  41. JPanel parameterPanel = new JPanel();
  42. parameterPanel.setLayout(new BoxLayout(parameterPanel, BoxLayout.PAGE_AXIS));
  43. textArea = new JTextArea();
  44. textArea.setEditable(false);
  45. JScrollPane scrollPane = new JScrollPane(textArea);
  46. parameterPanel.add(scrollPane);
  47. return parameterPanel;
  48. }
  49. @Override
  50. public JPanel getAlgorithmPanel() {
  51. return content;
  52. }
  53. @Override
  54. public void setController(Control control) {
  55. this.control = control;
  56. }
  57. private void clear() {
  58. textArea.setText("");
  59. }
  60. private void print(String message) {
  61. textArea.append(message);
  62. }
  63. private void println(String message) {
  64. textArea.append(message + "\n");
  65. }
  66. private float getFitnessValue() {
  67. float overallFitness = 0f;
  68. //Calculate all timesteps
  69. for(int timestep = 0; timestep <100; timestep++) {
  70. control.calculateStateForTimeStep(timestep);
  71. }
  72. //Calculate all timesteps
  73. for(int timestep = 0; timestep <100; timestep++) {
  74. overallFitness += getFitnessValueForState(control.getSimManager().getDecorState(timestep));
  75. }
  76. return overallFitness;
  77. }
  78. private float getFitnessValueForState(DecoratedState state) {
  79. float fitnessOfTimestep = 0f;
  80. for(DecoratedNetwork net : state.getNetworkList()) {
  81. fitnessOfTimestep += net.getConsumerList().stream().map(con -> con.getState()).map(objectState -> StateToFloat(objectState)).reduce(0.0f, (a, b) -> (a + b));
  82. fitnessOfTimestep += net.getConsumerSelfSuppliedList().stream().map(con -> 1f).reduce(0.0f, (a, b) -> (a + b));
  83. }
  84. return fitnessOfTimestep;
  85. }
  86. private float StateToFloat(HolonObjectState state) {
  87. switch (state) {
  88. case NOT_SUPPLIED:
  89. return -5f;
  90. case NO_ENERGY:
  91. return 0f;
  92. case OVER_SUPPLIED:
  93. return -2f;
  94. case PARTIALLY_SUPPLIED:
  95. return -1f;
  96. case PRODUCER:
  97. return 0f;
  98. case SUPPLIED:
  99. return 1f;
  100. default:
  101. return 0f;
  102. }
  103. }
  104. }