This is a problem with two objectives which, depending on problem data, may conflict with each other. So the best we can do is to find tradeoffs between the conflicting objectives. Here's one solution where alpha is a parameter expressing the relative significance of the two objectives.
set BINS := 1..3;
set ITEMS := 1..8;
param weight{ITEMS};
var wmax >= 0;
var x{i in ITEMS, b in BINS} binary;
s.t. A{i in ITEMS}: sum{b in BINS} x[i,b] = 1;
s.t. B{b in BINS}: sum{i in ITEMS} weight[i]*x[i,b] <= wmax;
minimize obj: wmax + alpha*sum{b in BINS, i in ITEMS} (card(BINS)-b)*i*x[i,b];
solve;
for {b in BINS}: {
printf "Bin %d: total weight %d\n", b, sum{i in ITEMS} weight[i]*x[i,b];
printf {i in ITEMS : x[i,b] = 1}: " item %d (%d)\n", i, weight[i];
printf "\n";
}
data;
param weight :=
1 40
2 60
3 30
4 70
5 50
6 40
7 15
8 25 ;
end;
Bin 1: total weight 110
item 1 (40)
item 4 (70)
Bin 2: total weight 110
item 2 (60)
item 5 (50)
Bin 3: total weight 110
item 3 (30)
item 6 (40)
item 7 (15)
item 8 (25)
Another solution would be to solve the problem in two phases. The first phase determines the minimum weight for each bin (for this data, 110), a second phase that seeks the tightest packing subject to a bound on bin weight that's greater than or equal to the minimum possible weight. Here's a solution to that problem where a bound of 130 is used:
set BINS := 1..3;
set ITEMS := 1..8;
param weight{ITEMS};
param wmax;
var x{i in ITEMS, b in BINS} binary;
s.t. A{i in ITEMS}: sum{b in BINS} x[i,b] = 1;
s.t. B{b in BINS}: sum{i in ITEMS} weight[i]*x[i,b] <= wmax;
minimize obj: sum{b in BINS, i in ITEMS} (card(BINS)-b)*i*x[i,b];
solve;
for {b in BINS}: {
printf "Bin %d: total weight %d\n", b, sum{i in ITEMS} weight[i]*x[i,b];
printf {i in ITEMS : x[i,b] = 1}: " item %d (%d)\n", i, weight[i];
printf "\n";
}
data;
param wmax := 130;
param weight :=
1 40
2 60
3 30
4 70
5 50
6 40
7 15
8 25 ;
end;
Bin 1: total weight 100
item 1 (40)
item 2 (60)
Bin 2: total weight 100
item 3 (30)
item 4 (70)
Bin 3: total weight 130
item 5 (50)
item 6 (40)
item 7 (15)
item 8 (25)