我如何在Cplex上的矩阵之间制作乘积

问题描述

我有一个布尔值:m [c] [r] [t]如果将专业c分配给第t天的房间r,则它等于1;否则为0。
为了描述数据,我创建了2个矩阵:v [c] [r],j [r] [t],然后对它们进行乘积运算得到m:m [c] [r] [t] == v [ c] [r] * [r] [t];
问题是全部返回的值等于0,我该怎么办?
代码是这样的:

int nspeciality=...;  
int nroom=...;  
int ndays=...;  

range speciality=0..nspeciality;  
range room=1..nroom;  
range days=0..ndays;  

int m[speciality][room][days];  
int v[speciality][room]=...;  
int j[room][days]=...;  

-----
subject to{      

forall(c in speciality,r in room,t in days)      
  m[c][r][t]==v[c][r]*[r][t];      
-------      
in .dat      

nspeciality=3;      
nroom=4;      
ndays=6;     

v=[[1,1,0],[1,1],[0,0]];        
j=[[0,1]];  

解决方法

您可能想要的是:

int v[speciality][room]=...;  
int j[room][days]=...;  
int m[c in speciality][r in room][t in days] = v[c][r] * j[r][t];

这根据mv定义了j

模型中当前拥有的是未初始化的数据数组m。由于未初始化,因此该数组中的所有元素都设置为0。然后添加约束,使m中的每个插槽必须等于{{ 1}}和v。由于这三个变量都不是变量,因此该约束要么是true要么是false。