diff --git a/optimierung_pymoo.ipynb b/optimierung_pymoo.ipynb
index 75a729ced42fbac37c34c9b93e67f999ee1a3b7c..e557db86d5dab0641b91eaa377619fbf5dcf3ffe 100644
--- a/optimierung_pymoo.ipynb
+++ b/optimierung_pymoo.ipynb
@@ -50,9 +50,28 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 1,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Defaulting to user installation because normal site-packages is not writeable\n",
+      "Requirement already satisfied: pyomo in c:\\users\\steinmann\\appdata\\roaming\\python\\python312\\site-packages (6.8.2)\n",
+      "Requirement already satisfied: ply in c:\\users\\steinmann\\appdata\\roaming\\python\\python312\\site-packages (from pyomo) (3.11)\n"
+     ]
+    },
+    {
+     "name": "stderr",
+     "output_type": "stream",
+     "text": [
+      "\n",
+      "[notice] A new release of pip is available: 24.2 -> 25.0\n",
+      "[notice] To update, run: C:\\Program Files\\Python312\\python.exe -m pip install --upgrade pip\n"
+     ]
+    }
+   ],
    "source": [
     "!pip install pyomo"
    ]
@@ -195,19 +214,20 @@
     "Spalten = kanten\n",
     "Summe pro knoten = 0\n",
     "\n",
-    "Q pump muss größer gleich sein als alle nachfolgenden durchflüsse"
+    "Q pump löst sich auf wenn die nachfolgenden Durchflüsse klar sind mit $-l \\sum_{i \\in \\mathrm{S}} Q^2_i = \\alpha_1 Q^2 + \\alpha_2 Q n + \\alpha_3 n^2$"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 38,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "{None: {'Q_valve': {'valveA': 4.0, 'valveB': 4.0, 'valveC': 4.0}, 'nodes': ['source', 'pump1', 'pump2', 'valveA', 'valveB', 'valveC'], 'pumps': ['pump1', 'pump2'], 'valves': ['valveA', 'valveB', 'valveC']}}\n"
+      "['valveA', 'valveB', 'valveC']\n",
+      "{None: {'nodes': ['source', 'pump1', 'pump2', 'valveA', 'valveB', 'valveC'], 'pumps': ['pump1', 'pump2'], 'valves': ['valveA', 'valveB', 'valveC'], 'Q_valve': {'valveA': 4.0, 'valveB': 4.0, 'valveC': 4.0}}}\n"
      ]
     }
    ],
@@ -230,44 +250,46 @@
     "\n",
     "#Optimierungsvariable\n",
     "modell.n = pyo.Var(modell.pumps,bounds=(750/3600,1))\n",
-    "modell.Q_pump = pyo.Var(modell.pumps)\n",
+    "modell.Q = pyo.Var(modell.nodes)\n",
     "\n",
     "#Objective\n",
     "def PumpPower(modell):\n",
     "    return sum(np.dot(\n",
     "        np.array(\n",
-    "            [modell.Q_pump[i]**3,(modell.Q_pump[i]**2)*modell.n[i],modell.Q_pump[i]*modell.n[i]**2,modell.n[i]**3]\n",
+    "            [modell.Q[i]**3,(modell.Q[i]**2)*modell.n[i],modell.Q[i]*modell.n[i]**2,modell.n[i]**3]\n",
     "            ),LR_P.coef_\n",
     "            ) for i in modell.pumps)\n",
     "modell.Power_Objective = pyo.Objective(rule=PumpPower,sense=pyo.minimize)\n",
+    "\n",
     "def PumpFlow(modell,pump):\n",
-    "    pump=np.dot(np.array([modell.Q_pump[pump]**2,modell.n[pump]*modell.Q_pump[pump],modell.n[pump]**2]),LR_H.coef_)\n",
-    "    return pump>=sum(modell.Q_valve[node] for node in graph.successors(pump) if node in modell.valves)+sum(modell.Q_pump[n] for n in graph.successors(node) if node in modell.pumps)\n",
-    "modell.Flow_Objective = pyo.Objective(rule=PumpFlow,sense=pyo.as_boolean)\n",
+    "    return np.dot(np.array([modell.Q[pump]**2,modell.n[pump]*modell.Q[pump],modell.n[pump]**2]),LR_H.coef_) \n",
+    "def Flow_Equation(modell,p):\n",
+    "    return PumpFlow(modell=modell,pump=p) - pyo.summation(modell.Q,index=graph.successors(node))\n",
+    "modell.Flow_Objective = pyo.Objective(modell.pumps,rule=Flow_Equation,sense=pyo.minimize)\n",
     "\n",
     "#Constaints\n",
     "def continuityRule(modell,node):\n",
-    "    return sum(modell.Q_pump[i] for i in graph.predecessors(node))==sum(modell.Q_pump[j] for j in graph.successors(node))\n",
+    "    return sum(modell.Q[i] for i in graph.predecessors(node))==sum(modell.Q[j] for j in graph.successors(node))\n",
     "#alternative\n",
     "def continuityRule2(modell,node):\n",
     "    return 0.==sum(graph[node][i][0]['weight'] for i in graph[node])\n",
     "#continuity adjustment for change in hight needed\n",
     "#construction of test Data dictionairy missing\n",
+    "print([key for key in graph.nodes.keys() if 'valve' in key])\n",
     "TestData={\n",
     "    None:{\n",
-    "        'Q_valve':{'valveA':4.,'valveB':4.,'valveC':4.},\n",
     "        'nodes':[key for key in graph.nodes.keys()],\n",
     "        'pumps':[key for key in graph.nodes.keys() if 'pump' in key],\n",
     "        'valves':[key for key in graph.nodes.keys() if 'valve' in key],\n",
+    "        'Q_valve':{'valveA':4.,'valveB':4.,'valveC':4.}\n",
     "    }\n",
     "}\n",
     "print(TestData)\n",
-    "#data=DataPortal(data_dict=TestData)\n",
     "\n",
     "#Optimierungsgleichung\n",
     "#modell.pump_constraint = pyo.Constraint(expr=sum(modell.nodes[k] for k in modell.nodes)==0,rule=continuityRule)\n",
-    "#instance=modell.create_instance(graph,LR_H)\n",
-    "#instance.obj = pyo.Objective(expr=sum(PumpPower(modell.Q_pump[i],modell.n[i],LR_P) for i in modell.pumps),sense=min)\n"
+    "\n",
+    "#instance.obj = pyo.Objective(expr=sum(PumpPower(modell.Q[i],modell.n[i],LR_P) for i in modell.pumps),sense=min)\n"
    ]
   },
   {
@@ -283,49 +305,56 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 46,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "ERROR: Rule failed when generating expression for Objective Flow_Objective\n",
-      "with index None: KeyError: \"Index 'None' is not valid for indexed component\n",
-      "'Q_pump'\"\n",
-      "ERROR: Constructing component 'Flow_Objective' from data=None failed:\n",
-      "        KeyError: \"Index 'None' is not valid for indexed component 'Q_pump'\"\n"
+      "unknown\n",
+      "invalid parameter <C:\\Users\\STEINM~1\\AppData\\Local\\Temp\\tmp1r989oiw.pyomo.nl>\n",
+      "invalid parameter <-AMPL>\n",
+      "\n",
+      "syntax: C:\\Program Files\\SCIPOptSuite 7.0.2\\bin\\scip.exe [-l <logfile>] [-q] [-s <settings>] [-r <randseed>] [-f <problem>] [-b <batchfile>] [-c \"command\"]\n",
+      "  -v, --version : print version and build options\n",
+      "  -l <logfile>  : copy output into log file\n",
+      "  -q            : suppress screen messages\n",
+      "  -s <settings> : load parameter settings (.set) file\n",
+      "  -f <problem>  : load and solve problem file\n",
+      "  -o <primref> <dualref> : pass primal and dual objective reference values for validation at the end of the solve\n",
+      "  -b <batchfile>: load and execute dialog command batch file (can be used multiple times)\n",
+      "  -r <randseed> : nonnegative integer to be used as random seed. Has priority over random seed specified through parameter settings (.set) file\n",
+      "  -c \"command\"  : execute single line of dialog commands (can be used multiple times)\n",
+      "\n"
      ]
     },
     {
-     "ename": "KeyError",
-     "evalue": "\"Index 'None' is not valid for indexed component 'Q_pump'\"",
+     "ename": "FileNotFoundError",
+     "evalue": "[Errno 2] No such file or directory: 'C:\\\\Users\\\\STEINM~1\\\\AppData\\\\Local\\\\Temp\\\\tmp1r989oiw.pyomo.sol'",
      "output_type": "error",
      "traceback": [
       "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
-      "\u001b[1;31mKeyError\u001b[0m                                  Traceback (most recent call last)",
-      "Cell \u001b[1;32mIn[19], line 4\u001b[0m\n\u001b[0;32m      1\u001b[0m \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01mpyomo\u001b[39;00m\u001b[38;5;21;01m.\u001b[39;00m\u001b[38;5;21;01mopt\u001b[39;00m \u001b[38;5;28;01mimport\u001b[39;00m SolverFactory\n\u001b[0;32m      3\u001b[0m opt \u001b[38;5;241m=\u001b[39m pyo\u001b[38;5;241m.\u001b[39mSolverFactory(\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mscipampl\u001b[39m\u001b[38;5;124m'\u001b[39m, executable\u001b[38;5;241m=\u001b[39m\u001b[38;5;124mr\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mC:\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mProgram Files\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mSCIPOptSuite 9.2.0\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mbin\u001b[39m\u001b[38;5;124m\\\u001b[39m\u001b[38;5;124mscip.exe\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m----> 4\u001b[0m instance \u001b[38;5;241m=\u001b[39m \u001b[43mmodell\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_instance\u001b[49m\u001b[43m(\u001b[49m\u001b[43mTestData\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m      6\u001b[0m result\u001b[38;5;241m=\u001b[39mopt\u001b[38;5;241m.\u001b[39msolve(instance, tee\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m)\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\PyomoModel.py:734\u001b[0m, in \u001b[0;36mModel.create_instance\u001b[1;34m(self, filename, data, name, namespace, namespaces, profile_memory, report_timing, **kwds)\u001b[0m\n\u001b[0;32m    731\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;129;01min\u001b[39;00m _namespaces:\n\u001b[0;32m    732\u001b[0m     _namespaces\u001b[38;5;241m.\u001b[39mappend(\u001b[38;5;28;01mNone\u001b[39;00m)\n\u001b[1;32m--> 734\u001b[0m \u001b[43minstance\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mload\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnamespaces\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43m_namespaces\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprofile_memory\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprofile_memory\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    736\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[0;32m    737\u001b[0m \u001b[38;5;66;03m# Indicate that the model is concrete/constructed\u001b[39;00m\n\u001b[0;32m    738\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[0;32m    739\u001b[0m instance\u001b[38;5;241m.\u001b[39m_constructed \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\PyomoModel.py:771\u001b[0m, in \u001b[0;36mModel.load\u001b[1;34m(self, arg, namespaces, profile_memory)\u001b[0m\n\u001b[0;32m    769\u001b[0m     msg \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot load model model data from with object of type \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    770\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(msg \u001b[38;5;241m%\u001b[39m \u001b[38;5;28mstr\u001b[39m(\u001b[38;5;28mtype\u001b[39m(arg)))\n\u001b[1;32m--> 771\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_load_model_data\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdp\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnamespaces\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprofile_memory\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprofile_memory\u001b[49m\u001b[43m)\u001b[49m\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\PyomoModel.py:823\u001b[0m, in \u001b[0;36mModel._load_model_data\u001b[1;34m(self, modeldata, namespaces, **kwds)\u001b[0m\n\u001b[0;32m    820\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m component\u001b[38;5;241m.\u001b[39mctype \u001b[38;5;129;01mis\u001b[39;00m Model:\n\u001b[0;32m    821\u001b[0m         \u001b[38;5;28;01mcontinue\u001b[39;00m\n\u001b[1;32m--> 823\u001b[0m     \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_initialize_component\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    824\u001b[0m \u001b[43m        \u001b[49m\u001b[43mmodeldata\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mnamespaces\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcomponent_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mprofile_memory\u001b[49m\n\u001b[0;32m    825\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    827\u001b[0m \u001b[38;5;66;03m# Note: As is, connectors are expanded when using command-line pyomo but not calling model.create(...) in a Python script.\u001b[39;00m\n\u001b[0;32m    828\u001b[0m \u001b[38;5;66;03m# John says this has to do with extension points which are called from commandline but not when writing scripts.\u001b[39;00m\n\u001b[0;32m    829\u001b[0m \u001b[38;5;66;03m# Uncommenting the next two lines switches this (command-line fails because it tries to expand connectors twice)\u001b[39;00m\n\u001b[0;32m    830\u001b[0m \u001b[38;5;66;03m# connector_expander = ConnectorExpander()\u001b[39;00m\n\u001b[0;32m    831\u001b[0m \u001b[38;5;66;03m# connector_expander.apply(instance=self)\u001b[39;00m\n\u001b[0;32m    833\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m profile_memory \u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m \u001b[38;5;241m2\u001b[39m \u001b[38;5;129;01mand\u001b[39;00m pympler_available:\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\PyomoModel.py:871\u001b[0m, in \u001b[0;36mModel._initialize_component\u001b[1;34m(self, modeldata, namespaces, component_name, profile_memory)\u001b[0m\n\u001b[0;32m    863\u001b[0m     logger\u001b[38;5;241m.\u001b[39mdebug(\n\u001b[0;32m    864\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mConstructing \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m on \u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m from data=\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m\"\u001b[39m,\n\u001b[0;32m    865\u001b[0m         declaration\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__name__\u001b[39m,\n\u001b[1;32m   (...)\u001b[0m\n\u001b[0;32m    868\u001b[0m         \u001b[38;5;28mstr\u001b[39m(data),\n\u001b[0;32m    869\u001b[0m     )\n\u001b[0;32m    870\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 871\u001b[0m     \u001b[43mdeclaration\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mconstruct\u001b[49m\u001b[43m(\u001b[49m\u001b[43mdata\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    872\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m:\n\u001b[0;32m    873\u001b[0m     err \u001b[38;5;241m=\u001b[39m sys\u001b[38;5;241m.\u001b[39mexc_info()[\u001b[38;5;241m1\u001b[39m]\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\objective.py:335\u001b[0m, in \u001b[0;36mObjective.construct\u001b[1;34m(self, data)\u001b[0m\n\u001b[0;32m    333\u001b[0m \u001b[38;5;66;03m# Bypass the index validation and create the member directly\u001b[39;00m\n\u001b[0;32m    334\u001b[0m \u001b[38;5;28;01mfor\u001b[39;00m index \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mindex_set():\n\u001b[1;32m--> 335\u001b[0m     ans \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_setitem_when_not_present(index, \u001b[43mrule\u001b[49m\u001b[43m(\u001b[49m\u001b[43mblock\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mindex\u001b[49m\u001b[43m)\u001b[49m)\n\u001b[0;32m    336\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m ans \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[0;32m    337\u001b[0m         ans\u001b[38;5;241m.\u001b[39mset_sense(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_init_sense(block, index))\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\initializer.py:349\u001b[0m, in \u001b[0;36mIndexedCallInitializer.__call__\u001b[1;34m(self, parent, idx)\u001b[0m\n\u001b[0;32m    347\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fcn(parent, \u001b[38;5;241m*\u001b[39midx)\n\u001b[0;32m    348\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 349\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_fcn\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparent\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43midx\u001b[49m\u001b[43m)\u001b[49m\n",
-      "Cell \u001b[1;32mIn[18], line 30\u001b[0m, in \u001b[0;36mPumpFlow\u001b[1;34m(modell, pump)\u001b[0m\n\u001b[0;32m     29\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21mPumpFlow\u001b[39m(modell,pump):\n\u001b[1;32m---> 30\u001b[0m     pump\u001b[38;5;241m=\u001b[39mnp\u001b[38;5;241m.\u001b[39mdot(np\u001b[38;5;241m.\u001b[39marray([\u001b[43mmodell\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mQ_pump\u001b[49m\u001b[43m[\u001b[49m\u001b[43mpump\u001b[49m\u001b[43m]\u001b[49m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m,modell\u001b[38;5;241m.\u001b[39mn[pump]\u001b[38;5;241m*\u001b[39mmodell\u001b[38;5;241m.\u001b[39mQ_pump[pump],modell\u001b[38;5;241m.\u001b[39mn[pump]\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m]),LR_H\u001b[38;5;241m.\u001b[39mcoef_)\n\u001b[0;32m     31\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m pump\u001b[38;5;241m>\u001b[39m\u001b[38;5;241m=\u001b[39m\u001b[38;5;28msum\u001b[39m(modell\u001b[38;5;241m.\u001b[39mQ_valve[node] \u001b[38;5;28;01mfor\u001b[39;00m node \u001b[38;5;129;01min\u001b[39;00m graph\u001b[38;5;241m.\u001b[39msuccessors(pump) \u001b[38;5;28;01mif\u001b[39;00m node \u001b[38;5;129;01min\u001b[39;00m modell\u001b[38;5;241m.\u001b[39mvalves)\u001b[38;5;241m+\u001b[39m\u001b[38;5;28msum\u001b[39m(modell\u001b[38;5;241m.\u001b[39mQ_pump[n] \u001b[38;5;28;01mfor\u001b[39;00m n \u001b[38;5;129;01min\u001b[39;00m graph\u001b[38;5;241m.\u001b[39msuccessors(node) \u001b[38;5;28;01mif\u001b[39;00m node \u001b[38;5;129;01min\u001b[39;00m modell\u001b[38;5;241m.\u001b[39mpumps)\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\var.py:999\u001b[0m, in \u001b[0;36mIndexedVar.__getitem__\u001b[1;34m(self, args)\u001b[0m\n\u001b[0;32m    997\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m \u001b[38;5;21m__getitem__\u001b[39m(\u001b[38;5;28mself\u001b[39m, args) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m VarData:\n\u001b[0;32m    998\u001b[0m     \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m--> 999\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[38;5;21;43m__getitem__\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43margs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m   1000\u001b[0m     \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mRuntimeError\u001b[39;00m:\n\u001b[0;32m   1001\u001b[0m         tmp \u001b[38;5;241m=\u001b[39m args \u001b[38;5;28;01mif\u001b[39;00m args\u001b[38;5;241m.\u001b[39m\u001b[38;5;18m__class__\u001b[39m \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28mtuple\u001b[39m \u001b[38;5;28;01melse\u001b[39;00m (args,)\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\indexed_component.py:648\u001b[0m, in \u001b[0;36mIndexedComponent.__getitem__\u001b[1;34m(self, index)\u001b[0m\n\u001b[0;32m    646\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28misinstance\u001b[39m(index, EXPR\u001b[38;5;241m.\u001b[39mGetItemExpression):\n\u001b[0;32m    647\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m index\n\u001b[1;32m--> 648\u001b[0m validated_index \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_validate_index\u001b[49m\u001b[43m(\u001b[49m\u001b[43mindex\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    649\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m validated_index \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m index:\n\u001b[0;32m    650\u001b[0m     index \u001b[38;5;241m=\u001b[39m validated_index\n",
-      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\core\\base\\indexed_component.py:870\u001b[0m, in \u001b[0;36mIndexedComponent._validate_index\u001b[1;34m(self, idx)\u001b[0m\n\u001b[0;32m    863\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\n\u001b[0;32m    864\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mCannot treat the scalar component \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    865\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mas an indexed component\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;241m%\u001b[39m (\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname,)\n\u001b[0;32m    866\u001b[0m     )\n\u001b[0;32m    867\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[0;32m    868\u001b[0m \u001b[38;5;66;03m# Raise an exception\u001b[39;00m\n\u001b[0;32m    869\u001b[0m \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[1;32m--> 870\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(\n\u001b[0;32m    871\u001b[0m     \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mIndex \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m is not valid for indexed component \u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;132;01m%s\u001b[39;00m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    872\u001b[0m     \u001b[38;5;241m%\u001b[39m (normalized_idx, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mname)\n\u001b[0;32m    873\u001b[0m )\n",
-      "\u001b[1;31mKeyError\u001b[0m: \"Index 'None' is not valid for indexed component 'Q_pump'\""
+      "\u001b[1;31mFileNotFoundError\u001b[0m                         Traceback (most recent call last)",
+      "Cell \u001b[1;32mIn[46], line 8\u001b[0m\n\u001b[0;32m      5\u001b[0m \u001b[38;5;28mprint\u001b[39m(instance)\n\u001b[0;32m      6\u001b[0m instance\u001b[38;5;241m.\u001b[39mcontinuity_check\u001b[38;5;241m=\u001b[39mpyo\u001b[38;5;241m.\u001b[39mConstraint(instance\u001b[38;5;241m.\u001b[39mnodes,rule\u001b[38;5;241m=\u001b[39mcontinuityRule)\n\u001b[1;32m----> 8\u001b[0m result\u001b[38;5;241m=\u001b[39m\u001b[43mopt\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43minstance\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mtee\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mTrue\u001b[39;49;00m\u001b[43m)\u001b[49m\n",
+      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\opt\\base\\solvers.py:636\u001b[0m, in \u001b[0;36mOptSolver.solve\u001b[1;34m(self, *args, **kwds)\u001b[0m\n\u001b[0;32m    630\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_report_timing:\n\u001b[0;32m    631\u001b[0m     \u001b[38;5;28mprint\u001b[39m(\n\u001b[0;32m    632\u001b[0m         \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m      \u001b[39m\u001b[38;5;132;01m%6.2f\u001b[39;00m\u001b[38;5;124m seconds required for solver\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m    633\u001b[0m         \u001b[38;5;241m%\u001b[39m (solve_completion_time \u001b[38;5;241m-\u001b[39m presolve_completion_time)\n\u001b[0;32m    634\u001b[0m     )\n\u001b[1;32m--> 636\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_postsolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    637\u001b[0m result\u001b[38;5;241m.\u001b[39m_smap_id \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_smap_id\n\u001b[0;32m    638\u001b[0m result\u001b[38;5;241m.\u001b[39m_smap \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n",
+      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\solvers\\plugins\\solvers\\SCIPAMPL.py:222\u001b[0m, in \u001b[0;36mSCIPAMPL._postsolve\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    216\u001b[0m version \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_known_versions[executable]\n\u001b[0;32m    218\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m version \u001b[38;5;241m<\u001b[39m (\u001b[38;5;241m8\u001b[39m, \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m0\u001b[39m, \u001b[38;5;241m0\u001b[39m):\n\u001b[0;32m    219\u001b[0m     \u001b[38;5;66;03m# it may be possible to get results from older version but this was\u001b[39;00m\n\u001b[0;32m    220\u001b[0m     \u001b[38;5;66;03m# not tested, so the old way of doing things is here preserved\u001b[39;00m\n\u001b[1;32m--> 222\u001b[0m     results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43msuper\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mSCIPAMPL\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m)\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_postsolve\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    224\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m    225\u001b[0m     \u001b[38;5;66;03m# repeat code from super(SCIPAMPL, self)._postsolve()\u001b[39;00m\n\u001b[0;32m    226\u001b[0m     \u001b[38;5;66;03m# in order to access the log file and get the results from there\u001b[39;00m\n\u001b[0;32m    228\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_log_file \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n",
+      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\opt\\solver\\shellcmd.py:290\u001b[0m, in \u001b[0;36mSystemCallSolver._postsolve\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m    287\u001b[0m results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[0;32m    289\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_results_format \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 290\u001b[0m     results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mprocess_output\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_rc\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    291\u001b[0m     \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[0;32m    292\u001b[0m     \u001b[38;5;66;03m# If keepfiles is true, then we pop the\u001b[39;00m\n\u001b[0;32m    293\u001b[0m     \u001b[38;5;66;03m# TempfileManager context while telling it to\u001b[39;00m\n\u001b[0;32m    294\u001b[0m     \u001b[38;5;66;03m# _not_ remove the files.\u001b[39;00m\n\u001b[0;32m    295\u001b[0m     \u001b[38;5;66;03m#\u001b[39;00m\n\u001b[0;32m    296\u001b[0m     \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_keepfiles:\n\u001b[0;32m    297\u001b[0m         \u001b[38;5;66;03m# in some cases, the solution filename is\u001b[39;00m\n\u001b[0;32m    298\u001b[0m         \u001b[38;5;66;03m# not generated via the temp-file mechanism,\u001b[39;00m\n\u001b[0;32m    299\u001b[0m         \u001b[38;5;66;03m# instead being automatically derived from\u001b[39;00m\n\u001b[0;32m    300\u001b[0m         \u001b[38;5;66;03m# the input lp/nl filename. so, we may have\u001b[39;00m\n\u001b[0;32m    301\u001b[0m         \u001b[38;5;66;03m# to clean it up manually.\u001b[39;00m\n",
+      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\opt\\solver\\shellcmd.py:395\u001b[0m, in \u001b[0;36mSystemCallSolver.process_output\u001b[1;34m(self, rc)\u001b[0m\n\u001b[0;32m    388\u001b[0m     results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_results_reader(\n\u001b[0;32m    389\u001b[0m         \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_results_file,\n\u001b[0;32m    390\u001b[0m         res\u001b[38;5;241m=\u001b[39mresults,\n\u001b[0;32m    391\u001b[0m         soln\u001b[38;5;241m=\u001b[39mresults\u001b[38;5;241m.\u001b[39msolution(\u001b[38;5;241m0\u001b[39m),\n\u001b[0;32m    392\u001b[0m         suffixes\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_suffixes,\n\u001b[0;32m    393\u001b[0m     )\n\u001b[0;32m    394\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m--> 395\u001b[0m     results \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_results_reader\u001b[49m\u001b[43m(\u001b[49m\n\u001b[0;32m    396\u001b[0m \u001b[43m        \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_results_file\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mres\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mresults\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msuffixes\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_suffixes\u001b[49m\n\u001b[0;32m    397\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m    398\u001b[0m results_reader_completion_time \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mtime()\n\u001b[0;32m    399\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_report_timing \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m:\n",
+      "File \u001b[1;32m~\\AppData\\Roaming\\Python\\Python312\\site-packages\\pyomo\\opt\\plugins\\sol.py:40\u001b[0m, in \u001b[0;36mResultsReader_sol.__call__\u001b[1;34m(self, filename, res, soln, suffixes)\u001b[0m\n\u001b[0;32m     36\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m     37\u001b[0m \u001b[38;5;124;03mParse a ``*.sol`` file\u001b[39;00m\n\u001b[0;32m     38\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m     39\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m---> 40\u001b[0m     \u001b[38;5;28;01mwith\u001b[39;00m \u001b[38;5;28;43mopen\u001b[39;49m\u001b[43m(\u001b[49m\u001b[43mfilename\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43mr\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m)\u001b[49m \u001b[38;5;28;01mas\u001b[39;00m f:\n\u001b[0;32m     41\u001b[0m         \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_load(f, res, soln, suffixes)\n\u001b[0;32m     42\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m e:\n",
+      "\u001b[1;31mFileNotFoundError\u001b[0m: [Errno 2] No such file or directory: 'C:\\\\Users\\\\STEINM~1\\\\AppData\\\\Local\\\\Temp\\\\tmp1r989oiw.pyomo.sol'"
      ]
     }
    ],
    "source": [
     "from pyomo.opt import SolverFactory\n",
     "\n",
-    "opt = pyo.SolverFactory('scipampl', executable=r'C:\\Program Files\\SCIPOptSuite 9.2.0\\bin\\scip.exe')\n",
+    "#opt = pyo.SolverFactory('scipampl', executable=r'C:\\Program Files\\SCIPOptSuite 9.2.0\\bin\\scip.exe')\n",
     "instance = modell.create_instance(TestData)\n",
+    "print(instance)\n",
+    "instance.continuity_check=pyo.Constraint(instance.nodes,rule=continuityRule)\n",
     "\n",
-    "result=opt.solve(instance, tee=True)\n"
+    "#result=opt.solve(instance, tee=True)\n"
    ]
   }
  ],