help-glpk
[Top][All Lists]
Advanced

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

[Help-glpk] is there a typo in the wiki-entry for sorting?


From: Meketon, Marc
Subject: [Help-glpk] is there a typo in the wiki-entry for sorting?
Date: Mon, 2 Sep 2013 12:57:50 -0500

The GLPK wiki discusses sorting – and I believe there is a typo in it.

 

Should the line:

       

        set ind{k in 1..card(I)} := setof{i in I: pos[i] = k} i;

 

really be:

 

        set ind{k in 1..card(I)} := setof{i in I: pos[i] = k-1} i;

 

 

A copy/paste of the article is below:

 

 

#  sorting_symbolic.mod - how to sort arrays in MathProg

#  based on code by Andrew Makhorin

 

#  Sometimes it is necessary to print parameters or variables in the

#  order of ascending or descending their values. Suppose, for example,

#  that we have the following subscripted parameter:

 

set I;

 

param a{i in I} := Uniform(2, 7);

 

#  If we print all its members:

 

printf{i in I} "a[%2s] = %g\n", i, a[i];

 

#  the output may look like follows:

#

#  a[a] = 2.64156

#  a[b] = 2.04798

#  a[c] = 2.14843

#  a[d] = 4.76896

#  a[e] = 6.09132

#  a[f] = 3.27780

#  a[g] = 4.06113

#  a[h] = 4.05898

#  a[i] = 6.63120

#  a[j] = 6.50318

#  a[k] = 3.46065

#  a[l] = 4.69845

#

#  However, we would like the parameter members to appear in the order

#  of ascending values.

#

#  Introduce the following auxiliary parameter:

 

param pos{i in I} :=

      card({j in I: a[j] < a[i] or a[j] = a[i] and j < i});

 

#  where pos[i] = k - 1 means that in the sorted list member a[i] has

#  k-th position, 1 <= k <= |I|. Then introduce another auxiliary

#  parameter:

 

set ind{k in 1..card(I)} := setof{i in I: pos[i] = k} i;

 

#  where ind[k] = {i} iff pos[k] = i.

#

#  Now, the following statement:

 

printf "\n";

printf{k in 1..card(I), l in ind[k]} "a[%2s] = %g\n", l, a[l];

 

#  prints the parameter members in the desired order:

#

#  a[b] = 2.04798

#  a[c] = 2.14843

#  a[a] = 2.64156

#  a[f] = 3.27780

#  a[k] = 3.46065

#  a[h] = 4.05898

#  a[g] = 4.06113

#  a[l] = 4.69845

#  a[d] = 4.76896

#  a[e] = 6.09132

#  a[j] = 6.50318

#  a[i] = 6.63120

 

solve;

 

data;

set I := a b c d e f g h i j k l;

#set I := 1 2 3 4 5 6 7 8 9 10 11 12;

end;

 



This e-mail and any attachments may be confidential or legally privileged. If you received this message in error or are not the intended recipient, you should destroy the e-mail message and any attachments or copies, and you are prohibited from retaining, distributing, disclosing or using any information contained herein. Please inform us of the erroneous delivery by return e-mail. Thank you for your cooperation.

reply via email to

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