Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding a new synthetic function #217

Merged

Conversation

byte-sculptor
Copy link
Contributor

@byte-sculptor byte-sculptor commented Feb 17, 2021

Adding EnvelopedWaves and MultiObjectiveEnvelopedWaves as two new synthetic functions with many useful properties.

These are sine waves enveloped by another function, either linear, quadratic or another sine wave.
An enveloped sine wave produces complexity for the optimizer that allows us evaluate its behavior on non-trivial problems.
Simultaneously, sine waves have the following advantages over polynomials:
1. They have well known optima - even when we envelop the function with another sine wave, as long as we keep their frequencies harmonic, we can know exactly where the optimum is.
2. They cannot be well approximated by a polynomial (Taylor expansion is accurate only locally).
3. For multi-objective problems, we can manipulate the phase shift of each objective to control the shape of the pareto frontier.

The way multi-objective enveloped waves work is that we pass the same parameters through 1 or more single-objective enveloped waves functions.
One useful property is that we not only know where the optima for individual functions are (maxima of sine are easy to find),
but we can also know and control the shape of the pareto frontier, by controlling the phase difference between the individual
objectives. For example: a phase difference of 0, means that that the objective functions are overlaid on top of each other
and their optima are exactly on top of each other, so the pareto frontier is a single, optimal point
Alternatively, the phase difference of quarter-period, introduces a trade-off between the objectives where
y0 = sin(x)
and
y1 = sin(x - math.pi / 2) = -cos(x)
which yields a pareto frontier in a shape of a quarter-cirle.
Yet another option is to use a phase difference of math.pi. This yields a trade-off between the objectives where:
y0 = sin(x)
and
y1 = sin(x - math.pi) = -sin(x) = -y0
which yields a pareto frontier where a gain in one objective results in an equal loss in the other objective, so the shape
of that frontier is a diagonal of a square.

@byte-sculptor byte-sculptor marked this pull request as ready for review February 17, 2021 23:54
@byte-sculptor byte-sculptor merged commit 3b1e966 into microsoft:main Feb 18, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants