【问题标题】:GurobiError: Name too long (maximum name length is 255 characters)GurobiError:名称太长(名称长度上限为 255 个字符)
【发布时间】:2021-11-26 08:25:30
【问题描述】:

我定义了一个参数t[i,s]如下:

for i in Trucks:
    for s in Slots:
        t[i,s]=m.addVar(vtype=GRB.CONTINUOUS, name="t[%s,%s]"%(i,s))

我从 excel 文件中调用 t[i,s] 的值。 I 是一个列表,其中包含一个从 0 到 263 的数字,s 也是一个从 1 到 24 的列表。当我运行代码时出现问题,出现以下错误:

GurobiError: Name too long (maximum name length is 255 characters)

我该如何解决这个问题?

【问题讨论】:

    标签: python optimization gurobi


    【解决方案1】:

    如果TrucksSlots 中的项目只是字符串,您可以像这样限制传递给变量名的长度:

    maxlen = 250
    for i in Trucks:
      for s in Slots:
        t[i,s] = m.addVar(vtype=GRB.CONTINUOUS, name="t[%s,%s]"%(i[:maxlen],s[:maxlen]))
    

    Python 中的字符串可以像任何其他数组一样被处理并支持切片。

    【讨论】:

    • i 是一个包含从 0 到 263 的数字的列表,s 也是一个从 1 到 24 的列表。
    • 这似乎不对,也不应该引发上述错误。如果is 是列表,应该代表什么变量?
    • 我的意思是“卡车”集合中的项目包含从 0 到 263 的数字列表。我属于卡车集合。
    • 请分享一个例子。你试过我的建议了吗?如果想要的名称太长,您需要找到某种形式的签名或缩写。
    • 我解决了这个问题。感谢你的回复。错误是输入错误。
    【解决方案2】:

    不幸的是,没有很好的方法来处理这个问题,或者根本存在限制。 gurobipy 变量构造函数在使用元组列表定义变量存在的集合/索引时工作得很好。

    但是变量名,即字符串,成为元组列表的一个函数,有 255 个字符的限制,而且似乎没有什么好的方法来控制它(除非你开始操作你的元组,在这种情况下你可能会丢失您想要保留的信息)。

    1. 为什么如果需要,您无法调整 255 个字符的限制?如果有,我没找到
    2. 鉴于存在限制,为什么 gurobipy 不将名称截断为 255 个字符?据我所知,除了变量在打印到模型文件时出现的方式(例如 .lp 格式)之外,这不会真正影响任何东西。

    令人沮丧的是,答案只是“不幸的是它以这种方式工作”。它可能会导致模型失败,而实际上没有充分的理由导致它失败

    【讨论】:

      猜你喜欢
      • 2015-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-14
      • 1970-01-01
      • 2019-02-21
      • 2012-09-21
      • 1970-01-01
      相关资源
      最近更新 更多