问题描述
我有一个布尔值: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];
这根据m
和v
定义了j
。
模型中当前拥有的是未初始化的数据数组m
。由于未初始化,因此该数组中的所有元素都设置为0。然后添加约束,使m
中的每个插槽必须等于{{ 1}}和v
。由于这三个变量都不是变量,因此该约束要么是true要么是false。