Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Discrete optimization in python

I am trying to use the scipy.optimize package to optimize a discrete optimization problem (global optimization). Acc to the doc, simulated annealing implemented in scipy.optimize.anneal should be a good choice for the same. But I am not sure how to force the optimizer to search only integer values of the search space. Can someone help?

An illustrative example:

f(x1,x2) = (1-0.4*x1)^2 + 100*(0.6*x2 -0.4*x1^2)^2

where, $x1, x2 \in I$

like image 821
goofd Avatar asked May 30 '13 19:05

goofd


1 Answers

I've checked scipy.optimize.anneal, and I can't see a way to use discrete values. The way to implement it yourself, is to create a custom "move" function, but the way you have to specify the schedule (by a string) prevents you from doing so.

I think it is a big mistake, if you could just pass a custom schedule class as the parameter, you could customize it for using discrete variables and many more things.

The solution I found is to use this other implementation instead: https://github.com/perrygeo/python-simulated-annealing

Because you have to provide the function which modifies the state, you have control on what values it can have, or if they are discrete or continuous.

like image 70
Marc Garcia Avatar answered Sep 29 '22 05:09

Marc Garcia