fsequality-inequality.fs 1.1 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
(*
  Minimize:     -3 * x[0] + 1 * x[1] + 1 * x[2]

  Subject to:   1 * x[0] - 2 * x[1] + 1 * x[2]   <= 11
               -4 * x[0] + 1 * x[1] + 2 * x[2]   >= 3
               -2 * x[0] + 0 * x[1] - 1 * x[2]   = -1

  And           x[0] >= 0, x[1] >= 0, x[2] >= 0


  Answer:
    Objective: 2.000000
    var[0]    : 0.000000
    var[1]    : 1.000000
    var[2]    : 1.000000
    var[3]    : 12.000000
    var[4]    : 0.000000

  Note: When entering the matrix, it is reduced to standard form with appropriate slack variables.
*)

open System
open Google.OrTools.FSharp

let opts = SolverOpts.Default
            .Name("Equality/Inequality Constraints")
            .Goal(Minimize)
            .Objective([-3.0;1.0;1.0;0.0;0.0])
            .MatrixEq([[1.0;-4.0;2.0]; [-2.0;1.0;0.0]; [1.0;2.0;1.0]; [1.0;0.0;0.0]; [0.0;-1.0;0.0]])
            .VectorEq([11.0; 3.0; 1.0])
            .VarLowerBound(0. |> List.replicate 5)
            .VarUpperBound(Double.PositiveInfinity |> List.replicate 5)

let slvrCLP = opts.Algorithm(LP CLP) |> lpSolve |> SolverSummary
let slvrGLOP = opts.Algorithm(LP GLOP) |> lpSolve |> SolverSummary