У меня есть определенная проблема оптимизации, и мне интересно, есть ли разумный подход для ее решения. (Это, возможно, хорошо изучено, и я просто не знаю, какое имя искать в нем.)
У меня есть (EDIT: free) конечно порожденная абелева группа, G
, на n
генераторах. У меня также есть набор P
элементов G
, каждый из которых помечен строго положительной стоимостью. Все генераторы G
появляются в P
, поэтому всегда можно выразить любой элемент G
как произведение элементов P
или их обратных. Стоимость любого такого продукта представляет собой сумму затрат на элементы P
, которые появляются в нем, с учетом того, как часто они появляются. Стоимость нулевого произведения, которая выражает элемент идентификации G
, равна нулю.
Учитывая элемент группы, я хотел бы найти продукт с минимальной стоимостью, который выражает его в терминах элементов P
.
Просто перевести это в задачу кратчайшего пути без отрицательных дициклов (на бесконечном графе, но для любого данного элемента вам нужна только конечная часть его рядом с элементом идентичности). Также легко перевести его в задачу целочисленного линейного программирования.
Может быть, один из этих переводов - это путь? Или добавляет ли дополнительная структура этой проблемы более простой способ сделать это? В моих реальных проблемах 5 <= n <= 10
и элементах, которые меня интересуют, никогда не бывает кратностей ни одного из генераторов, больших примерно +/- 20.
Я работаю в Haskell, поэтому функциональные подходы будут предпочтительнее для состояния, но с точки зрения состояния тоже все в порядке.