[Haskell-cafe] Linear programming in Haskell
Louis Wasserman
wasserman.louis at gmail.com
Mon Mar 1 19:46:10 EST 2010
If you're using the LPM monad, then this is about as easy as that: you use
do (x1:x2:x3:_) <- newVariables
......
I mean, run is equivalent to
run f = execLPM (newVariables >>= put . f)
so...yeah, I think this is a reasonable solution.
Alternatively, I'm almost positive there's a monad out there that lets you
draw on unique values. It'd look something like
type Variable = Int
newtype UniqueM a = UniqueM (Variable -> (Variable, a))
-- monad instance, etc.
getUnique :: UniqueM Variable
getUnique = UniqueM (\ x -> (x+1, x))
Then you can use the LPT monad transformer to construct a linear program
around this, just by working in the "LPT Variable c UniqueM" monad.
That's actually a nicer solution than my current implementation. I'll do
that, then...
Louis Wasserman
wasserman.louis at gmail.com
http://profiles.google.com/wasserman.louis
On Mon, Mar 1, 2010 at 9:29 AM, Henning Thielemann <
lemming at henning-thielemann.de> wrote:
>
> On Sun, 28 Feb 2010, Louis Wasserman wrote:
>
> It's an expensive operation, though -- since I don't track the set of all
>> variables as the LP is built, I need to construct the set of all variables
>> before generating new ones -- so it's recommended that you get all the
>> variables you need in one or two passes.
>>
>
> Then you might prefer a single operation that generates all variables and
> runs an enclosed problem on them:
>
> run :: ([Variable] -> LP a) -> LP a
>
>
> Use as
>
> run $ \x0:x1:x2:_ -> do
> ...
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20100301/1a50a7f2/attachment.html
More information about the Haskell-Cafe
mailing list