bug-glpk
[Top][All Lists]
Advanced

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

[Bug-glpk] [Fwd: uncaught self reference in model's param line crashes g


From: Andrew Makhorin
Subject: [Bug-glpk] [Fwd: uncaught self reference in model's param line crashes glpsol v4.55]
Date: Sun, 05 Mar 2017 19:10:16 +0300

-------- Forwarded Message --------
From: address@hidden
To: address@hidden
Cc: address@hidden
Subject: uncaught self reference in model's param line crashes glpsol
v4.55
Date: Sun, 05 Mar 2017 15:26:21 +0000

First off, I would like to thank you for sharing such a great tool with the 
rest of the world!
On to the bug report.

I have noticed that glpsol reproducibly crashes on a debian wheezy box
  $ glpsol --version | head -1
  GLPSOL: GLPK LP/MIP Solver, v4.55
if a model's param line contains a self reference.

While the following model is OK

    param A_symbolic{1..2, 1..2}, default -1;
    param A{i in 1..2, j in 1..2} := 
            (if A_symbolic[i,j]=1 then 1.2 else
            (if A_symbolic[i,j]=2 then 3.4 else
                A_symbolic[i,j] ));
    solve;              
    for {i in 1..2} { for {j in 1..2} {printf "%5.2f ",A[i,j];} printf "\n"; } 
    data;                                           
    # if A_symbolic[i,j] = 1 then  A[i,j] is 1.2
    # if A_symbolic[i,j] = 2 then  A[i,j] is 3.4
    #                        else  A[i,j] is A_symbolic[i,j] 
    param A_symbolic: 1 2  :=
                   1  0 1
                   2  2 0 ;
    end;
    

a self reference in the definition of the A parameter is not caught by
glpsol, which causes the program to crash with a segmentation violation error:

    
    param A_symbolic{1..2, 1..2}, default -1;
    param A{i in 1..2, j in 1..2} := 
            (if A_symbolic[i,j]=1 then 1.2 else
            (if A_symbolic[i,j]=2 then 3.4 else
                A[i,j] ));
    solve;              
    for {i in 1..2} { for {j in 1..2} {printf "%5.2f ",A[i,j];} printf "\n"; } 
    data;                                           
    # if A_symbolic[i,j] = 1 then  A[i,j] is 1.2
    # if A_symbolic[i,j] = 2 then  A[i,j] is 3.4
    #                        else  A[i,j] is A_symbolic[i,j] 
    param A_symbolic: 1 2  :=
                   1  0 1
                   2  2 0 ;
    end;


The only difference between the two models was:

$ diff  glpsol_*mod
5c5
<                 A[i,j] ));  
---
>                 A_symbolic[i,j] ));


Any ideas?








reply via email to

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