Yo,<br><br>Man, I&#39;d never used FFI before, but it&#39;s really not as scary as I&#39;d feared.<br><br>I&#39;ve implemented a more comprehensive interface to GLPK&#39;s simplex solver and -- rather importantly, for my own needs -- its MIP solver.  This doesn&#39;t depend on hmatrix, and in fact, it doesn&#39;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.<br>

<br>The library is now available as glpk-hs on hackage.<br><br>Example:<br><br>import Data.LinearProgram.LPMonad<br>import Data.LinearProgram<br>import Data.LinearProgram.GLPK<br><br>objFun :: LinFunc String Int<br>objFun = linCombination [(10, &quot;x1&quot;), (6, &quot;x2&quot;), (4, &quot;x3&quot;)]<br>

<br>lp :: LP String Int<br>lp = execLPM $ do    setDirection Max<br>            setObjective objFun<br>            leqTo (varSum [&quot;x1&quot;, &quot;x2&quot;, &quot;x3&quot;]) 100<br>            leqTo (10 *^ var &quot;x1&quot; ^+^ 4 *&amp; &quot;x2&quot; ^+^ 5 *^ var &quot;x3&quot;) 600<br>

<div style="margin-left: 80px;">-- c *^ var v, c *&amp; v, and linCombination [(c, v)] are all equivalent.<br>-- ^+^ is the addition operation on linear functions.<br></div>            leqTo (linCombination [(2, &quot;x1&quot;), (2, &quot;x2&quot;), (6, &quot;x3&quot;)]) 300<br>

            varGeq &quot;x1&quot; 0<br>            varBds &quot;x2&quot; 0 50<br>            varGeq &quot;x3&quot; 0<br>            setVarKind &quot;x1&quot; IntVar<br>            setVarKind &quot;x2&quot; ContVar<br><br>

main = print =&lt;&lt; glpSolveVars mipDefaults lp<br><br>This requires GLPK to be installed, like below.<br><br clear="all">Louis Wasserman<br><a href="mailto:wasserman.louis@gmail.com">wasserman.louis@gmail.com</a><br>
<a href="http://profiles.google.com/wasserman.louis">http://profiles.google.com/wasserman.louis</a><br>

<br><br><div class="gmail_quote">On Wed, Feb 24, 2010 at 4:07 AM, Alberto Ruiz <span dir="ltr">&lt;<a href="mailto:aruiz@um.es">aruiz@um.es</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">

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.<br>


<br>
This is an example taken from &quot;glpk-utils&quot;:<br>
<br>
<a href="http://code.haskell.org/hmatrix/packages/glpk/examples/simplex3.hs" target="_blank">http://code.haskell.org/hmatrix/packages/glpk/examples/simplex3.hs</a><br>
<br>
Documentation: <a href="http://perception.inf.um.es/%7Earuiz/hmatrix-glpk/" target="_blank">http://perception.inf.um.es/~aruiz/hmatrix-glpk/</a><br>
<br>
Installation:<br>
<br>
$ sudo apt-get install libglpk-dev<br>
$ cabal update<br>
$ cabal install hmatrix-glpk<br>
<br>
If hmatrix is not installed we also need<br>
<br>
$ sudo apt-get install libgsl0-dev liblapack-dev<br>
<br>
I hope it is useful,<br>
Alberto<br>
<br>
<br>
<br>
Erik de Castro Lopo wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Alberto Ruiz wrote:<br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
I think that GSL does not include linear programming solvers, but in the GSL home page there is a reference to the GLPK package:<br>
<br>
<a href="http://www.gnu.org/software/glpk/glpk.html" target="_blank">http://www.gnu.org/software/glpk/glpk.html</a><br>
<br>
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.<br>
</blockquote>
<br>
I used GLPK many years ago and I found it excellent.<br>
<br>
Erik<br>
</blockquote>
<br>
</blockquote></div><br>