summaryrefslogtreecommitdiff
path: root/glpk-5.0/examples/sorting.mod
diff options
context:
space:
mode:
authorPasha <pasha@member.fsf.org>2023-01-27 00:54:07 +0000
committerPasha <pasha@member.fsf.org>2023-01-27 00:54:07 +0000
commitef800d4ffafdbde7d7a172ad73bd984b1695c138 (patch)
tree920cc189130f1e98f252283fce94851443641a6d /glpk-5.0/examples/sorting.mod
parentec4ae3c2b5cb0e83fb667f14f832ea94f68ef075 (diff)
downloadoneapi-ef800d4ffafdbde7d7a172ad73bd984b1695c138.tar.gz
oneapi-ef800d4ffafdbde7d7a172ad73bd984b1695c138.tar.bz2
simplex-glpk with modified glpk for fpgaHEADmaster
Diffstat (limited to 'glpk-5.0/examples/sorting.mod')
-rw-r--r--glpk-5.0/examples/sorting.mod67
1 files changed, 67 insertions, 0 deletions
diff --git a/glpk-5.0/examples/sorting.mod b/glpk-5.0/examples/sorting.mod
new file mode 100644
index 0000000..8f82b1f
--- /dev/null
+++ b/glpk-5.0/examples/sorting.mod
@@ -0,0 +1,67 @@
+/* sorting.mod - how to sort arrays in MathProg */
+
+/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
+
+# 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 := 1..12;
+
+param a{i in I} := Uniform(2, 7);
+
+# If we print all its members:
+
+printf{i in I} "a[%d] = %g\n", i, a[i];
+
+# the output may look like follows:
+#
+# a[1] = 2.64156
+# a[2] = 2.04798
+# a[3] = 2.14843
+# a[4] = 4.76896
+# a[5] = 6.09132
+# a[6] = 3.27780
+# a[7] = 4.06113
+# a[8] = 4.05898
+# a[9] = 6.63120
+# a[10] = 6.50318
+# a[11] = 3.46065
+# a[12] = 4.69845
+#
+# However, we would like the parameter members to appear in the order
+# of ascending their values.
+#
+# Introduce the following auxiliary parameter:
+
+param pos{i in I} :=
+ 1 + card({j in I: a[j] < a[i] or a[j] = a[i] and j < i});
+
+# where pos[i] = k means that in the sorted list member a[i] would
+# have k-th position, 1 <= k <= |I|. Then introduce another auxiliary
+# parameter:
+
+param ind{k in 1..card(I)} := sum{i in I: pos[i] = k} i;
+
+# where ind[k] = i iff pos[k] = i.
+#
+# Now, the following statement:
+
+printf{k in 1..card(I)} "a[%d] = %g\n", ind[k], a[ind[k]];
+
+# prints the parameter members in the desired order:
+#
+# a[2] = 2.04798
+# a[3] = 2.14843
+# a[1] = 2.64156
+# a[6] = 3.27780
+# a[11] = 3.46065
+# a[8] = 4.05898
+# a[7] = 4.06113
+# a[12] = 4.69845
+# a[4] = 4.76896
+# a[5] = 6.09132
+# a[10] = 6.50318
+# a[9] = 6.63120
+
+end;