ExampleFitnessFunction.java 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  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.AddOn;
  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 AddOn {
  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. // newFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  28. // }
  29. public ExampleFitnessFunction(){
  30. content.setLayout(new BorderLayout());
  31. content.add(createParameterPanel(), BorderLayout.CENTER);
  32. JButton buttonRun = new JButton("Run");
  33. buttonRun.addActionListener(actionEvent -> run());
  34. content.add(buttonRun, BorderLayout.PAGE_END);
  35. content.setPreferredSize(new Dimension(300,300));
  36. }
  37. private void run() {
  38. float fitness = getFitnessValue();
  39. println("" + fitness);
  40. }
  41. private JPanel createParameterPanel() {
  42. JPanel parameterPanel = new JPanel();
  43. parameterPanel.setLayout(new BoxLayout(parameterPanel, BoxLayout.PAGE_AXIS));
  44. textArea = new JTextArea();
  45. textArea.setEditable(false);
  46. JScrollPane scrollPane = new JScrollPane(textArea);
  47. parameterPanel.add(scrollPane);
  48. return parameterPanel;
  49. }
  50. @Override
  51. public JPanel getPanel() {
  52. return content;
  53. }
  54. @Override
  55. public void setController(Control control) {
  56. this.control = control;
  57. }
  58. private void clear() {
  59. textArea.setText("");
  60. }
  61. private void print(String message) {
  62. textArea.append(message);
  63. }
  64. private void println(String message) {
  65. textArea.append(message + "\n");
  66. }
  67. private float getFitnessValue() {
  68. float overallFitness = 0f;
  69. //Calculate all timesteps
  70. for(int timestep = 0; timestep <100; timestep++) {
  71. control.calculateStateAndVisualForTimeStep(timestep);
  72. }
  73. //Calculate all timesteps
  74. for(int timestep = 0; timestep <100; timestep++) {
  75. overallFitness += getFitnessValueForState(control.getSimManager().getDecorState(timestep));
  76. }
  77. return overallFitness;
  78. }
  79. private float getFitnessValueForState(DecoratedState state) {
  80. float fitnessOfTimestep = 0f;
  81. for(DecoratedNetwork net : state.getNetworkList()) {
  82. fitnessOfTimestep += net.getConsumerList().stream().map(con -> con.getState()).map(objectState -> StateToFloat(objectState)).reduce(0.0f, (a, b) -> (a + b));
  83. fitnessOfTimestep += net.getConsumerSelfSuppliedList().stream().map(con -> 1f).reduce(0.0f, (a, b) -> (a + b));
  84. }
  85. return fitnessOfTimestep;
  86. }
  87. private float StateToFloat(HolonObjectState state) {
  88. switch (state) {
  89. case NOT_SUPPLIED:
  90. return 10f;
  91. case NO_ENERGY:
  92. return 15f;
  93. case OVER_SUPPLIED:
  94. return 5f;
  95. case PARTIALLY_SUPPLIED:
  96. return 3f;
  97. case PRODUCER:
  98. return 2f;
  99. case SUPPLIED:
  100. return 0f;
  101. default:
  102. return 0f;
  103. }
  104. }
  105. }