help-glpk
[Top][All Lists]
Advanced

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

Re: Excessive copies of set elements in GMPL


From: Domingo Alvarez Duarte
Subject: Re: Excessive copies of set elements in GMPL
Date: Fri, 24 Jul 2020 09:05:56 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

Here is the output of the script from the previous message:

Memory usage:

ubuntu glpsol package : 4,544 KB

glpk with my changes: 3,268 KB

====

/usr/bin/time glpsol -m test-nested-sets.mod
GLPSOL: GLPK LP/MIP Solver, v4.65
Parameter(s) specified in the command line:
 -m test-nested-sets.mod
Reading model section from test-nested-sets.mod...
test-nested-sets.mod:12: warning: unexpected end of file; missing end statement inserted
12 lines were read
A count: 10
B count: 20
C count: 30
D count: 10
Display statement at line 12
D:
   (1,2,4)
   (2,3,5)
   (3,4,6)
   (4,5,7)
   (5,6,8)
   (6,7,9)
   (7,8,10)
   (8,9,11)
   (9,10,12)
   (10,11,13)
Model has been successfully generated
GLPK Simplex Optimizer, v4.65
0 rows, 0 columns, 0 non-zeros
~     0: obj =   0.000000000e+00  infeas =  0.000e+00
OPTIMAL SOLUTION FOUND
Time used:   0.0 secs
Memory used: 1.5 Mb (1543589 bytes)
0.00user 0.00system 0:00.01elapsed 80%CPU (0avgtext+0avgdata 4544maxresident)k
0inputs+0outputs (0major+516minor)pagefaults 0swaps

/usr/bin/time myglpsol -m test-nested-sets.mod
GLPSOL: GLPK LP/MIP Solver, v4.65
Parameter(s) specified in the command line:
 -m test-nested-sets.mod
Reading model section from test-nested-sets.mod...
test-nested-sets.mod:12: warning: unexpected end of file; missing end statement inserted
12 lines were read
A count: 10
B count: 20
C count: 30
D count: 10
Display statement at line 12
D:
   (1,2,4)
   (2,3,5)
   (3,4,6)
   (4,5,7)
   (5,6,8)
   (6,7,9)
   (7,8,10)
   (8,9,11)
   (9,10,12)
   (10,11,13)
Model has been successfully generated
GLPK Simplex Optimizer, v4.65
0 rows, 0 columns, 0 non-zeros
~     0: obj =   0.000000000e+00  infeas =  0.000e+00
OPTIMAL SOLUTION FOUND
Time used:   0.0 secs
Memory used: 0.5 Mb (507469 bytes)
0.00user 0.00system 0:00.00elapsed 100%CPU (0avgtext+0avgdata 3268maxresident)k
0inputs+0outputs (0major+214minor)pagefaults 0swaps

====

On 24/7/20 8:58, Domingo Alvarez Duarte wrote:
Hello Michael !

What kind of problem do you expect ? Other than memory size requirements ?

Do you mean something like this:

====

set A := {1..10};
set B := {1..20};
set C := {1..30};

set D := { (a,b,c) in A cross B cross C : b=a+1 and c=b+2 };

printf "A count: %d\n", card(A);
printf "B count: %d\n", card(B);
printf "C count: %d\n", card(C);
printf "D count: %d\n", card(D);

display D;

====

A count: 10
B count: 20
C count: 30
D count: 10
Display statement at line 12
D:
   (1,2,4)
   (2,3,5)
   (3,4,6)
   (4,5,7)
   (5,6,8)
   (6,7,9)
   (7,8,10)
   (8,9,11)
   (9,10,12)
   (10,11,13)

====

Cheers !

On 23/7/20 18:40, Michael Hennebry wrote:
On Tue, 21 Jul 2020, Domingo Alvarez Duarte wrote:

Do you have any example doing what you are talking about ?

In theory it should work.

Right now it process all models in the "examples" folder and the output is identical to the original GLPK/GMPL except that uses less memory and is slightly faster.

Things like the GMPL equivalent of { (a,b,c) in A x B x C : b=a+1, c=b+2 }
My understanding is that the current GMPL processor will form A x B x C
before applying the filtering.
If A, B and C have 100 items each, the inefficiency can probably be lived with. If they have 1,000 items each, it will be grindly slow, assuming it finishes.
If they have 10,000 items each,
the set will be to big for the handler to store.

Of course, done right, a set of 10,000 3-tuples should not be a problem.

On 21/7/20 15:24, Michael Hennebry wrote:
Are these changes supposed to deal with things like nested set iterations?




reply via email to

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