ОШИБКА: журнал решения: нераспознанный флаг или отсутствующий аргумент: -AMPL - PullRequest
0 голосов
/ 23 мая 2018

Я пытаюсь использовать gurobi 8.0 с pyomo 5.5.При решении простой модели в качестве теста я получаю следующую ошибку: ОШИБКА: Журнал решателя: нераспознанный флаг или отсутствующий аргумент: -AMPL

from pyomo.environ import *

model = ConcreteModel()

model.x = Var([1,2], domain=NonNegativeReals)

model.OBJ = Objective(expr = 2*model.x[1] + 3*model.x[2])

model.Constraint1 = Constraint(expr = 3*model.x[1] + 4*model.x[2] >= 1)

solver = SolverFactory("gurobi_cl")
results = solver.solve(model)  #error here
model.solutions.store_to(results)
print(results)

1 Ответ

0 голосов
/ 29 мая 2018

Pyomo SolverFactory работает, сначала посмотрев, есть ли у него пользовательский интерфейс решателя, зарегистрированный под именем, которое вы указываете на заводе.Если это так, он возвращает интерфейс решателя.Если это не так, то он проверяет, может ли он найти исполняемый файл в вашей переменной PATH, соответствующий этому имени, и, если это так, он предполагает, что исполняемый файл является решателем AMPL, и возвращает интерфейс ASL.Если оба из них терпят неудачу, он возвращает объект UnknownSolver.

В вашем конкретном случае вы попадаете во вторую ветку.К сожалению, gurobi_cl не является двоичным файлом ASL, что приводит к появившейся ошибке.

Существует несколько способов взаимодействия с Gurobi: через файлы LP, через файлы NL и напрямую через привязки Python (либо водноразовый или постоянный режим).Каждый из этих маршрутов использует разные исполняемые файлы.SolverFactory("gurobi") на самом деле является оберткой, которая возвращает один из этих специализированных решателей на основе флага solver_io.По умолчанию используется файловый интерфейс LP, который использует интерактивную оболочку gurobi.sh.

Если в вашей установке Gurobi нет gurobi.sh, вы можете использовать другие интерфейсы (для интерфейса NL требуетсяgurobi_ampl, и прямой интерфейс требует, чтобы привязки Python были установлены в вашей среде Python).Для вашей установки я бы начал с «прямого» интерфейса:

solver = SolverFactory("gurobi", solver_io="direct")
# (or `solver_io="python"` in older Pyomo releases)
...