我正在尝试通过一个简单的Pyomo示例使用CPLEX:
def parse_doritos(self, response):
image = DoritosItem()
image['title'] = response.xpath(["//img[@id='alt'/text()"]).extract() # extra square brackets in response.xpath arguments - list argument instead of str
rel = response.xpath('//product_thumbnail/@src').extract() # this function looks OK
image['image_urls'] = ['http:'+rel[0]]
return image
运行此代码时,出现以下错误:
ValueError:CPLEX日志文件路径/名称中发现不允许的字符(:)。 出于便携性原因,仅允许[a-zA-Z0-9 .-_]。
路径名中唯一的冒号(:)在驱动器号之后:
文件名:C:\ Users \ USERNA〜1 \ AppData \ Local \ Temp \ tmpl8_ty0y5.cplex.log
CPLEX.py中的错误是由以下原因引起的:
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)
如果我注释掉日志文件的验证,则解决方案和LP文件将收到相同的错误。
我在其他任何地方都没有看到此错误。谁能帮我吗?
谢谢。
答案 0 :(得分:2)
这是在Pyomo 5.6的CPLEX界面中引入的错误,并在Pyomo 5.6.1发行版中得到解决。
答案 1 :(得分:1)
最近,我遇到了同样的问题。 根据Qi Chen的评论,当“如果匹配...”部分被注释掉时,它会很好地工作。感谢@Qi chen。
在CPLEX.py中,注释掉以下行:
# if matches:
#raise ValueError(
# "Unallowed character (%s) found in CPLEX %s file path/name.\n\t"
# "For portability reasons, only [%s] are allowed."
# % (matches.group(), description,
# _validate_file_name.allowed_characters.replace("\\",'')))
# CPLEX only supports quoting spaces starting in v12.8.
我猜可能是由其中存在“:”的日志文件(xxx.CPLEX.log)引起的,如下所示: 'C:\ Program Files \ IBM \ ILOG \ CPLEX_Studio128 \ cplex \ bin \ x64_win64 \ CPLEX.exe' 要么 'C:\ Program Files \ IBM \ ILOG \ CPLEX_Studio128 \ cplex \ bin \ x64_win64 \ CPLEX.exe'