Hello Senjutib,

[email protected] wrote:
Thanks you so much for your response! Really appreciated!

However, I realize that my requirement is a little different. My optimization 
function is linear with non-linear equality and inequality constraints.

More specifically,

This is what I want:

Maximize z= 0.5 a + 0.5 b + c

s.t,

c = 1- abs(a-b)
0 <= a <= c1
0<=b <= c2
abs(a-b) <= c3


If you have a nonlinear function (like abs) you have to replace it by a linear approximation.
For abs two inequalities are needed. In the concave case you need an
additional binary variable to describe in which part of the abs function
you are. Your example is convex. You can rewrite it as below and feed it to glpsol.

Changing your first constraint to
c <= 1 + abs(a-b);
makes the problem concave.
Further below you will find how to add the binary.

Best regards

Xypron

# convex case
param c1;
param c2;
param c3;

var a, >=0, <= c1;
var b, >=0, <= c2;
var c, >= 1 - c3;

maximize z :
.5 * a + .5 * b + c;

s.t. con1:
c <= 1- (a-b);
s.t. con2:
c <= 1- (b-a);
s.t. con3:
-c3 <= a-b <= c3;

solve;

display a,b,c;

data;

param c1 := 1;
param c2 := 4;
param c3 := 50;

end;

# concave case
param c1;
param c2;
param c3;
param M := 2 * c3;

var a, >=0, <= c1;
var b, >=0, <= c2;
var c, >= 1 - c3;
var x, binary;

maximize z :
.5 * a + .5 * b + c;

s.t. con1:
c <= 1+ (a-b) + M * x;
s.t. con2:
c <= 1+ (b-a) + M * (1 - x);
s.t. con3:
-c3 <= a-b <= c3;

solve;

display a,b,c;

data;

param c1 := 3;
param c2 := 4;
param c3 := 5;

end;



_______________________________________________
Help-glpk mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to