Funkcja celu

Nieliniowa funkcja celu może należeć do jednej z poniższych klas:

Obiekt reprezentujący funkcję celu powinien należeć do podklasy abstrakcyjnej klasy AbstractNLF.

W konstruktorze funkcji należy podać wymiar jej dziedziny.

Jeżeli stosowany jest algorytm optymalizacyjny wykorzystujący gradient, to metoda evaluate obiektu reprezentującego funkcję powinna wyznaczać wartość gradientu.

Jeżeli stosowany jest algorytm optymalizacyjny wykorzystujący hessian, to metoda evaluate obiektu reprezentującego funkcję powinna wyznaczać wartość hessianu.

Należy również ustalić punkt początkowy (startowy) algorytmu za pomocą metody SetInitVector obiektu reprezentującego funkcję (patrz przykład).

Za pomocą metody setExpensive() z parametrem True można zmniejszyć ilość obliczanych pochodnych w celu przyspieszenia pracy algorytmu.

Przykład 6.1. Funkcja celu

from biz.sc.math.opt.nlf import * 

class TestFunction(AbstractNLF): 
    def __init__(self, dim, type): 
        AbstractNLF.__init__(self, dim, type) 
        print "Function dimension : ", dim 
        print "Function type : ", type 

    def evaluate(self, x, fx, gx, Hx): 
        "@sig void evaluate(double[ ] x, double[ ] fx, double[ ] gx, double[ ][ ] Hx)" 
        
        if (fx != None): 
            fx[0] = x[0]*x[0]+x[1]*x[1]-2*x[1] 
        
        if (gx != None): 
            gx[0] = 2*x[0] 
            gx[1] = 2*x[1]-2 
        
        if (Hx != None): 
            Hx[0][0] = Hx[1][1] = 2 
            Hx[0][1] = Hx[1][0] = 0 

dim = 2 

f = TestFunction(dim, NLF.NLF2) 
f.setInitVector([1.3,0.6])
f.setExpensive(TRUE) # if there is a real necessity

Wynik:

Function dimension :  2
Function type :  2