AMPL: какой хороший способ указать ограничения на равенство для большого списка пар наборов переменного размера?

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

Например, скажем, классификация А делит отрасли на: сельское хозяйство (овцы / крупный рогатый скот), сельское хозяйство (не овцы / крупный рогатый скот), горнодобывающая промышленность, производство (текстиль), производство (не текстиль), ...

Между тем, классификация B имеет другую разбивку: сельское хозяйство, горнодобывающая промышленность (железная руда), горнодобывающая промышленность (не железная руда), обрабатывающая промышленность (химическая), обрабатывающая промышленность (не химическая), ...

В этом случае любая сумма для A_Agric_SheepCattle + A_Agric_NonSheepCattle должна соответствовать эквивалентной сумме для B_Agric; A_Mining должен соответствовать B_MiningIronOre + B_Mining_NonIronOre; и A_MFG_Textiles+A_MFG_NonTextiles должны соответствовать B_MFG_Chemical+B_MFG_NonChemical.

Для усложнения бонуса одна категория может участвовать в нескольких эквивалентностях, например, B_Mining_IronOre может участвовать в эквивалентности как с A_Mining, так и с A_Mining_Metallic.

Я буду работать с многомерными таблицами, с этим типом согласования, примененным к более чем одному измерению - например, я мог бы собирать данные по Industry x Product, поэтому каждая эквивалентность будет использоваться в нескольких ограничениях; поэтому мне нужен эффективный способ определить их один раз и вызывать повторно, вместо того, чтобы просто устанавливать прямое ограничение "A_Agric_SheepCattle + A_Agric_NonSheepCattle = B_Agric".

Наиболее естественным способом представления такого рода соответствия может быть список пар множеств. Суть в том, что размеры набора будут варьироваться - иногда мы имеем эквивалентность 1:1, иногда это "эти 5 категорий равны этим 7 категориям" и т. Д.

Я нашел этот связанный вопрос, который предлагает два ответа для работы с множествами переменного размера. Одним из них является определение всех членов набора в одном упорядоченном наборе с индексами, а затем определение начального индекса для каждого набора в этом. Тем не менее, это кажется громоздким для моей проблемы; Обе классификации, вероятно, будут длинными, поэтому мне нужно было переключиться между двумя списками отраслей и двумя списками индексов, чтобы увидеть единую эквивалентность. Кажется, что это было бы неудобно проверять и трудно изменить (поскольку любое изменение членства для одного из ранних наборов изменяет номера индексов для всех последующих наборов).

Другой - определить пары длинных наборов фиксированной длины, а затем дополнить каждый набор требуемой длиной нулевыми элементами.

Это было бы намного лучшим вариантом для моих целей, так как он позволяет мне взглянуть на одну строку и увидеть эквивалентность, которую он представляет. Но это потребовало бы МНОГО дополнения; большинство групп эквивалентности будут небольшими, но некоторые могут быть довольно большими, и все должно быть дополнено до размера наибольшей ожидаемой длины.

Есть ли лучший подход?

0 ответов

Другие вопросы по тегам