Decision Optimization

Decision Optimization

Delivers prescriptive analytics capabilities and decision intelligence to improve decision-making.


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
  • 1.  Slicing in OPL

    Posted 10/09/19 11:02 AM

    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


  • 2.  Re: Slicing in OPL

    Posted 10/10/19 02:25 AM

    Thank you for reporting this problem. This is indeed a known issue with slicing in OPL. The problem will be fixed in the next version.


    #DecisionOptimization
    #OPLusingCPLEXOptimizer