基于Cplex OPL中的另一个元组元素访问元组元素

时间:2019-03-03 16:32:43

标签: optimization cplex opl

我正在Cplex OPL中实现IP模型,并且一开始我以非常低效的方式制定了该模型。大约有120,000个决策变量x_ij,其中只有约2,000个有效。 (这是一个工作分配问题,要分配给约200个工人,500个工作的工人,每个工人最多可以胜任5个工作。由于运行和解决程序需要花费数小时,因此我研究了使用元组构建更有效的模型请遵循本手册:https://www.ibm.com/developerworks/community/forums/atom/download/attachment_14941147_Efficient_OPL_Modeling.PDF?nodeId=f3b70168-871b-4d8f-b457-4641a488bdf4

我创建了以下三个元组:

tuple Worker{
     key string WorkerID;
     float Wage;
}

tuple Job{
     key string JobID;
     int RelImportance;
}

tuple Assignment{
     string WorkerID;
     string JobID;
     float Utility;
}

{Worker} Workers = ...;
{Job} Jobs = ...;
{Assignment} Assignments = ...;

决策变量声明如下:

dvar boolean x[Assignments];

现在,在尝试表达以下内容时遇到麻烦: 我想为每个“工作-工作”对创建一个变量y,以计算解决方案中分配给该工作的较低工资的工人数量。

我已尝试实现以下目标:

dexpr int y[<i,j,u> in Assignments] = sum(k in Workers : k.Wage < Workers.find(<i>).Wage) x[<k.UserID,j,u>]; 

因此,对于每个工人-工作对(i,j),我尝试将所有工资低于工人i的工人的决策变量求和。但是这种方法会带来错误。

所以我的问题是,我不知道如何使用对另一个元组(赋值)的求和来访问一个元组(工作器)中的元素。

0 个答案:

没有答案