I'm trying to come up with a fast way to optimize a function which takes a large number of variables, each of which can take a finite set of values.
I have an idea which seems like, if polished, would give a good greedy solution, but I know something like this is sure to have been done already or there's a better way to do it; so what I'm looking for is some suggestion on papers to look at to accomplish what I'm trying to do.
The algorithm I have in mind goes as follows:
The objective is to maximize function f(a,b,c), where a,b,c can take on values in some finite sets A,B,C.
Base solution = f(a0,b0,c0)
Depth one branches are f(a1,b0,c0), f(a0,b1,c0), f(a0,b0,c1)
Depth two branches are f(a2,b0,c0), f(a0,b2,c0), f(a0,b0,c2)
Depth n branches are f(an, b0, c0), f(a0, bn, c0), f(a0, b0, cn)
So you have a tree like:
f(a0,b0,c0) / | \ f(a1,b0,c0) f(a0,b1,c0) f(a0,b0,c1) | | | f(a2,b0,c0) f(a0,b2,c0) f(a0,b0,c2) | | | ... ... ...
If the first depth branches has a better solution than the base, that branch becomes the new base; next round.
Otherwise, move to the next depth and search the branches.
Each depth's branches are just the previous root's parameter index + 1. So for example if f(a1,b0,c0) is a better solution, it becomes the base and the next tree is
f(a1,b0,c0) / | \ f(a2,b0,c0) f(a1,b1,c0) f(a1,b0,c1) | | | f(a3,b0,c0) f(a1,b2,c0) f(a1,b0,c2) | | | ... ... ...
The algorithm ends when reaching a leaf node, at which point the root is the returned solution.
[link][2 comments]