Jeff,

Wow, thanks a lot! That is exactly what  I was looking for. 

Best regards,
Dmitri

On 27/01/2013, at 14:17, Jeffrey Kantor <kanto...@nd.edu> wrote:

> Dmitri,
> 
> 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)
> 
> 
> On Sun, Jan 27, 2013 at 1:55 PM, Dmitri Goutnik <d...@syrec.org> wrote:
> Hi Jeff,
> 
> Thanks, yes that would be preferable packing. My goal is to pack items as 
> "tightly" as possible while preserving even (within some predefined margin) 
> weight distribution between bins.
> 
> Best regards,
> Dmitri
> 
> On 27/01/2013, at 13:40, Jeffrey Kantor <kanto...@nd.edu> wrote:
> 
>> Hi Dmitri,
>> 
>> This could be done through the objective function. But before going there, 
>> I'm wondering a bit
>> about the solution you're showing for your example.  Wouldn't you want move 
>> item 7 from Bin 3 to Bin 2 to meet your primary objective?
>> 
>> Jeff
>> 
>> 
>> On Sun, Jan 27, 2013 at 1:34 PM, Dmitri Goutnik <d...@syrec.org> wrote:
>> Hello everyone,
>> 
>> I modified bpp.mod to pack items in predefined number of bins of unlimited 
>> capacity so that weight is (approximately) evenly distributed between bins. 
>> In addition to weight, each item has an "order" or "position". Is there a 
>> way to write an additional model constraint so that items are preferably 
>> packed in compact order, e.g. items with sequential positions should go to 
>> the the same container? For example, for this solution:
>> 
>> Bin 1: total weight 110
>>         item 1 (40)
>>         item 4 (70) <--
>> 
>> Bin 2: total weight 90
>>         item 5 (50)
>>         item 6 (40)
>> 
>> Bin 3: total weight 130
>>         item 2 (60) -->
>>         item 3 (30)
>>         item 7 (15)
>>         item 8 (25)
>> 
>> is there a way to add such constraint so item 2 would preferably be packed 
>> to bin 1?
>> 
>> Thanks,
>> Dmitri
>> _______________________________________________
>> Help-glpk mailing list
>> Help-glpk@gnu.org
>> https://lists.gnu.org/mailman/listinfo/help-glpk
>> 
> 
> 

_______________________________________________
Help-glpk mailing list
Help-glpk@gnu.org
https://lists.gnu.org/mailman/listinfo/help-glpk

Reply via email to