Decision Optimization

Decision Optimization

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


#Analytics
#DecisionOptimization
#DecisionOptimization
 View Only
Expand all | Collapse all

Syntax if condition error

  • 1.  Syntax if condition error

    Posted 03/19/16 01:17 AM

    Originally posted by: NguyenHuuTRi


     

    Hi,

    I am trying to code the following syntax in my model. However, I got the trouble with if conditions which make my model can not run:

    the coding is:

    forall ( t in timeslot, g in group){
    if (t>=2) (cs[g][t]-1); 
    else (cs[g][t]-0);
    };

     

     

    Appreciate it if you could help me resolve this issue.

     

    Thanks.

     

     

     

    range type = 1..3;
    range course = 1..59; 
    range room = 1..14;
    range lecture = 1..18;
    range timeslot = 1..12;
    range group=1..13;
    int lecturetimea[lecture][timeslot] = ...;
    int courselecturea[course][lecture]=...;
    int courserooma[course][room]=...;
    int caparooma[type]= ...;
    int capa_cg[group]=...;
    int coursegroupa[course][group]=...;

     


    tuple lecture_time { 
        int lecture; 
        int time; 
    }; 
    setof (lecture_time) LectureTimes = 
            {<l,t> | l in lecture,t in timeslot : lecturetimea[l][t]==1};

    tuple course_room { 
        int course; 
        int room; 
    }; 
    setof (course_room) CourseRooms = 
            {<c,r> | c in course,r in room : courserooma[c][r]==1};


    tuple course_lecture { 
        int course; 
        int lecture;     
    }; 
    setof (course_lecture) CourseLectures = 
            {<c,l> | c in course, l in lecture : courselecturea[c][l]==1};

    tuple course_type{
        int idcourse;
        int idtype;
    };
    setof (course_type) coursetypesa = ...;


    tuple course_group { 
        int idcourse; 
        int idgroup; 
    };

    setof (course_group) CourseGroups = {<c,g> | c in course, g in group: coursegroupa[c][g]==1};


    tuple lecture_course_time {
        int lecture;
        int course;
        int type;
        int time;
        int room;

    }
    setof (lecture_course_time) LectureCourseTimes = 
            {<l,c,ty,t,r> | <c,l> in CourseLectures, <l,t> in LectureTimes , <c,ty> in coursetypesa, <c,r> in CourseRooms};
        


    //sorted {lecture_course_time} s={<l,c,ty,t,r> |<c,l> in CourseLectures, <l,t> in LectureTimes , <c,ty> in coursetypesa, <c,r> in CourseRooms};

     

    dvar boolean x[LectureCourseTimes];
    dvar boolean cs[group][timeslot];
    //dvar boolean csa[group][timeslot];
    dvar boolean f[group][timeslot];

    //dexpr int f[g][t] =   sum(g in group, t in timeslot:t<=11)(cs[g][t]*(cs[g][t+1]-cs[g][t]));


    //maximize sum (w in LectureCourseTimes) x[w];


    minimize 
    sum(t in timeslot, g in group)f[g][t];

    subject to

    forall (g in group){
    sum(t in timeslot)cs[g][t]==capa_cg[g];
    }


    forall (<l,t> in LectureTimes) {
            assignLecture :    sum(<l,c,ty,t,r> in LectureCourseTimes) x[<l,c,ty,t,r>] <=1;

        };        


    forall (c in course) {
            asignCourse: sum(<l,c,ty,t,r> in LectureCourseTimes) x[<l,c,ty,t,r>]<= 1 ; 
        };    
        
        
        forall (r in room, t in timeslot){ 
        assignRoom: sum(<l,c,ty,t,r> in LectureCourseTimes)x[<l,c,ty,t,r>]<=1;
    };


    forall (t in timeslot, ty in type) {
            asignCapaRoomType: sum(<l,c,ty,t,r> in LectureCourseTimes) x[<l,c,ty,t,r>]<= caparooma[ty]; 
        };


    forall(t in timeslot, g in group){
    sum(<l,c,ty,t,r> in LectureCourseTimes)x[<l,c,ty,t,r>]*coursegroupa[c][g]==cs[g][t];
    };

     

    forall ( t in timeslot:t<=11, g in group){
    -cs[g][t]+ cs[g][t+1]<=f[g][t];
    };


    forall ( t in timeslot, g in group){
    if (t>=2) (cs[g][t]-1); 
    else (cs[g][t]-0);
    };

     

    forall(t in timeslot, g in group){
    sum(<l,c,ty,t,r> in LectureCourseTimes)x[<l,c,ty,t,r>]*coursegroupa[c][g]<=1;
    };

    };

     


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 2.  Re: Syntax if condition error

    Posted 03/19/16 05:48 AM

    Hi

    (cs[g][t]-1); 

    is not a constraint.

    Can you try with

    (cs[g][t]-1)==0;

    instead ?

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 3.  Re: Syntax if condition error

    Posted 03/19/16 06:13 AM

    Originally posted by: NguyenHuuTRi


    Hi,

    I am trying using the another if condition but it can not work as cs[g][t] is a decision varaiable. Is there anyway to rewrite this one?

    forall ( t in timeslot:t==1, g in group){
    if (cs[g][t]==0) f[g][t]==(cs[g][t]- cs[g][t-1])-1 ; 
    else (f[g][t]==cs[g][t]- cs[g][t-1]);
    };


    #DecisionOptimization
    #OPLusingCPLEXOptimizer


  • 4.  Re: Syntax if condition error

    Posted 03/21/16 03:01 AM

    Hi,

    you could use logical constraints:

    forall ( t in timeslot:t==1, g in group){
     (cs[g][t]==0) => (f[g][t]==(cs[g][t]- cs[g][t-1])-1) ;
     (cs[g][t]!=0) => (f[g][t]==cs[g][t]- cs[g][t-1]);
    };

    regards


    #DecisionOptimization
    #OPLusingCPLEXOptimizer