Многомерные строковые переменные в Julia JuMP - PullRequest
0 голосов
/ 10 апреля 2019

Я определяю многомерные переменные в JuMP, однако для простоты работы я требую, чтобы индексы были строками.Некоторые из индексов могут не отличаться.Как настроить многомерные переменные в JuMP с учетом повторяющихся элементов?

Я уже пытался определить переменные как переменные строк.Однако, как только число индексов или размерность переменной превысит 3, ошибка говорит о том, что индекс должен иметь тип :: Int64.

Set1 = Set{String}(["One", "Two", "Three"])
Set2 = Set{String}(["This", "That", "Where", "There"])
Set3 = Set{String}([1,2,3,4,5])
Set4 = Set{String}(["Where", "There"])

@variable(model, x[Set1, Set2, Set2, Set3, Set4] >= 0)

Это дает ошибку, что индекс не имеетtype :: Int64, поскольку индексы превышают размерность 3.

Это прекрасно работает:

@variable(model, y[Set1, Set2] >= 0)

Чтобы ограничить размерность, я попытался сделать переменную двухмерной, как показано ниже:

@variable(model, x[Set1, [Set2, Set2, Set3, Set4]] >= 0)

Однако, это дало ошибку, что индекс повторяется (Set2).

Есть ли правильный обходной путь или синтаксическая коррекция?

Ответы [ 2 ]

0 голосов
/ 07 мая 2019

Когда я реализовал нецелочисленные указатели, я обычно делал это, используя символы вместо строк.Преобразование между ними довольно просто, и идея символа больше похожа на наборы, но я сделал это, используя массивы вместо наборов, поэтому я не уверен, решит ли это проблему.

Я хотел бырекомендуем вам взглянуть на AxisArrays.jl в качестве альтернативной структуры данных.JuMP хранит свои переменные в AxisArrays, так что он прекрасно работает с остальной частью кода.

0 голосов
/ 10 апреля 2019

После оценки наборов и массивов в решении я обнаружил, что ошибки не выдаются, если индексы описаны иначе, чем «Наборы».

Поэтому, чтобы иметь многомерные переменные со строковыми индексами, объявите индексы как массивы, а не как наборы.

...