[FlopCpp] wrote first flopcpp model. have a lot of questions

Mario Rappi marappi at wichita.edu
Sun Nov 29 13:11:10 EST 2009


I've just realized that my objective function (minimizing the difference)
makes the problem unbounded.
(I want to use the maximization with the division anyway.)
I will have to find out how to get the solver to warn me of such problems as
infeasibles and undounded. But I assume this would be a question for the
solver list.
(I still need most of my previous questions answered though.)
Thanks again.

On Sat, Nov 28, 2009 at 7:46 PM, Mario Rappi <marappi at wichita.edu> wrote:

> First I include the model, then the output, and at the end the questions:
>
> *****model************************
> // $Id$
> #include "flopc.hpp"
> using namespace flopc;
> #include <OsiClpSolverInterface.hpp>
>
> int main() {
>
>     MP_model &model = MP_model::getDefaultModel();
>     model.setSolver(new OsiClpSolverInterface);
>     model.verbose();
>
>     enum {storeA, storeB, storeC, storeD, numS};
>     enum {Input1, Input2, numI};
>     enum {Output1, numO};
>
>     MP_set S(numS);         // Stores
>     MP_set I(numI);            // Inputs
>     MP_set O(numO);            // Outputs
>
>     MP_subset<2> Input(S,I);
>     Input.insert(S,I);
>     Input.display("Input");
>     MP_subset<2> Output(S,O);
>     Output.insert(S,O);
>     Output.display("Output");
>
>     //this will be easier with an array??
>     MP_data InputVal(Input);
>     InputVal(storeA,Input1)=1; InputVal(storeA,Input2)=3;
>     InputVal(storeB,Input1)=3; InputVal(storeB,Input2)=3;
>     InputVal(storeC,Input1)=4; InputVal(storeC,Input2)=2;
>     InputVal(storeD,Input1)=3; InputVal(storeD,Input2)=1;
>
>     MP_data OutputVal(Output);
>     OutputVal(storeA,Output1)=1;
>     OutputVal(storeB,Output1)=1.5;
>     OutputVal(storeC,Output1)=2;
>     OutputVal(storeD,Output1)=1;
>
>     MP_variable x(I), y(O);
>     x.lowerLimit(I)=0;
>     y.lowerLimit(O)=0;
>
>     MP_constraint efficiency(S);
>     efficiency(S) = sum(I, InputVal(S, I) * x(I)) <= sum(O, OutputVal(S, O)
> * y(O));
>
>     minimize( (sum(O, OutputVal(storeB, O) * y(O))) - (sum(I,
> InputVal(storeB, I) * x(I))));
>
>     efficiency.display("constraints");
>     x.display("x");
>     y.display("y");
>
>     cout<<"Test dea passed."<<endl;
> }
> *****model end************************
>
> *****output************************
> Input
> Output
> FlopCpp: Constraint
> 0   1  0  0
> 1   1  0  0
> 2   1  0  0
> 3   1  0  0
> 0   2  0  0
> 1   2  0  0
> 2   2  0  0
> 3   2  0  0
> 0   0  -0  0
> 1   0  -0  0
> 2   0  -0  0
> 3   0  -0  0
> FlopCpp: Number of constraint blocks: 1
> FlopCpp: Number of individual constraints: 4
> FlopCpp: Number of variable blocks: 2
> FlopCpp: Number of individual variables: 3
> FlopCpp: Number of non-zeroes (including rhs): 12
> Objective
> -1   0  0
> -1   1  -0
> -1   2  -0
> FlopCpp: Generation time: -2.64274e-19
> Clp0000I Optimal - objective value 0
> Clp0032I Optimal objective 0 - 0 iterations time 0.002
> FlopCpp: Optimal obj. value = 0
> FlopCpp: Solver(m, n, nz) = 4  3  0
> constraints
> 0  -1.79769e+308  0  0  -0
> 1  -1.79769e+308  0  0  -0
> 2  -1.79769e+308  0  0  -0
> 3  -1.79769e+308  0  0  -0
> x
> 0   0
> 1   0
> y
> 0   0
> Test dea passed.
> *****output end************************
>
> *****Questions:******************
> I would like to define a set A that includes all members of O and I and
> then derive O and I from A.
> This is what I am thinking in GAMS terms:
> A        / Input1, Input2, Output1 /
> O(A)   /  Input1, Input2 /
> I(A)    / Output1  /
> Is this possible?. I thought it would allow me to write the model more
> easily (but may be not)
> *******************
> I tried to display the constraints but I didn't get what I was expecting
> (the actual mathematical expression). Is it possible to see the constraints
> in any other way?
> *******************
> When I compile I get the following two warnings. Should I be concerned? How
> do I fix them?
>
> c:\program files\coin-flopcpp\flopcpp\src\mp_set.hpp(259) : warning C4267:
> 'return' : conversion from 'size_t' to 'int', possible loss of data
>         c:\program files\coin-flopcpp\flopcpp\src\mp_set.hpp(258) : while
> compiling class template member function 'int
> flopc::MP_subset<nbr>::size(void) const'
>         with
>         [
>             nbr=2
>         ]
>         c:\program files\coin-flopcpp\flopcpp\examples\dea.cpp(21) : see
> reference to class template instantiation 'flopc::MP_subset<nbr>' being
> compiled
>         with
>         [
>             nbr=2
>         ]
> c:\program files\coin-flopcpp\flopcpp\src\mp_set.hpp(243) : warning C4267:
> 'initializing' : conversion from 'size_t' to 'const int', possible loss of
> data
>         c:\program files\coin-flopcpp\flopcpp\src\mp_set.hpp(232) : while
> compiling class template member function 'void
> flopc::MP_subset<nbr>::insert(const std::vector<_Ty> &)'
>         with
>         [
>             nbr=2,
>             _Ty=int
>         ]
>
> *******************
> The objective function that I really want to use is
> maximize( (sum(O, OutputVal(storeB, O) * y(O))) / (sum(I, InputVal(storeB,
> I) * x(I))));
> But it doesn't compile, I get this error:
>
> c:\program files\coin-flopcpp\flopcpp\examples\dea.cpp(51) : error C2678:
> binary '/' : no operator found which takes a left-hand operand of type
> 'flopc::MP_expression' (or there is no acceptable conversion)
>         c:\program files\coin-flopcpp\flopcpp\src\mp_constant.hpp(141):
> could be 'flopc::Constant flopc::operator /(const flopc::Constant &,const
> flopc::Constant &)'
>         c:\program
> files\coin-flopcpp\coinutils\src\coinpackedvector.hpp(483): or
> 'CoinPackedVector operator /(const CoinPackedVectorBase &,const
> CoinPackedVectorBase &)'
>         c:\program
> files\coin-flopcpp\coinutils\src\coinpackedvector.hpp(583): or
> 'CoinPackedVector operator /(const CoinPackedVectorBase &,double)'
>         c:\program
> files\coin-flopcpp\coinutils\src\coinpackedvector.hpp(625): or
> 'CoinPackedVector operator /(double,const CoinPackedVectorBase &)'
>         while trying to match the argument list '(flopc::MP_expression,
> flopc::MP_expression)'
>
> I am using MSVCPP, I read of some problems specific to VCPP so I tried the
> same in Linux(I think it is build-essential in Ubuntu) but I get the same
> errors.
> How can I fix this problem with the division operation?
> *******************
> Is my formulation of the objective function OK in how I sum only for storeB
> or do I have to use such_that or any other type of control?
> How do I display the objective function?
> *******************
> What are these numbers in the output?
> constraints
> 0  -1.79769e+308  0  0  -0
> 1  -1.79769e+308  0  0  -0
> 2  -1.79769e+308  0  0  -0
> 3  -1.79769e+308  0  0  -0
> My four constraints are supposed to have only three terms (two on the left
> and one on the right)
> ********************
> What is this?
> Objective
> -1   0  0
> -1   1  -0
> -1   2  -0
> ********************
>
> If it helps at all: the model is a simple DEA formulation (primal).
> I understand some of my questions may be more C++ than flopcpp questions
> but I can't tell.
> I will appreciate help on any of these questions and on any other comments
> you may have on the model formulation.
> Thanks in advance.
> Mario
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://list.coin-or.org/pipermail/flopcpp/attachments/20091129/c33e9e76/attachment.html 


More information about the FlopCpp mailing list