diff --git a/optimierung_pymoo.ipynb b/optimierung_pymoo.ipynb index e557db86d5dab0641b91eaa377619fbf5dcf3ffe..038e8f959fdc6c1f88168e054de35b324df18506 100644 --- a/optimierung_pymoo.ipynb +++ b/optimierung_pymoo.ipynb @@ -214,19 +214,18 @@ "Spalten = kanten\n", "Summe pro knoten = 0\n", "\n", - "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$" + "Q pump muss größer gleich sein als alle nachfolgenden durchflüsse" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "['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" ] } @@ -260,12 +259,10 @@ " ),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", - " 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", + " pump=np.dot(np.array([modell.Q[pump]**2,modell.n[pump]*modell.Q[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[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", "\n", "#Constaints\n", "def continuityRule(modell,node):\n", @@ -275,20 +272,21 @@ " 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", + " \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", + " '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", - "\n", + "#instance=modell.create_instance(graph,LR_H)\n", "#instance.obj = pyo.Objective(expr=sum(PumpPower(modell.Q[i],modell.n[i],LR_P) for i in modell.pumps),sense=min)\n" ] }, @@ -305,55 +303,15 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 13, "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "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": "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;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'" - ] - } - ], + "outputs": [], "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", "instance = modell.create_instance(TestData)\n", - "print(instance)\n", - "instance.continuity_check=pyo.Constraint(instance.nodes,rule=continuityRule)\n", - "\n", + "instance.Continuity_constaint=pyo.Constraint(instance.nodes, rule=continuityRule)\n", "#result=opt.solve(instance, tee=True)\n" ] }