Example 2: Linear Constrained Optimization

The problem

{\rm {min}} \,\, f(x) = -x_0x_1x_2

subject to

-x_0 - 2x_1 -2x_2 \le 0

x_0 + 2x_1 + 2x_2 \le 72

0 \le x_0 \le 20

0 \le x_1 \le 11

0 \le x_2 \le 42

is solved with an initial guess of x_0 = 10, x_1 = 10 and x_2 = 10.

using System;
using Imsl.Math;

public class MinConGenLinEx2 : MinConGenLin.IGradient
{
    public double F(double[] x)
    {
        return - x[0] * x[1] * x[2];
    }
    
    public void Gradient(double[] x, double[] g)
    {
        g[0] = - x[1] * x[2];
        g[1] = - x[0] * x[2];
        g[2] = - x[0] * x[1];
    }
    
    public static void  Main(String[] args)
    {
        int neq = 0;
        int ncon = 2;
        int nvar = 3;
        double[] a = new double[]{- 1.0, - 2.0, - 2.0, 1.0, 2.0, 2.0};
        double[] xlb = new double[]{0.0, 0.0, 0.0};
        double[] xub = new double[]{20.0, 11.0, 42.0};
        double[] b = new double[]{0.0, 72.0};
        
        MinConGenLin.IGradient fcn = new MinConGenLinEx2();
        MinConGenLin zf = new MinConGenLin(fcn, nvar, ncon, neq, a, b,
            xlb, xub);
        zf.SetGuess(new double[]{10.0, 10.0, 10.0});
        zf.Solve();
        new PrintMatrix("Solution").Print(zf.GetSolution());
        Console.Out.WriteLine("Objective value = " + 
            zf.ObjectiveValue);
    }
}

Output

Solution
   0   
0  20  
1  11  
2  15  

Objective value = -3300

Link to C# source.