2014-11-04 2 views
1

Я собираюсь провести оптимизацию, в которой я найду минимальный маршрут между некоторыми узлами поставки и узлами спроса. Для этого у меня есть набор компаний C. Они имеют некоторые узлы поставки и узлы спроса, которые они «контролируют», например, запасы и фабрики. Однако другим компаниям разрешено вычитать продукты из других акций компаний и возвращать их на свои собственные узлы спроса.Набор вещей в AMPL

Для этого я хотел бы определить некоторый набор узлов поставки, с которыми управляет компания c (in C), и некоторые узлы спроса того же типа. Я думаю, что подмножества и т. Д. Не должны быть действительными (если я не ошибаюсь), поскольку он должен включать элементы как в C, так и в эти узлы. В качестве примера я хочу, чтобы компания c в C контролировала узлы поставки I и компанию c2 в C для управления узлами поставки G и так далее. Можно ли это сделать в AMPL?

С уважением, Cenderze

ответ

1

Вы можете использовать многомерный набор для этого:

set C; 
set SupplyNodes; 
set CompanySupplies within {C, SupplyNodes}; 

где второй индекс CompanySupplies представляет поставки контролируемых компанией c in C, т.е. setof{(c, n) in CompanySupplies: c == c2} == G.

В качестве альтернативы, вы можете использовать индексный набор:

set CompanySupplies{C} within SupplyNodes; 

где CompanySupplies[c] представляет поставки контролируемых компанией c in C.

+0

Как можно «объединить» эти наборы? Например, компания c владеет несколькими точками поставки, но мне интересно узнать, является ли это более оптимальным решением, позволяя компании c вычитать предложение, скажем, любой точки поставки в системе, но все же «сохранить принадлежность поставок указанной компании ». Последнее было бы необходимо, например, для создания ограничений на то, сколько запасов может быть вычтено из набора узлов поставки каждой компании. – Cenderze

+0

Вы можете получить набор узлов поставки для всех компаний, используя выражение 'setof'' setof {(c, n) в CompanySupplies} n', если это то, что вы ищете. – vitaut

+0

Аналогично, для индексированного набора 'union {c in C} CompanySupplies [c]' дает набор узлов поставки для всех компаний. – vitaut

Смежные вопросы