package optimizacion;

import operaciones.Matriz;

/**
 * <p>Title: Ejemplo de aplicacion de los metodos de Barrera y punto interior</p>
 * <p>Description: Minimiza una funcion con restricciones</p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: UMSNH</p>
 * @author Dr. Felix Calderon Solorio
 * @version 1.0
 */

public class ejemplo_05 extends Restricciones{
    public static void main(String[] args) {
        ejemplo_05 aplica = new ejemplo_05();
        double X[] = {1,1};
        double l[] = {100, 100, 100, 100, 100};

        //aplica.interior(new Matriz(X), l, 0.2, 0.1);
        aplica.Barrera(new Matriz(X), 100);
    }

    /**
     * Calcula la matriz Hessiana en el punto X
     * @param X Matriz
     * @return Matriz
     */

    public Matriz Hessiano(Matriz X)
    {
        double H[][] = {{2.0, 0.0}, {0.0, 2.0}};
        return (new Matriz(H));
    }

    /**
     * Calcula el vector gradiente en el punto X
     * @param X Matriz
     * @return Matriz
     */

    public Matriz Gradiente(Matriz X)
    {
        double g[] = new double[2];

        g[0] = 2.0*(X.obten(0,0)-1.0);
        g[1] = 2.0*(X.obten(1,0)-2.5);

        return (new Matriz(g));
    }

    /**
     * Restricciones dadas.
     * @return double[][]
     */

    public double [][] Restricciones()
    {
        double A[][] = {{1, -2, -2},{-1, -2, -6}, {-1, 2, -2}, {1, 0, 0}, {0, 1, 0}};
        return A;
    }
}
