forked from facebook/Ax
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Summary: tldr; the main change here is from ``` MultiObjective: * Metrics * Minimize ``` to ``` MultiObjective: * Objectives ``` Note: Since this is a long diff, I'll flag the lines that are significant! ## CURRENT SITUATION An Objective in Ax is composed of: * Metric: which is composed of a name and a lower_is_better field, the latter of which indicates whether lower values are preferable to higher values * Minimize: a boolean flag indicating whether our optimization should seek to minimize or maximize this metric Note that lower_is_better and minimize are distinct fields with different semantics. It is possible to maximize a metric for which lower_is_better=True! We warn you against this, but there are some legitimate use cases for this (though admittedly I can't remember what, but I swear someone told me there were...). A MultiObjective in Ax is composed of: * Metrics: a list of metric objects * Minimize: a boolean flag indicating whether our optimization should seek to minimize or maximize the overall MultiObjective At first glance, this seems like a natural extension of the single objective case. But there is a key difference. What if you have a MultiObjective composed of metrics A and B, and you want our optimization to minimize metric A but maximize metric B? We only have the one minimize field. It actually doesn't make sense to minimize an entire MultiObjective; you want to control each component objective separately. The way this is currently implemented is that we override the lower_is_better attribute of each Metric in the list. Rather than having this attribute indicate whether lower or higher values of the metric are better, as in the single objective case, we use this attribute to indicate whether the optimization should maximize or minimize this metric. The minimize attribute, if set, is then used to flip the direction of these lower_is_better fields. This is confusing! While it's not causing any major issues right now, it came up during Jakepodell UI work, where we pass both lower_is_better and minimize down from the UI to Python for each objective in the MultiObjective, and currently there's no way to represent both of these values in the Python codebase. ## PROPOSAL A MultiObjective should be composed of: * Objectives: a list of objective objects, each with their own minimize field ... and that's it. No minimize field on MultiObjective. Reviewed By: Balandat Differential Revision: D28869199 fbshipit-source-id: daa5d40b0754a6beaba9d85d06e27fc1b05b2220
- Loading branch information
1 parent
00a5436
commit 595095e
Showing
15 changed files
with
215 additions
and
116 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.