help-glpk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-glpk] The "dual" suffix and sensitivity to how a constraint is


From: glpk xypron
Subject: Re: [Help-glpk] The "dual" suffix and sensitivity to how a constraint is expressed in GMPL
Date: Tue, 28 Dec 2010 22:59:30 +0100

Hello Marc,

in the general case a constraint may have the form:

a + sum b[i] x[i] <=> c + sum d[i] x[i];

Now all columns have to be moved to the left and all
constants to the right giving you:

sum (b[i]-d[i]) x[i] <=> c - a;

Giving your special case a special treatment might create
results that are not intuitive in a different context.

Why do you not always write the columns on the left hand side
and the constants on the right hand side?

The code in question is in glpk-4.45/src/glpmpl03.c, function
take_member_con, where you can find the transformation rules:
/* constraint a * x + b >= c * y + d is transformed to the
   standard form a * x - c * y >= d - b */
/* constraint a * x + b <= c * y + d is transformed to the
   standard form a * x - c * y <= d - b */
/* constraint a * x + b = c * y + d is transformed to the
   standard form a * x - c * y = d - b */
/* ranged constraint c <= a * x + b <= d is transformed to
   the standard form c - b <= a * x <= d - b */

I have updated
http://en.wikibooks.org/wiki/GLPK/Steps_of_GMPL_File_Processing#Model_generation

Best regards

Xypron


-------- Original-Nachricht --------
> Datum: Tue, 28 Dec 2010 15:22:19 -0600
> Betreff: [Help-glpk] The "dual" suffix and sensitivity to how a constraint is 
> expressed in GMPL

> I came across a curious quirk in the use of the new suffixes in GMPL:  how
> a constraint is formed leads to non-intuitive dual results.
> 
> This model:
>   # Simple Model 1
>   var x1 >= 0;
>   var x2 >= 0;
>   var s1 >= 0;
>   var s2 >= 0;
> 
>   s.t. constraint1 : 1.0 = 0.1*x1 + x2 + s1;
>   s.t. constraint2 : 1.0 = x1 + 0.2*x2 + s2;
>   minimize obj: -x1 - x2;
> 
>   solve;
> 
>   display constraint1.dual;
>   display constraint2.dual;
> 
>   end;
> 
> displays the two duals as
>   constraint1.dual = 0.816326530612245
>   constraint2.dual = 0.918367346938776
> 
> But changing how constraint1 and constraint2 are written to:
>   s.t. constraint1 : 0.1*x1 + x2 + s1 = 1.0;
>   s.t. constraint2 : x1 + 0.2*x2 + s2 = 1.0;
> displays the two duals as
>   constraint1.dual = -0.816326530612245
>   constraint2.dual = -0.918367346938776
> 
> Using the "--wlp" option, it's easy to see what is occuring.  In the first
> case, the "wlp" output is:
>   \* Problem: simple *\
> 
>   Minimize
>    obj: - x1 - x2
> 
>   Subject To
>    constraint1: - 0.1 x1 - x2 - s1 = -1
>    constraint2: - x1 - 0.2 x2 - s2 = -1
> 
>   End
> and in the second case the "wlp" output is:
> 
>   \* Problem: simple *\
> 
>   Minimize
>    obj: - x1 - x2
> 
>   Subject To
>    constraint1: + 0.1 x1 + x2 + s1 = 1
>    constraint2: + x1 + 0.2 x2 + s2 = 1
> 
>   End
> By switching around the terms on the "=" sign, GMPL reversed the signs of
> all of the coefficients.  Which reversed the signs on the duals.
> 
> I'm not a fan of the changing of the sign when I plan to use the duals for
> calculations later on; it leads to somewhat random behavior, and makes
> using the new suffixes a little scary for bigger models when it is not easy to
> know the correct sign for each constraint.  Is there really a need to
> change the signs?  I would hope this could be turned off.
> 
> -Marc
> 
> 
> 
> 
> ________________________________
> This e-mail and any attachments may be confidential or legally privileged.
> If you received this message in error or are not the intended recipient,
> you should destroy the e-mail message and any attachments or copies, and you
> are prohibited from retaining, distributing, disclosing or using any
> information contained herein. Please inform us of the erroneous delivery by
> return e-mail. Thank you for your cooperation.

-- 
NEU: FreePhone - kostenlos mobil telefonieren und surfen!                       
Jetzt informieren: http://www.gmx.net/de/go/freephone



reply via email to

[Prev in Thread] Current Thread [Next in Thread]