我使用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开始的原材料来创造产品。 I.E.一定比例的原材料将成为成品,而一些原材料将浪费。对于RecycledU [f]也是如此,其中f在F中,表示精炼后的精炼站。不同之处在于RecycledU [f]的废弃物百分比要低得多,因为Recycled已经成为f的成品(尽管利润低得多)。即回收已经经历了#34;早期成为原材料的过程,x,但在某个早期阶段已经成为成品,或者希望(如果可以建模)在同一时间段内。在实际模型中,作为"产品"和"精炼站"也存在,但我想这个问题可以放弃,以保持它更简单。
我想要实现的是产品的数量是在时间段t 中销售的所有商品的总和和在时间段t内回收的产品数量(通过回收我的意思是成品保留在生产现场,以便在某些时间段g g,g> t)进一步细化。
是否有可能像我一样为prod [t]写两个等号?另外,如何处理Recycle [t]? AMPL"能够理解"因为这些是在同一时间步骤表示的,所以AMPL必须递归地处理约束,即为Recycle [t]计算解决方案,然后尝试在每个时间步长中改进该解决方案?
编辑:时间段以年为单位,这就是为什么我要避免使用带有回收[t-1]的表达式。
EDIT2:prod和x是参数,Recycle和Solditems是变量。
希望任何人都能对此有所了解!
Cenderze
答案 0 :(得分:1)
将同时考虑这两个约束(除非您明确地从问题中排除了一个)。 AMPL或优化求解器没有时间步长的概念,同时考虑了完整的问题,因此您可能需要在时间段之间添加一些链接约束来自己建模时间段。特别是,您可能需要确保库存(例如成品的数量保留在生产现场以进一步细化)从一个时期转移到另一个时期,例如:
Recycle[t + 1] = Recycle[t] - RecycleDecrease + RecycleIncrease;
您必须弄清Recycle
增加(RecycleIncrease
)和减少(RecycleDecrease
)的金额的表达式。
此外,如果您想要某种迭代过程,一次只考虑一个约束,那么您应该使用AMPL script。