Louis Wasserman wrote:
Yo,

Man, I'd never used FFI before, but it's really not as scary as I'd feared.

The FFI is fantastic. We can even use C higher order functions with normal Haskell function arguments... :)

I've implemented a more comprehensive interface to GLPK's simplex solver and -- rather importantly, for my own needs -- its MIP solver. This doesn't depend on hmatrix, and in fact, it doesn't require any matrix or vector manipulation at all -- linear functions are specified as a straight-up Data.Map from an arbitrary variable type to their coefficients.

I like your interface, it is very complete and user friendly.
(I used hmatrix because of (my own) laziness, to take advantage of some utilities, but of course it is not really required.)

Thanks for your work!
Alberto

The library is now available as glpk-hs on hackage.

Example:

import Data.LinearProgram.LPMonad
import Data.LinearProgram
import Data.LinearProgram.GLPK

objFun :: LinFunc String Int
objFun = linCombination [(10, "x1"), (6, "x2"), (4, "x3")]

lp :: LP String Int
lp = execLPM $ do    setDirection Max
            setObjective objFun
            leqTo (varSum ["x1", "x2", "x3"]) 100
            leqTo (10 *^ var "x1" ^+^ 4 *& "x2" ^+^ 5 *^ var "x3") 600
-- c *^ var v, c *& v, and linCombination [(c, v)] are all equivalent.
-- ^+^ is the addition operation on linear functions.
            leqTo (linCombination [(2, "x1"), (2, "x2"), (6, "x3")]) 300
            varGeq "x1" 0
            varBds "x2" 0 50
            varGeq "x3" 0
            setVarKind "x1" IntVar
            setVarKind "x2" ContVar

main = print =<< glpSolveVars mipDefaults lp

This requires GLPK to be installed, like below.

Louis Wasserman
wasserman.lo...@gmail.com <mailto:wasserman.lo...@gmail.com>
http://profiles.google.com/wasserman.louis


On Wed, Feb 24, 2010 at 4:07 AM, Alberto Ruiz <ar...@um.es <mailto:ar...@um.es>> wrote:

    I have uploaded to hackage an interface to the simplex algorithm
    based on GLPK. It is a very early version, it will probably have
    lots of problems. In the future I would like to add support for
    integer variables (MIP). Any suggestion is welcome.

    This is an example taken from "glpk-utils":

    http://code.haskell.org/hmatrix/packages/glpk/examples/simplex3.hs

    Documentation: http://perception.inf.um.es/~aruiz/hmatrix-glpk/
    <http://perception.inf.um.es/%7Earuiz/hmatrix-glpk/>

    Installation:

    $ sudo apt-get install libglpk-dev
    $ cabal update
    $ cabal install hmatrix-glpk

    If hmatrix is not installed we also need

    $ sudo apt-get install libgsl0-dev liblapack-dev

    I hope it is useful,
    Alberto



    Erik de Castro Lopo wrote:

        Alberto Ruiz wrote:

            I think that GSL does not include linear programming
            solvers, but in the GSL home page there is a reference to
            the GLPK package:

            http://www.gnu.org/software/glpk/glpk.html

            I have not used it, but it would be very nice to have a
            simple Haskell interface to GLPK (or other similar library)
            in hmatrix or as a separate package. I will take a look at this.


        I used GLPK many years ago and I found it excellent.

        Erik




_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to