2013-05-30 15 views
7

Próbuję użyć pakietu scipy.optimize, aby zoptymalizować dyskretny problem optymalizacji (optymalizacja globalna). Zgodnie z dokumentem symulowane wyżarzanie zaimplementowane w scipy.optimize.anneal powinno być dobrym wyborem dla tego samego. Ale nie jestem pewien, jak zmusić optymalizator do wyszukiwania tylko wartości całkowitych w przestrzeni wyszukiwania. Czy ktoś może pomóc?Dyskretna optymalizacja w pytonie

Dobrym przykładem:

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

where, $x1, x2 \in I$

Odpowiedz

4

Sprawdziłem scipy.optimize.anneal, a ja nie widzę sposobu korzystania wartości dyskretnych. Sam sposób implementacji polega na utworzeniu niestandardowej funkcji "przenieś", ale sposób, w jaki musisz określić harmonogram (przez ciąg znaków), uniemożliwia to.

Myślę, że to duży błąd, jeśli można po prostu przekazać niestandardową klasę harmonogramu jako parametr, można dostosować go do używania zmiennych dyskretnych i wielu innych rzeczy.

Rozwiązanie znalazłem jest użycie tej innej realizacji Zamiast: https://github.com/perrygeo/python-simulated-annealing

Bo musisz podać funkcję, która zmienia stan, masz kontrolę nad tym, jakie wartości może mieć, lub jeśli są dyskretne lub ciągły.

Mam nadzieję, że to pomaga.

+0

wielkie dzięki .. super: Szukałem czegoś takiego. W międzyczasie zaimplementowałem SA, aby mieć kontrolę, którą powiedziałeś – goofd