Cplex:如何为指定字符串编写约束

Cplex: How to write constraints for designated string

请帮我在Cplex中写约束。 我正在解决人员调度问题。

我有以下几组:

{字符串} 我=...; // 所有医生的集合

{字符串} E=...; // 一组经验水平

{字符串} K=...; //轮班类型

{string} A=...;//作品类型

int D=...;

范围日=1..D; //调度范围是从第1天到第30天

数据:

我={"A","B","C","D","E","F","G", "H","I","J","K","L","M","N","O","P","Q","R","S","T"};

E={"Senior","Rookie"};

K={"o","t"};

A={"Day","Evening","Night","Night1","Night2"};

决策变量:

dvar int x[I][E][Day][K][A] in 0..1; //1,如果经验级别为e的医师i被分配到d天,班次类型为k,工作类型为a

约束: evening+night constraint

我的主要问题是,因为我只需要关注集合A中的"Evening"和"Day",我不知道如何在Cplex中表达。

forall(i in I, e in E, d in D, k in K, Evening in A, Day in A)
       {
       x [i, e, (d-1), k, Evening]+ x[i, e, d, k, Day]<=1;  
       }

以上是我尝试但失败了。

感谢您的帮助!

.mod

{string} I=...; // set of all physicians

{string} E=...; // set of experience levels

{string} K=...; //type of shifts

{string} A=...;//work type

int D=...;

range Day=1..D; //scheduling horizon is from day 1 to day 30

dvar int x[I][E][Day][K][A] in 0..1; //1, if physician i with experience level e is assigned to day d with shift type k with work type a



subject to
{
forall(i in I, e in E, d in Day, k in K, Evening in A:(d-1) in Day)
       {
       x [i, e, (d-1), k,"Evening"]+ x[i, e, d, k, "Day"]<=1;  
       }

     } 

.dat

I={"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T"};

E={"Senior","Rookie"};

K={"o","t"};

A={"Day","Evening","Night","Night1","Night2"};

D=7;

工作正常