Defining “optimizer”

I’ve been thinking about how to define “optimizer”.

My attempted definition of “optimizer” is, “something such that there is a method of describing a change to it to concretely describe a system that scores unusually highly on another function, for a wide range of functions, in a way that’s significantly shorter description length than specifying a system that achieves unusually highly on that function from scratch.”

The basic justification for my definition is that if something is an optimizer, then if you were to write a program that emulates the system, then the program would be an implementation of some optimization algorithm. And you could describe something that optimizes for something else by changing the parts of the code responsible for what is in effect the systems’ objective function.

The justification can be extended to logical descriptions of systems that aren’t necessarily describable as programs. I said in the definition that the new system need to be concretely described. This is so you can’t call a rock or other random thing an optimizer because you could describe a new system as something like “This rock, except for being great at optimizing”. The same goes for non-rocks.

The definition seems to work okay.

Humans and AIs would be considered optimizers. This is because a system that optimizing for x can be described by describing a change to the emotions or values of the human or AI in the right way.

And a toaster isn’t an optimizer. Even though toasters are good at scoring highly on making well-toasted bread, the mechanisms for toasting aren’t particularly useful for optimizing much else. So I don’t think describing a change to a toaster to make it score well on a random other function would be easier than specifying the system from scratch.

And I don’t think other various things in our environment, like tools and inanimate objects, would be classified as optimizers. This is because, like toasters, tools and miscellaneous objects don’t do anything much that could generalize to a wide range of other functions, so I don’t think describing an optimizer would be made much easier or less complicated than specifying one from scratch.

Thoughts?