Meta Errors

A recent addition to Clojush is the ability to have meta-error values along with the normal error values. The idea of meta-errors is that they are used during selection just like normal errors, but they aren’t taken into consideration when determining whether a program is a solution to a problem.

An example will help illustrate the utility of meta-errors. Let’s say you want to include the size of a program as an error value (or “test case”) that should be minimized. This seems like a potentially interesting thing to do, especially when using lexicase selection, where the size will just be one extra test case. But, when Clojush is determining whether a program solves a problem, we don’t care about the size error value – in fact, that value should never be zero, so if we included it in our “do we have a solution” check, we would never find a solution. So, we can include it as a meta-error, which will allow us to use size in parent selection, but not in checking for solutions.

In the Clojush implementation of meta-errors, a meta-error can be one of two things:

  1. A keyword for a built-in meta-error category, which at the time of writing includes the following:
  • :size (minimize size of program)
  • :compressibility (minimize amount a program compresses compared to itself) (NOTE: Not yet implemented)
  • :total-error (minimize total error)
  • :unsolved-cases (maximize number of cases with zero error)
  • :rand (a random floating-point value)
  • :rand-bit (randomly 0 or 1)
  • :age (minimize genealogical age of program)
  1. A function that takes an individual and an argmap and returns a meta error value.
1 Like

So except for calculating and recording them, they’re not used for selection at all? Just monitored over the course of a run?

Does that help?

1 Like