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.
Hmm. I think this is closer to "general optimizer" than to "optimizer": notice that certain chess-playing algorithms (namely, those that have been "hard-coded" with lots of chess-specific heuristics and maybe an opening manual) wouldn't meet this definition, since it's not easy to change them to play e.g. checkers or backgammon or Go. Was this intentional (do you think that this style of chess program doesn't count as an optimizer)? I think your definition is getting at something interesting, but I think it's more specific than "optimizer".
Sorry for the late response.
If a chess program still has a planning or search algorithm, then I think it would still be helpful for describing an optimizer for something else.
For example, suppose a chess program uses a standard planning algorithm and and has added chest-specific heuristics, a chess world model, and goals. Then if you wanted to specify a something-else-optimizer, you could change most of the things but keep the planning algorithm.
To count as an optimizer, an optimizer for one thing doesn't need to be easily turned into an optimizer for something else. But it needs to help.
It's possible that there is a way to construct what should be called an optimization algorithm that has no generalizeability at all, but I'm not sure how to do that.
Your definition of optimizer uses "optimizing that function from scratch" which might need some more unpacking.
You may be interested in this prior discussion on optimization which shares some things with your definition but takes a more control theory / systems perspective.
Thanks for the link. I hadn't seen that.
By "describe a system from scratch", I mean to describe it without referencing other systems. Describing one system in terms of its changes from some other system would reference another system.
If you had an AI that currently had zero knowledge of anything, and the AI then learned about the system in its world model, then that AI has specified the system from scratch.
Ah, I didn't mean to ask about the designing part, but moreso about how you use the word optimize in your definition when it comes to 'optimizing from scratch', which might get a little recursive.
Oh, my mistake. I should have said my definition of "optimizer" was "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 that score from scratch."
I've edited the post.