#python #optimization #gurobi
#python #оптимизация #gurobi
Вопрос:
Я определяю параметр 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))
Я вызываю значения t[i,s]
из файла Excel. I — это список, содержащий числа от 0 до 263, также s — это список от 1 до 24. Проблема возникает, когда я запускаю код, возникает следующая ошибка:
GurobiError: Name too long (maximum name length is 255 characters)
Как я могу это исправить?
Ответ №1:
В случае, если элементы в Trucks
и Slots
являются просто строками, вы можете ограничить длину, передаваемую имени переменной, следующим образом:
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 можно обрабатывать так же, как любой другой массив, и поддерживают нарезку.
Комментарии:
1. i — это список, содержащий числа от 0 до 263, также s — это список от 1 до 24.
2. Это кажется неправильным и также не должно вызывать вышеуказанную ошибку. Если
i
иs
являются списками, какие переменные должны представлять?3. Я имею в виду, что элементы в наборе «Грузовики» содержат список чисел от 0 до 263. i принадлежит набору грузовиков.
4. Просто поделитесь примером, пожалуйста. Вы попробовали мое предложение? Вам нужно найти какую-либо форму подписи или сокращения, если желаемое имя слишком длинное.
5. Я решил проблему. Спасибо за ваш ответ. Ошибка заключалась в ошибке ввода.
Ответ №2:
к сожалению, нет отличного способа справиться с этим или что ограничение вообще существует. Конструкторы переменных gurobipy хорошо работают при использовании списков последовательностей для определения наборов / индексов, над которыми существует переменная.
Но тогда имена переменных, которые являются строками, становятся функцией списка кортежей, имеют ограничение в 255 символов, и, похоже, нет никакого хорошего способа управлять этим (если вы не начнете манипулировать своими кортежами, и в этом случае вы можете потерять информацию, которую хотели сохранить).
- почему вы не можете настроить ограничение в 255 символов, если это необходимо? Если есть, я его не нашел
- учитывая, что существует ограничение, почему бы gurobipy просто не сократить имя до 255 символов? насколько я могу судить, это на самом деле не повлияет ни на что, кроме того, как переменная отображается при печати в файле модели (например, в формате .lp).
разочаровывает, что ответ просто «к сожалению, это работает таким образом». это может привести к сбою модели, хотя на самом деле нет никаких серьезных причин для ее сбоя