1

我正在使用 AMPL 对一个产品进行建模,其中我有两个我不太确定如何处理的特定约束。

subject to Constraint1 {t in T}:
   prod[t] = sum{i in I} x[i,t]*u[i] + Recycle[f]*RecycledU[f];

subject to Constraint2 {t in T}:
   Solditems[t]+Recycle[t]=prod[t];

编辑:其中 x[i,t] 是供应点 i 的产品数量。u[i] 表示从供应点 i 到生产产品的原材料的“交换率”。即一定比例的原材料将成为成品,而一些原材料将被浪费。RecycledU[f] 也是如此,其中 f 在 F 中,表示已对其进行精炼的精炼站。不同之处在于 RecycledU[f] 的浪费百分比要低得多,因为 Recycled 已经是 f 的成品(尽管利润要低得多)。即 Recycle 已经“经历”了较早成为原材料的过程,x,但在某个较早的阶段已成为成品,或者希望(如果可以建模)在与此相同的时间段内。在实际模型中作为“产品”

我想要完成的是,生产的产品数量是时间段 t 内销售的所有物品时间段 t回收的产品数量的总和(回收的意思是成品保存在生产现场以供进一步使用)在某个时间步长 g, g>t) 中进行细化。

是否可以像我一样为 prod[t] 写两个等号?另外,如何处理 Recycle[t]?AMPL 能否“理解”由于这些是在同一时间步表示的,AMPL 必须递归处理约束,即计算 Recycle[t] 的解决方案,然后尝试在每个时间步改进该解决方案?

编辑:时间段以年表示,这就是为什么我想避免使用 Recycle[t-1] 的表达式。

EDIT2: prod 和 x 是参数, Recycle 和 Soliditems 是变量。

希望任何人都可以对此有所了解!

森德泽

4

1 回答 1

1

将同时考虑这两个约束(除非您明确从问题中排除一个)。AMPL 或优化求解器没有时间步长的概念,并且会同时考虑完整的问题,因此您可能需要自己在时间段之间添加一些链接约束来建模时间段。特别是,您可能需要确保将库存(例如成品数量保留在生产现场以供进一步细化)从一个时期结转到另一个时期,例如:

Recycle[t + 1] = Recycle[t] - RecycleDecrease + RecycleIncrease;

您必须找出Recycle增加 ( RecycleIncrease) 和减少 ( RecycleDecrease) 的数量的表达式。

此外,如果您想要某种迭代过程,一次考虑一个约束,那么您应该使用AMPL script

于 2015-01-08T01:34:22.067 回答