Optimzing the OneMin objective function with grid search¶
The optimization stops after a global timeout of 10 seconds.
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=True, 10=True, 11=True, 12=True, 13=True, 14=True, 15=True) = 16
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=True, 10=True, 11=True, 12=True, 13=True, 14=True, 15=False) = 15
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=True, 10=True, 11=True, 12=True, 13=True, 14=False, 15=False) = 14
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=True, 10=True, 11=True, 12=True, 13=False, 14=False, 15=False) = 13
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=True, 10=True, 11=True, 12=False, 13=False, 14=False, 15=False) = 12
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=True, 10=True, 11=False, 12=False, 13=False, 14=False, 15=False) = 11
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=True, 10=False, 11=False, 12=False, 13=False, 14=False, 15=False) = 10
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=True, 9=False, 10=False, 11=False, 12=False, 13=False, 14=False, 15=False) = 9
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=True, 8=False, 9=False, 10=False, 11=False, 12=False, 13=False, 14=False, 15=False) = 8
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=True, 7=False, 8=False, 9=False, 10=False, 11=False, 12=False, 13=False, 14=False, 15=False) = 7
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=True, 6=False, 7=False, 8=False, 9=False, 10=False, 11=False, 12=False, 13=False, 14=False, 15=False) = 6
Minimum for Sum: f(0=True, 1=True, 2=True, 3=True, 4=True, 5=False, 6=False, 7=False, 8=False, 9=False, 10=False, 11=False, 12=False, 13=False, 14=False, 15=False) = 5
The optimal parameters are (0=True, 1=True, 2=True, 3=True, 4=True, 5=False, 6=False, 7=False, 8=False, 9=False, 10=False, 11=False, 12=False, 13=False, 14=False, 15=False).
# Future
from __future__ import absolute_import, division, print_function, \
unicode_literals, with_statement
# First Party
from metaopt.core.optimize.optimize import optimize
from metaopt.core.paramspec.util import param
from metaopt.core.returnspec.util.decorator import minimize
from metaopt.optimizer.gridsearch import GridSearchOptimizer
from metaopt.optimizer.saes import SAESOptimizer
from metaopt.plugin.print.optimum import OptimumPrintPlugin
from metaopt.plugin.print.status import StatusPrintPlugin
from metaopt.plugin.visualization.best_fitness import VisualizeBestFitnessPlugin
@minimize("Sum")
@param.multi(param.bool, map(str, range(16)))
def f(**kwargs):
return sum(kwargs.values())
def main():
optimizer = GridSearchOptimizer()
timeout = 10
visualize_best_fitness_plugin = VisualizeBestFitnessPlugin()
plugins = [
OptimumPrintPlugin(),
visualize_best_fitness_plugin,
]
optimum = optimize(f, timeout=timeout, optimizer=optimizer, plugins=plugins)
print("The optimal parameters are %s." % str(optimum))
visualize_best_fitness_plugin.show_fitness_invocations_plot()
visualize_best_fitness_plugin.show_fitness_time_plot()
if __name__ == '__main__':
main()