[gecode-users] Using Linear Constraints
Max
chaosangel at gmx.de
Mon Dec 1 17:52:39 CET 2008
Now i think i got it. Forgot the second parameter, multiplying each
argument.
I still have to combine linear with the non-linear constraints, but now
i have everything in variables, thats great.
Thx
Christian Schulte wrote:
> I think I already answered that: please use linear directly! Do not
> decompose int several plus or minus constraints as this sacrifices
> propagation.
>
> So, in your example for 5*x+y=z, you post:
> IntArgs c(3);
> IntVarArgs xyz(3);
> c[0]= 5; xyz[0]=x;
> c[1]= 1; xyz[1]=y;
> c[2]=-1; xyz[3]=z;
> linear(home,c,xyz,IRT_EQ,0);
>
> Cheers
> Christian
>
>
> --
> Christian Schulte, www.ict.kth.se/~cschulte/
>
>
> -----Original Message-----
> From: users-bounces at gecode.org [mailto:users-bounces at gecode.org] On Behalf
> Of Max
> Sent: Monday, December 01, 2008 5:24 PM
> To: users at gecode.org
> Subject: [gecode-users] Using Linear Constraints
>
> Hello, as already asked some time ago i still want to speed up my parser
> building the constraints using linear expressions.
> Currently i'm doing the following:
> I got two values (either variables or constant integers) and i want to
> for example add them:
>
> At first, all Integer Values are converted to Variables
>
> IntVar(this, a->getInteger(), a->getInteger());
>
> Now, for the following operands i do:
>
> return plus(this, v1,v2);
>
> Returns the linear constrained variable, thats ok, the same for minus.
> If i now want to multiply two Values, i use
>
> return mult(this, v1,v2);
> or for division
>
> IntVar ret(this, Gecode::Int::Limits::min, Gecode::Int::Limits::max);
> div(this, v1,v2, ret);
> return ret;
> Both returning a variable.
> Now i want to use linear constraints if one of my values is a constant
> integer.
> I found out that plus(this, v1,v2);
> translates into linear(home, xy, IRT_EQ, z, icl, pk);
> and then returns "z" as a variable.
> For multiplication (constant with variable) i only found:
> Minimodel::operator*
> It does create a Minimodel::LinExpr.
> Now i want to know how can i convert it back to variable, to set further
> operators.
>
> For example:
>
> (X*5)+Y
>
> I want to create a linear expression with X*5.
> Using Minimodel i do get a LinExpr.
> How can i now use the function plus(this, v1,v2) to add Y as linear
> function?
>
> Thank you for any help.
> Max
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>
> _______________________________________________
> Gecode users mailing list
> users at gecode.org
> https://www.gecode.org/mailman/listinfo/gecode-users
>
>
More information about the gecode-users
mailing list