Thanks for that Robbie

2012/5/9 Robbie Morrison <[email protected]>

>
> Hello Tony
>
> ------------------------------------------------------------
> To:           Robbie Morrison <[email protected]>
> Subject:      Re: [Help-glpk] Generate data section files for model (in GNU
> Message-ID:
> <cabq29npoyf5szsetvkvzdqe-is61kfztf-v2szua5mefuv5...@mail.gmail.com>
> From:         Tony Khosravi <[email protected]>
> Date:         Wed, 9 May 2012 20:06:11 +0200
> ------------------------------------------------------------
>
> > 2012/5/9 Robbie Morrison <[email protected]>
> >
> >> Hello Tony
> >>
> >> ------------------------------------------------------------
> >> To:           [email protected]
> >> Subject:      [Help-glpk] Generate data section files for model (in GNU
> >> MathProg or other languages)
> >> From:         Tony Khosravi <[email protected]>
> >> Date:         Wed, 9 May 2012 17:13:36 +0200
> >> ------------------------------------------------------------
> >>
> >> > Hi,
> >> >
> >> > I would like to know if it was possible to generate any
> >> > data files in the GNU MathProg format with the GLPK
> >> > lib.
> >> >
> >> > When I am talking about data file, I mean the data
> >> > section of model data.  The aim would be to be able to
> >> > generate many text files containing only the data
> >> > section so that they can be used later with the solver
> >> > and a file containing only the model section. I didn't
> >> > find any thing like that.
> >> >
> >> > My thought is now to try to implement a general lib to
> >> > generate sets or parameters in a text file according to
> >> > the documentation gmpl, but I was wondering it this had
> >> > been done before (which might be probable).
> >> >
> >> > I also had the idea of using the table statement with
> >> > the CSV driver, but apparently, it cannot be used in
> >> > the data section, only in the model section, and I
> >> > don't want to touch the file with the model. The aim is
> >> > to keep the data section separate from the model
> >> > section.
> >> >
> >> > --
> >> > *Tony Khosravi Dehkourdi*
> >> >
> >> > MSc. Student - Computer Systems
> >> > *Link?ping University*
> >> > El?ve ing?nieur -- G?nie Informatique, Syst?mes et R?seaux
> d'Informations
> >> > (GI06)*
> >> > Universit? de Technologie de Compi?gne*
> >> > Tel:+46 7 60 69 51 57
> >>
> >> Hello Tony
> >>
> >> AFAIK, once your high-level MathProg model has been
> >> translated into a low-level problem object, it is not
> >> possible to detranslate it.
> >>
> >> So I guess you are talking about doing this processing
> >> before your MathProg model + data has been irrevocably
> >> translated.
> >>
> >> You may therefore need to do this work outside of GLPK?
> >> That is my best guess anyway.
> >>
> >> These links might be useful while thinking about your
> >> problem:
> >>
> >>  http://en.wikibooks.org/wiki/GLPK/Steps_of_GMPL_File_Processing
> >>  http://en.wikibooks.org/wiki/GLPK/Interoperability
> >>  http://en.wikibooks.org/wiki/GLPK/Scripting_plus_MathProg
> >>
> >> best regards
> >> ---
> >> Robbie Morrison
> >> PhD student -- policy-oriented energy system simulation
> >> Technical University of Berlin (TU-Berlin), Germany
> >> University email (redirected) : [email protected]
> >> Webmail (preferred)           : [email protected]
> >> [from Webmail client]
> >
> > I would say that the last link is partially the answer
> > to my question.
> >
> > I will try to explain better what I want to do.
> >
> > So as I said, I would like to generate a file
> > containing only data section through a program in a way
> > that I can generate many of those data files through a
> > program, and then run the GLPK solver on each data file
> > according to a model. So you understand that the data
> > section and the model section are in two different
> > files.
> >
> > I think I need to say that I program in C++.
> >
> > Let's say that my program is split into three modules:
> >
> >    - one which generates data (the nature of those data
> >      are not important) through N iterations
> >
> >    - one which would store those data into N files
> >      (data section in a text file)
> >
> >    - one which read those data files one by one and run
> >      the solver (given a file which contains the model
> >      section)
> >
> > The first and third modules are implemented, so I am
> > interested in implementing the second one.
> >
> > In fact, the aim is not to have a very flexible program
> > since to be able to generate the data files, it (I)
> > need to know the model.  Let's say that my first module
> > generate a matrix. With this matrix, I want to compute
> > different things which would corresponds to some
> > parameters needed for the model. Therefore, I would
> > like to store them in file. In order to have something
> > a bit flexible, I was wondering if there was some
> > methods available in GLPK or in another library which
> > could perform those action like a method called
> > "toGMPLParam(name, defaultValue, listOfRecords)" which
> > would give in a file in the GMPL format param name
> > default defaultValue record1, record2, ..., recordsN
> >
> > It is still unclear I think so I will try to explain
> > with an example as follow:
> >
> > I have this "program" in whatever-the-language
> > /* myprog.cpp */
> >
> > begin
> >
> >      // Here I generate some data that I store in a matrix
> >      var myMatrix <- generateData
> >      // Here I perform some operations on this matrix
> >     var var1 <- action1(myMatrix)
> >     var var2 <- action2(myMatrix)
> >
> >     // Here is the part I am interested in
> >     fileOpen("mydata.dat")
> >     f <- toGMPLParam("var1", 0, var1)
> >     f <- toGMPLParam("var2", 0, var2)
> >
> >     // I run this file with the solver and a .mod file
> >     var optimalSolution <- solve("mydata.dat", "mymodel.mod")
> >
> > end
> >
> > /* eof */
> >
> > I am aware of the fact that I could implement a way of
> > just writing those data in a file, trying to respect
> > the MathProg format (as long as it is modular, I would
> > be satisfied), but maybe GLPK or another lib provides
> > such methods that would generate a file with the proper
> > syntax used in MathProg given some parameters.
> >
> > Best regards
> >
> > --
> > *Tony Khosravi Dehkourdi*
> >
> > MSc. Student - Computer Systems
> > *Linköping University*
> > Elève ingénieur -- Génie Informatique, Systèmes et Réseaux d'Informations
> > (GI06)*
> > Université de Technologie de Compiègne*
> > Tel:+46 7 60 69 51 57
>
> I am not aware of any GLPK functions, official or
> internal, that do what you suggest.  Someone else may
> know for sure.
>
> The following Boost C++ libraries may be of interest:
>
>    http://www.boost.org/doc/libs/1_49_0/
>
>    Boost.Smart_ptr
>    Boost.Format
>    Boost.Filesystem
>
> Or STL std::ostringstream instead of Boost.Format.
>
> Depending on your skill levels, maybe also C++ functors, custom
> steam inserters, and the following:
>
>   Boost.Bind
>   Boost.Lambda
>
> It would seem that fully fledged parsing is not
> indicated, otherwise see Boost.Spirit.
>
> Write tight classes with clearly defined roles and
> revisit your design if you are starting to code
> spaghetti.  Think very carefully about the kind of
> abstractions the language supports and use those to
> your advantage.  Unit testing is also be useful.  Its
> a learning curve, for sure.
>
> Finally, I guess that the specification for MathProg is
> well thought through, although I don't use the
> language myself.
>
> That is about as specific as I can be in the
> circumstances.
>
> good luck
> ---
> Robbie Morrison
> PhD student -- policy-oriented energy system simulation
> Technical University of Berlin (TU-Berlin), Germany
> University email (redirected) : [email protected]
> Webmail (preferred)           : [email protected]
> [from Webmail client]
>
>
>
I knew the Boost library, but I never used them. I wanted to stay with the
standard library and not use any extra library (the code that I am
developing ought to be used by others people on other machine and there are
not computer science people, so I want to keep things simple and in the
standard c++ box).
I will have a look anyway on those libraries that Boost provides.

As you mentioned, I wanted to use some functors and/or template to achieve
this kind of translator to the MathProg format.
I guess this is what I wil try to do.

Thanks for the help anyway.

Regards,

-- 
*Tony Khosravi Dehkourdi*

MSc. Student - Computer Systems
*Linköping University*
Elève ingénieur -- Génie Informatique, Systèmes et Réseaux d'Informations
(GI06)*
Université de Technologie de Compiègne*
Tel:+46 7 60 69 51 57
_______________________________________________
Help-glpk mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to