[FlopCpp] such_that functionality...
Tim Hultberg
Tim.Hultberg at eumetsat.int
Wed Dec 20 18:35:05 EST 2006
Hi Vishy,
a) you probably want to use: such_that(N < N.size()-1) (since N
implicitly counts from zero)
b) the bad news is that this wont work either with the current version.
(it used to though) To correct it go to MP_constraint.cpp
and find the lines:
left->generate(
S1(I1)*S2(I2)*S3(I3)*S4(I4)*S5(I5).such_that(B),v,f,1.0);
right->generate(
S1(I1)*S2(I2)*S3(I3)*S4(I4)*S5(I5).such_that(B),v,f,-1.0);
and change them to:
left->generate(
(S1(I1)*S2(I2)*S3(I3)*S4(I4)*S5(I5)).such_that(B),v,f,1.0);
right->generate(
(S1(I1)*S2(I2)*S3(I3)*S4(I4)*S5(I5)).such_that(B),v,f,-1.0);
I will correct it in the next release. Sorry for the inconvenience.
Let me know if you get any more problems with this.
Cheesr, Tim
Tim Hultberg
>>> "Vishy Jeet" <vishv.jeet at gmail.com> 12/19/06 8:53 PM >>>
I have written the following small prograg to solve GAP on size (3, 10)
1 // $Id$
2 #include "flopc.hpp"
3 using namespace flopc;
4 #include "OsiCbcSolverInterface.hpp"
5
6 /* Generalized Assignment Problem */
7
8 class Gap : public MP_model {
9 public:
10 MP_set M,N;
11 MP_data c;
12 MP_data a;
13 MP_data b;
14 MP_variable x;
15 MP_constraint cap, feas;
16
17 Gap(int numM, int numN) : MP_model(new OsiCbcSolverInterface),
18 M(numM), N(numN),
19 c(M,N), a(M,N), b(M),
20 x(M,N),
21 cap(M), feas(N)
22 {
23 x.binary();
24 cap(M) = sum(N, a(M,N)*x(M,N)) <= b(M);
25 feas(N).*such_that(N < N.size())* = sum(M, x(M,N)) == 1;
26 add(cap); add(feas);
27 setObjective( sum(M*N, c(M,N)*x(M,N)));
28 }
29 };
30
31 int main() {
32 double cost[3][11] = {{47,16,27,21,25,12,55,31,40,40,1000},
33 {45,18,56,33,36,46,11,17,31,50,1000},
34 {50,23,22,59,31,35,40,41,40,11,1000}};
35
36 double req[3][11] = {{24,12,8,12,16,14,13,15,23,5,100},
37 {7,17,8,5,6,19,20,7,22,9,100},
38 {23,18,14,8,18,23,19,11,15,11,100}};
39
40 double capc[3] = {37,32,42};
41
42 Gap instance(3,11);
43
44 instance.c.value(&cost[0][0]);
45 instance.a.value(&req[0][0]);
46 instance.b.value(&capc[0]);
47
48 instance.minimize();
49
50 cout<<"numRow:="<<instance->getNumRows()<<"\n";
51 cout<<"numCols:="<<instance->getNumCols()<<"\n";
52 cout<<"numEle:="<<instance->getNumElements()<<"\n";
53 cout<<"obj:="<<instance->getObjValue()<<"\n";
54 instance.x.display("Solution of first instance (x)");
55 }
To learn how the such_that statement works, I introduced the 11th job
with
very high cost of assignment and infeasible
requirement on any of the machines...to prevent infeasibility I write
the
"feas" constraints using such_that statement so
that 11th job doesn't have to be assigned....but I am not able to see
whats
wrong with the code that it doesn't work.
Any help on this is much appreciated..
regards,
vishy
More information about the FlopCpp
mailing list