AMPL:对于大型可变大小集对列表指定等式约束的好方法是什么?

时间:2016-10-19 00:35:41

标签: set ampl

我正在处理一个问题,该问题涉及协调表示两个不同分类层次结构下同一系统估计值的数据。我想强制要求等效类或类组具有相同的总和。

例如,分类A将行业划分为:农业(绵羊/牛),农业(非绵羊/牛),采矿,制造业(纺织品),制造业(非纺织品),......

同时,分类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的等价,有时候它们会等同于这7个类别"等等。

我发现this related question为处理可变大小的集合提供了两个答案。一种是在具有索引的单个有序集中定义所有集成员,然后为其中的每个集定义起始索引。但是,这对我的问题来说似乎很笨拙;这两种分类可能都很长,所以我需要在两个行业列表和两个指数列表之间跳跃才能看到​​单一的等价。这似乎是一个令人讨厌的问题,并且难以修改(因为对其中一个早期集的成员资格的任何更改都会更改所有后续集的索引号)。

另一种是定义长固定长度对的对,然后用null成员将每个集填充到所需的长度。

对于我的目的来说,这将是一个更好的选择,因为它让我可以看到一条线并看到它代表的等价物。但它需要很多填充;大多数等价组都很小,但有些可能很大,所有内容都必须填充到最大预期长度的大小。

有更好的方法吗?

0 个答案:

没有答案