Я пытаюсь использовать CPLEX с простым примером Pyomo:
from pyomo.environ import *
model = ConcreteModel()
model.x = Var( initialize=-1.2, bounds=(-2, 2) )
model.y = Var( initialize= 1.0, bounds=(-2, 2) )
model.obj = Objective(
expr= (1-model.x)**2 + 100*(model.y-model.x**2),
sense= minimize )
opt = SolverFactory('cplex')
results = opt.solve(model)
print(results)
Когда я запускаю этот код, я получаю следующую ошибку:
ValueError: в пути / имени файла журнала CPLEX обнаружен недопустимый символ (:).
По причинам переносимости разрешены только [a-zA-Z0-9.-_].
Единственное двоеточие (:) в имени пути после буквы диска:
имя файла: C: \ Users \ USERNA ~ 1 \ AppData \ Local \ Temp \ tmpl8_ty0y5.cplex.log
Ошибка возникает в CPLEX.py из следующего:
def _validate_file_name(cplex, filename, description):
"""Validate filenames against the set of allowable characters in CPLEX.
Returns the filename, possibly enclosed in double-quotes, or raises
a ValueError is unallowable characters are found.
"""
if filename is None:
return filename
matches = _validate_file_name.illegal_characters.search(filename)
if matches:
raise ValueError(
"Unallowed character (%s) found in CPLEX %s file path/name.\n\t"
"For portability reasons, only [%s] are allowed. Filename: %s"
% (matches.group(), description,
_validate_file_name.allowed_characters.replace("\\",''),filename))
# CPLEX only supports quoting spaces starting in v12.8.
if ' ' in filename:
if cplex.version()[:2] >= (12,8):
filename = '"'+filename+'"'
else:
raise ValueError(
"Space detected in CPLEX %s file path/name\n\t%s\nand "
"CPLEX older than version 12.8. Please either upgrade "
"CPLEX or remove the space from the %s path."
% (description, filename, description))
return filename
_validate_file_name.allowed_characters = r"a-zA-Z0-9 \.\-_\%s" % (os.path.sep,)
_validate_file_name.illegal_characters = re.compile(
'[^%s]' % (_validate_file_name.allowed_characters,))
Если я закомментирую проверку файла журнала, я получу ту же ошибку для решения и файлов LP.
Я не видел этой ошибки нигде. Кто-нибудь может мне помочь?
Спасибо.