summaryrefslogtreecommitdiff
path: root/glpk-5.0/examples/magic.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/magic.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/magic.mod')
-rw-r--r--glpk-5.0/examples/magic.mod54
1 files changed, 54 insertions, 0 deletions
diff --git a/glpk-5.0/examples/magic.mod b/glpk-5.0/examples/magic.mod
new file mode 100644
index 0000000..d1e64d0
--- /dev/null
+++ b/glpk-5.0/examples/magic.mod
@@ -0,0 +1,54 @@
+/* MAGIC, Magic Square */
+
+/* Written in GNU MathProg by Andrew Makhorin <mao@gnu.org> */
+
+/* In recreational mathematics, a magic square of order n is an
+ arrangement of n^2 numbers, usually distinct integers, in a square,
+ such that n numbers in all rows, all columns, and both diagonals sum
+ to the same constant. A normal magic square contains the integers
+ from 1 to n^2.
+
+ (From Wikipedia, the free encyclopedia.) */
+
+param n, integer, > 0, default 4;
+/* square order */
+
+set N := 1..n^2;
+/* integers to be placed */
+
+var x{i in 1..n, j in 1..n, k in N}, binary;
+/* x[i,j,k] = 1 means that cell (i,j) contains integer k */
+
+s.t. a{i in 1..n, j in 1..n}: sum{k in N} x[i,j,k] = 1;
+/* each cell must be assigned exactly one integer */
+
+s.t. b{k in N}: sum{i in 1..n, j in 1..n} x[i,j,k] = 1;
+/* each integer must be assigned exactly to one cell */
+
+var s;
+/* the magic sum */
+
+s.t. r{i in 1..n}: sum{j in 1..n, k in N} k * x[i,j,k] = s;
+/* the sum in each row must be the magic sum */
+
+s.t. c{j in 1..n}: sum{i in 1..n, k in N} k * x[i,j,k] = s;
+/* the sum in each column must be the magic sum */
+
+s.t. d: sum{i in 1..n, k in N} k * x[i,i,k] = s;
+/* the sum in the diagonal must be the magic sum */
+
+s.t. e: sum{i in 1..n, k in N} k * x[i,n-i+1,k] = s;
+/* the sum in the co-diagonal must be the magic sum */
+
+solve;
+
+printf "\n";
+printf "Magic sum is %d\n", s;
+printf "\n";
+for{i in 1..n}
+{ printf{j in 1..n} "%3d", sum{k in N} k * x[i,j,k];
+ printf "\n";
+}
+printf "\n";
+
+end;