本人要做某种映射的优化问题,比如集合A中的元素映射到集合B中的元素,于是定义一个联系A和B的数组C(A,B),当A中的某一元素映射到B中的某一元素上时,数组C中对应项为1,否则为0。已知A到B的映射为单射,且B中的元素多于A中元素。现在要加强一个条件是:把B中元素分成没有公共元素的n组(n为A中元素个数,n组不一定要包含B中所有元素),A中的每个元素仅映射到B中相应的某一特定的分组中元素上。比如A中有1,2,3三个元素,B中有1,2,3,4,5,6,7,8八个元素,B的元素分成三个小组,(1,2);(3,4,5);(6,7),A中的元素1只能映射到B中的分组(1,2)上的元素1或者2,A中元素2只能映射到B中的分组(3,4,5)中某一个元素,A中元素3就只能映射到B中分组(6,7)上。
model:
sets:
SETA/1,2,3/: A;
SETB/1..8/: B;
MATRIXC(SETA,SETB): delta;
endsets
data:
.....
enddata
[OBJ] [email=min=@sum]min=@sum[/email](....)
@for(SETA(m): @sum(SETB(s):delta(m,s))=1;);
@for(SETB(s): @sum(SETA(m):delta(m,s))<=1;);
!如何用LINGO语法把上面更严格的约束描述出来呢
恳请高人指教!!!