/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jenetics.example.image;
import static java.util.stream.Collectors.averagingLong;
import java.text.NumberFormat;
import java.time.Duration;
import javax.swing.JPanel;
import org.jenetics.engine.EvolutionResult;
/**
* Panel for showing the evolution result.
*/
final class EvolutionResultPanel extends JPanel {
private static final NumberFormat _format = NumberFormat.getNumberInstance();
/**
* Creates new form EvolutionResultPanel
*/
public EvolutionResultPanel() {
initComponents();
_format.setMaximumIntegerDigits(1);
_format.setMinimumIntegerDigits(1);
_format.setMinimumFractionDigits(4);
_format.setMaximumFractionDigits(4);
}
void update(final EvolutionResult<?, Double> result) {
final String generation = Long.toString(result.getGeneration());
final String bestFitness = _format.format(result.getBestFitness());
final double age = result.getPopulation().stream()
.collect(averagingLong(p -> p.getAge(result.getGeneration())));
_generationTextField.setText(generation);
_bestFitnessTextField.setText(bestFitness);
_populationAgeTextField.setText(_format.format(age));
_evaluationTimeTextField.setText(format(
result.getDurations().getEvaluationDuration()
));
}
private static String format(final Duration duration) {
final long seconds = duration.getSeconds();
final int millis = duration.getNano()/1_000_000;
return String.format("%02d.%03d", seconds, millis);
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
java.awt.GridBagConstraints gridBagConstraints;
_generationLabel = new javax.swing.JLabel();
_generationTextField = new javax.swing.JTextField();
_bestFitnessLabel = new javax.swing.JLabel();
_bestFitnessTextField = new javax.swing.JTextField();
_populationAgeLabel = new javax.swing.JLabel();
_populationAgeTextField = new javax.swing.JTextField();
_evaluationTimeLabel = new javax.swing.JLabel();
_evaluationTimeTextField = new javax.swing.JTextField();
setLayout(new java.awt.GridBagLayout());
_generationLabel.setLabelFor(_generationTextField);
_generationLabel.setText("Generation:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(_generationLabel, gridBagConstraints);
_generationTextField.setEditable(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
add(_generationTextField, gridBagConstraints);
_bestFitnessLabel.setLabelFor(_bestFitnessTextField);
_bestFitnessLabel.setText("Best fitness:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 0;
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(_bestFitnessLabel, gridBagConstraints);
_bestFitnessTextField.setEditable(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 0;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
add(_bestFitnessTextField, gridBagConstraints);
_populationAgeLabel.setLabelFor(_populationAgeTextField);
_populationAgeLabel.setText("Population age:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 2;
gridBagConstraints.gridy = 1;
gridBagConstraints.anchor = java.awt.GridBagConstraints.LINE_START;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(_populationAgeLabel, gridBagConstraints);
_populationAgeTextField.setEditable(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 3;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
add(_populationAgeTextField, gridBagConstraints);
_evaluationTimeLabel.setLabelFor(_evaluationTimeTextField);
_evaluationTimeLabel.setText("Evaluation time:");
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 0;
gridBagConstraints.gridy = 1;
gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3);
add(_evaluationTimeLabel, gridBagConstraints);
_evaluationTimeTextField.setEditable(false);
gridBagConstraints = new java.awt.GridBagConstraints();
gridBagConstraints.gridx = 1;
gridBagConstraints.gridy = 1;
gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL;
gridBagConstraints.weightx = 1.0;
gridBagConstraints.insets = new java.awt.Insets(1, 1, 1, 1);
add(_evaluationTimeTextField, gridBagConstraints);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JLabel _bestFitnessLabel;
private javax.swing.JTextField _bestFitnessTextField;
private javax.swing.JLabel _evaluationTimeLabel;
private javax.swing.JTextField _evaluationTimeTextField;
private javax.swing.JLabel _generationLabel;
private javax.swing.JTextField _generationTextField;
private javax.swing.JLabel _populationAgeLabel;
private javax.swing.JTextField _populationAgeTextField;
// End of variables declaration//GEN-END:variables
}