All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.ericmedvet.jgea.experimenter.builders.Plots Maven / Gradle / Ivy

There is a newer version: 2.7.0
Show newest version
package io.github.ericmedvet.jgea.experimenter.builders;

import io.github.ericmedvet.jgea.core.listener.NamedFunction;
import io.github.ericmedvet.jgea.core.listener.XYPlotTableBuilder;
import io.github.ericmedvet.jgea.core.solver.Individual;
import io.github.ericmedvet.jgea.core.solver.state.POSetPopulationState;
import io.github.ericmedvet.jnb.core.Param;

import java.util.Collection;
import java.util.List;

/**
 * @author "Eric Medvet" on 2022/11/26 for jgea
 */
public class Plots {

  private Plots() {
  }

  public enum Sorting {MIN, MAX}

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder> dyPlot(
      @Param(value = "x", dNPM = "ea.nf.iterations()") NamedFunction, ?
          extends Number> xFunction,
      @Param("y") NamedFunction, ? extends Number> yFunction,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = Double.NEGATIVE_INFINITY) double minY,
      @Param(value = "maxY", dD = Double.NEGATIVE_INFINITY) double maxY
  ) {
    return new XYPlotTableBuilder<>(xFunction, List.of(yFunction), width, height, minX, maxX, minY, maxY, true, true);
  }

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder> elapsed(
      @Param(value = "x", dNPM = "ea.nf.iterations()") NamedFunction, ?
          extends Number> xFunction,
      @Param(value = "y", dNPM = "ea.nf.elapsed()") NamedFunction, ?
          extends Number> yFunction,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = 0) double minY,
      @Param(value = "maxY", dD = Double.NEGATIVE_INFINITY) double maxY
  ) {
    return new XYPlotTableBuilder<>(xFunction, List.of(yFunction), width, height, minX, maxX, minY, maxY, true, true);
  }

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder> fitness(
      @Param(value = "x", dNPM = "ea.nf.iterations()") NamedFunction, ?
          extends Number> xFunction,
      @Param(value = "collection", dNPM = "ea.nf.all()") NamedFunction,
          Collection>> collectionFunction,
      @Param(value = "f", dNPM = "ea.nf.identity()") NamedFunction fFunction,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = Double.NEGATIVE_INFINITY) double minY,
      @Param(value = "maxY", dD = Double.NEGATIVE_INFINITY) double maxY,
      @Param(value = "sort", dS = "min") Sorting sorting,
      @Param(value = "s", dS = "%.2f") String s
  ) {
    NamedFunction, Collection> collFFunction =
        NamedFunctions.each(
            fFunction.of(NamedFunctions.fitness(NamedFunctions.identity(), s)),
            collectionFunction,
            "%s"
        );
    List, ? extends Number>> yFunctions = switch (sorting) {
      case MIN -> List.of(
          NamedFunctions.min(collFFunction, s),
          NamedFunctions.median(collFFunction, s),
          NamedFunctions.max(collFFunction, s)
      );
      case MAX -> List.of(
          NamedFunctions.max(collFFunction, s),
          NamedFunctions.median(collFFunction, s),
          NamedFunctions.min(collFFunction, s)
      );
    };
    return new XYPlotTableBuilder<>(
        xFunction,
        yFunctions,
        width, height,
        minX, maxX, minY, maxY,
        true, false
    );
  }

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder> uniqueness(
      @Param(value = "x", dNPM = "ea.nf.iterations()") NamedFunction, ?
          extends Number> xFunction,
      @Param(value = "ys", dNPMs = {
          "ea.nf.uniqueness(collection=ea.nf.each(map=ea.nf.genotype();collection=ea.nf.all()))",
          "ea.nf.uniqueness(collection=ea.nf.each(map=ea.nf.solution();collection=ea.nf.all()))",
          "ea.nf.uniqueness(collection=ea.nf.each(map=ea.nf.fitness();collection=ea.nf.all()))"
      }) List, ? extends Number>> yFunctions,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = 0) double minY,
      @Param(value = "maxY", dD = 1) double maxY
  ) {
    return new XYPlotTableBuilder<>(xFunction, yFunctions, width, height, minX, maxX, minY, maxY, true, false);
  }

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder xyPlot(
      @Param("x") NamedFunction xFunction,
      @Param("y") NamedFunction yFunction,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = Double.NEGATIVE_INFINITY) double minY,
      @Param(value = "maxY", dD = Double.NEGATIVE_INFINITY) double maxY
  ) {
    return new XYPlotTableBuilder<>(xFunction, List.of(yFunction), width, height, minX, maxX, minY, maxY, true, false);
  }

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder xysPlot(
      @Param("x") NamedFunction xFunction,
      @Param("ys") List> yFunctions,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = Double.NEGATIVE_INFINITY) double minY,
      @Param(value = "maxY", dD = Double.NEGATIVE_INFINITY) double maxY
  ) {
    return new XYPlotTableBuilder<>(xFunction, yFunctions, width, height, minX, maxX, minY, maxY, true, false);
  }

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder> yPlot(
      @Param(value = "x", dNPM = "ea.nf.iterations()") NamedFunction, ?
          extends Number> xFunction,
      @Param("y") NamedFunction, ? extends Number> yFunction,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = Double.NEGATIVE_INFINITY) double minY,
      @Param(value = "maxY", dD = Double.NEGATIVE_INFINITY) double maxY
  ) {
    return new XYPlotTableBuilder<>(xFunction, List.of(yFunction), width, height, minX, maxX, minY, maxY, true, false);
  }

  @SuppressWarnings("unused")
  public static  XYPlotTableBuilder> ysPlot(
      @Param(value = "x", dNPM = "ea.nf.iterations()") NamedFunction, ?
          extends Number> xFunction,
      @Param("ys") List, ? extends Number>> yFunctions,
      @Param(value = "w", dI = 600) int width,
      @Param(value = "h", dI = 400) int height,
      @Param(value = "minX", dD = Double.NEGATIVE_INFINITY) double minX,
      @Param(value = "maxX", dD = Double.NEGATIVE_INFINITY) double maxX,
      @Param(value = "minY", dD = Double.NEGATIVE_INFINITY) double minY,
      @Param(value = "maxY", dD = Double.NEGATIVE_INFINITY) double maxY
  ) {
    return new XYPlotTableBuilder<>(xFunction, yFunctions, width, height, minX, maxX, minY, maxY, true, false);
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy