为什么在使用CPLEX的Pyomo中出现不允许的字符错误?

时间:2019-01-08 16:15:28

标签: python cplex pyomo

我正在尝试通过一个简单的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文件将收到相同的错误。

我在其他任何地方都没有看到此错误。谁能帮我吗?

谢谢。

2 个答案:

答案 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'