From 136f2ea1175876abb8faa84bf8c503764dcad769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Terr=C3=B3n?= Date: Sat, 20 Feb 2016 15:11:20 +0000 Subject: [PATCH] Use itertools.product() instead of nested for-loops This is arguably more readable, and introduces students to the always amazing itertools module. --- 04_TransportProblem.ipynb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/04_TransportProblem.ipynb b/04_TransportProblem.ipynb index 6650e2d..ae1eef0 100644 --- a/04_TransportProblem.ipynb +++ b/04_TransportProblem.ipynb @@ -303,8 +303,11 @@ "# cost .. z =e= sum((i,j), c(i,j)*x(i,j)) ;\n", "# Model transport /all/ ;\n", "# Solve transport using lp minimizing z ;\n", + "#\n", + "# itertools.product() returns the Cartesian product of two or more iterables\n\n", + "import itertools\n", "def objective_rule(model):\n", - " return sum(model.c[i,j]*model.x[i,j] for i in model.i for j in model.j)\n", + " return sum(model.c[i,j]*model.x[i,j] for i, j in itertools.product(model.i, model.j))\n", "\n", "model.objective = Objective(rule=objective_rule, sense=minimize, doc='Define objective function')" ]