Zunächst möchte ich sagen, dass ich für Python & Pyomo sehr neu bin.

Ich habe ein Programm erstellt, das bei Verwendung des "glpk" -Lösers einwandfrei funktioniert, und ich kann die erwarteten Ergebnisse erzielen. Daher bin ich zuversichtlich, dass das Programm funktioniert. Es folgt der Code.

import pandas as pd
from pyomo.environ import *
import numpy as np


rawfile = "C:/Users/User/Downloads/chickenwings2.csv"

df_raw = pd.read_csv(rawfile, index_col='Name')
print (df_raw)

Set = df_raw.index.tolist()
count = dict(zip(df_raw.index,df_raw['count']))
price = dict(zip(df_raw.index,df_raw['price']))

#print (count,price)

model = ConcreteModel()
model.x = Var(Set, within=NonNegativeIntegers)

model.obj = Objective(expr= sum(price[i]*model.x[i] for i in Set), sense=minimize)

model.count_con = Constraint(expr=sum(count[i]*model.x[i] for i in Set) == 200)

opt = SolverFactory("glpk") 
opt_success = opt.solve(model)

total_count = sum(count[i]*value(model.x[i]) for i in Set)
print('Total Count:', total_count)
print('Total Price:', value(model.obj))

print('%5s %5s %12s' % ('Set','Count', 'Order Count'))
print('=========================')

for i in Set:
    if value(model.x[i]>0):
        print ('%5s %5s %5s' % (i,count[i], value(model.x[i])))

print('=========================')

Wenn ich jedoch versucht habe, den Gurobi-Solver durch Ändern des Codes wie unten gezeigt zu verwenden, kann ich keine Ergebnisse erzielen.

opt = SolverFactory("gurobi", solver_io="python") 

Oder

opt = SolverFactory("gurobi")

Der Fehler:

Traceback (most recent call last):
  File "D:/Python learning/ProjektX/chicken wings.py", line 26, in <module>
    opt_success = opt.solve(model)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_solver.py", line 68, in solve
    self.available(exception_flag=True)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_or_persistent_solver.py", line 301, in available
    "plugin").format(type(self)))
pyutilib.common._exceptions.ApplicationError: No Python bindings available for <class 'pyomo.solvers.plugins.solvers.gurobi_direct.GurobiDirect'> solver plugin

Oder

WARNING: Could not locate the 'gurobi' executable, which is required for
    solver gurobi

Für die Installation von Gurobi habe ich das Installationsverfahren für Gurobi mit Anaconda befolgt

conda config --add channels http://conda.anaconda.org/gurobi
conda install gurobi

Ich habe eine Umgebungsvariable unter dem Namen GRB_LICENSE_FILE erstellt und den Variablenwert an den Speicherort der .lic-Datei geleitet.

Ich habe alle Optionen, die ich im Internet finden kann, ausgeschöpft, daher bitte ich die Pyomo-Community hier um Hilfe, um mich über dieses Problem aufzuklären.

1
Dlearn 19 Jän. 2019 im 18:35

3 Antworten

Beste Antwort

In Bezug darauf, dass Sie versuchen, die Python-Oberfläche für Gurobi mit dieser Zeile zu verwenden:

opt = SolverFactory("gurobi", solver_io="python")

Sie könnten die bekommen

Traceback (most recent call last):
  File "D:/Python learning/ProjektX/chicken wings.py", line 26, in <module>
    opt_success = opt.solve(model)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_solver.py", line 68, in solve
    self.available(exception_flag=True)
  File "D:\EngineeringSoftware\Anaconda\lib\site-packages\pyomo\solvers\plugins\solvers\direct_or_persistent_solver.py", line 301, in available
    "plugin").format(type(self)))
pyutilib.common._exceptions.ApplicationError: No Python bindings available for <class 'pyomo.solvers.plugins.solvers.gurobi_direct.GurobiDirect'> solver plugin

Error. Ein Grund, der zu dieser Art von Fehler führen kann, ist, dass die Python-Bindung Ihres Gurobi installiert werden muss. Diese Bindung wird mit Ihrer Gurobi-Installation geliefert, ist jedoch nicht standardmäßig installiert. Vorausgesetzt, Sie haben bereits eine gültige Gurobi-Lizenz, empfehle ich Ihnen einen Besuch

http://www.gurobi.com/documentation/8.1/quickstart_mac/the_gurobi_python_interfac.html

Um die Support-Seite zusammenzufassen:

  1. Öffnen Sie eine Eingabeaufforderung mit Administratorrechten.
  2. Navigieren Sie zu dem Ordner, in dem sich Ihre Gurobi-Installation befindet.
  3. Geben Sie python setup.py install ein, um die Installation der Python-Bindung auszuführen.

Sie können überprüfen, ob es installiert ist, indem Sie die Zeile import gurobipy in Ihre Python-Konsole eingeben.

1
V. Brunelle 22 Jän. 2019 im 00:04

Klingt so, als müssten Sie den Ordner mit der ausführbaren Gurobi-Datei zu Ihren Windows- und Anaconda-Pfaden hinzufügen.

In diesem Stackoverflow-Beitrag finden Sie eine schrittweise Anleitung dazu: Hinzufügen eines Ordners zur Umgebungsvariablen" Path "in Windows 10 (mit Screenshots)

In diesem Beitrag finden Sie Informationen zum Hinzufügen eines Ordners zu Ihrem Conda-Pfad: Wie füge ich einen Ordner zum Suchpfad für eine bestimmte Anaconda-Umgebung hinzu?

2
Bethany Nicholson 21 Jän. 2019 im 14:59

Vielen Dank an Bethany.N und V.Brunelle für das Feedback. Bin dankbar.

Ich habe versucht, den Ordner zu Windows und zum Anaconda-Pfad hinzuzufügen (Fehlercode ist noch vorhanden), und ich habe versucht, gurobipy zu installieren (keine setup.py-Datei im Gurobi-Paket).

Ich habe jedoch Pycharm verwendet, um den Code auszuführen, aber basierend auf dem Benutzerhandbuch: "http://www.gurobi.com/documentation/8.1 /quickstart_mac/installing_the_anaconda_py.html#section:Anaconda "

Es wird ausdrücklich erwähnt, dass Spyder IDE oder Jupyter verwendet wird, sodass ich den Code in Spyder importiert habe, damit der Code funktioniert. Es funktioniert sogar mit ["gurobi"] oder ["gurobi", solver_io = "python"] für den Solver.

Es sieht so aus, als gäbe es einige Probleme mit Pycharm + Gurobi.

0
Dlearn 22 Jän. 2019 im 08:25