I'm getting an error saying that "argument for abs has invalid type". 

I'm trying to model a load-balancing scenario where 10 weighted items are
distributed across 3 buckets. I want to minimise the difference between each
bucket's total weight and the average weight of all buckets, so I'm trying
to do the following, which is not working:

minimize z:  sum{b in BUCKETS} abs(BucketWeight[b] - AveBucketWeight);




Here is my entire .mod file:

set BUCKETS;
set ITEMS;

param item_weight{i in ITEMS};


/*** decision variables ***/

/* MAP[i, b] is 1 if item i is in bucket b */
var MAP{i in ITEMS, b in BUCKETS} binary >= 0;
var BucketWeight{b in BUCKETS} >= 0;
var AveBucketWeight >= 0;


/*** constraints ***/

/* all items must be assigned to a bucket  */
s.t. all_items{i in ITEMS}: sum{b in BUCKETS} MAP[i, b] = 1;

/* calculate the weight of each bucket */
s.t. bucket_weight{b in BUCKETS}: BucketWeight[b] = sum{i in ITEMS} MAP[i,
b] * item_weight[i];

/* calculate the average weight across all buckets */
s.t. ave_bucket_weight: AveBucketWeight = (sum{b in BUCKETS}
BucketWeight[b]) / 3.0;


/*** objective ***/

/*** PROBLEM OCCURS HERE ***/
minimize z:  sum{b in BUCKETS} abs(BucketWeight[b] - AveBucketWeight);



/*** data ***/

data; 

set BUCKETS := 1 2 3;
set ITEMS := 1 2 3 4 5 6 7 8 9 10;


/* item i has a weight of i */
param item_weight :=
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 10;

end;
-- 
View this message in context: 
http://www.nabble.com/Can%27t-use-variable-within-abs%28%29--tf4338572.html#a12358437
Sent from the Gnu - GLPK - Help mailing list archive at Nabble.com.






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

Reply via email to