Optimización Multidimensional sin restricciones

Optimización Multidimensional sin restricciones

 

Búsqueda aleatoria

 

Este método evalúa en forma repetida la función mediante la selección aleatoria de valores de la variable independiente. Si un número suficiente de muestras se lleva a cabo, el óptimo será eventualmente localizado.

 

Dada una función f(x,y) en el dominio acotado xÎ [xl, xu] y y Î [yl, yu], se genera un número aleatorio r entre 0 y 1 y los valores de x y de y en el rango se calculan como:

 

x = xl + (xu – xl)*r

y = yl + (yu – yl)*r

 

Ejemplo

 

Encontrar el máximo de la función f(x,y) = y –x –2x2 - 2xy - y2 en el dominio acotado xÎ [-2, 2] y y Î [1, 3].

 

k

x

y

f(x,y)

0

0.00000

0.00000

0.00000

1

-0.84276

1.19252

1.20270

2

-0.84276

1.19252

1.20270

3

-0.84276

1.19252

1.20270

4

-0.84276

1.19252

1.20270

5

-0.84276

1.19252

1.20270

6

-0.84276

1.19252

1.20270

7

-0.84276

1.19252

1.20270

8

-0.84276

1.19252

1.20270

9

-0.84276

1.19252

1.20270

167

-0.92622

1.28268

1.22395

183

-1.11212

1.49897

1.22463

465

-1.04210

1.66243

1.23375

524

-0.96660

1.36514

1.23859

626

-0.97539

1.48462

1.24931

999

-0.97539

1.48462

1.24931

 

Implementación en Java

 

  void Busqueda_Aleatoria()

  {

    int i;

    double r, x, y, max = 0, maxx = 0, maxy = 0, fx;

    double xl = -2, xu = 2, yl = 1, yu = 3;

    Random azar = new Random();

 

 

    for(i=0; i<1000; i++)

    {

 

      r = azar.nextDouble();

      x = xl + (xu - xl)*r;

      r = azar.nextDouble();

      y = yl + (yu - yl)*r;

 

      fx = f(x,y);

 

      if(fx > max)

      {

        max = fx;

        maxx = x;

        maxy = y;

      }

      System.out.println(i + "\t " +maxx + "\t " + maxy + "\t " + max );

    }

  }

  double f(double x, double y)

  {

    return y - x - 2*x*x - 2*x*y - y*y;

  }