Originally posted by: David_HQ
I'm using Cplex 12.9 and there seems to be a bug with implicit slicing over tupleSet.
In my simplified example, all 4 tests should give the same results. Why does Test1 doesn't work?
tuple Year {
int YearId;
}
{Year} Years = {<1>};
tuple House {
string HouseId;
}
{House} Houses =
{
<"House1">,
<"House2">,
<"House3">
};
tuple Member {
key string Name;
string HouseId;
}
{Member} Members =
{
<"H1_1", "House1">,
<"H1_2", "House1">,
<"H1_3", "House1">,
<"H1_4", "House1">,
<"H1_5", "House1">,
<"H1_6", "House1">,
<"H1_7", "House1">,
<"H2_1", "House2">,
<"H2_2", "House2">,
<"H2_3", "House2">,
<"H3_1", "House3">,
<"H3_2", "House3">
};
tuple MemberYear {
key int YearId;
key string Name;
string HouseId;
}
{MemberYear} MembersYear = {<y.YearId, m.Name, m.HouseId> | y in Years, m in Members};
dvar boolean varMembers[MembersYear];
minimize 1;
subject to
{
forall (m in MembersYear)
varMembers[m] == 1;
}
//Results
tuple Results {
key int Year;
key string House;
float NbMembers;
};
{Results} Test1 = {<y.YearId, h.HouseId, sum(<y.YearId, Name, h.HouseId> in MembersYear)varMembers[<y.YearId, Name>]> | y in Years, h in Houses};
{Results} Test2 = {<y.YearId, h.HouseId, sum(<y.YearId, Name, h.HouseId> in MembersYear)varMembers[<y.YearId, Name, h.HouseId>]> | y in Years, h in Houses};
{Results} Test3 = {<y.YearId, h.HouseId, sum(m in MembersYear : y.YearId == m.YearId && h.HouseId == m.HouseId)varMembers[m]> | y in Years, h in Houses};
{Results} Test4 = {<YearId, HouseId, sum(<YearId, Name, HouseId> in MembersYear)varMembers[<YearId, Name>]> | <YearId> in Years, <HouseId> in Houses};
execute
{
function writeResult(tupleSet, testNb)
{
writeln("Test " + testNb)
for (var res in tupleSet)
writeln(res.Year + " " + res.House + " " + res.NbMembers);
writeln();
}
writeResult(Test1, 1)
writeResult(Test2, 2)
writeResult(Test3, 3)
writeResult(Test4, 4)
}
/*
// solution (optimal) with objective 1
Test 1
1 House1 7
1 House2 7
1 House3 7
Test 2
1 House1 7
1 House2 3
1 House3 2
Test 3
1 House1 7
1 House2 3
1 House3 2
Test 4
1 House1 7
1 House2 3
1 House3 2
*/
#DecisionOptimization#OPLusingCPLEXOptimizer