Name 2D Variables CPLEX Concert Technology C++

General Tech Technology & Software 2 years ago

0 2 0 0 0 tuteeHUB earn credit +10 pts

5 Star Rating 1 Rating

Posted on 16 Aug 2022, this text provides information on Technology & Software related to General Tech. Please note that while accuracy is prioritized, the data presented might not be entirely correct or up-to-date. This information is offered for general knowledge and informational purposes only, and should not be considered as a substitute for professional advice.

Take Quiz To Earn Credits!

Turn Your Knowledge into Earnings.

tuteehub_quiz

Answers (2)

Post Answer
profilepic.png
manpreet Tuteehub forum best answer Best Answer 2 years ago


I have a straightforward (I hope) issue that I have been grappling with all day. I am trying to name a 2D decision variable in C++ using concert technology. My model is a real life assignment problem - so I need to index my variables with the actual resource and task names in order to provide the solution to the decision makers. This is easy with OPL using tuples. However, I am confused with concert technology. I have 2 decision variables (a) a 2D variable boolean variable that indicates which resource has been assigned to which task, and (b) a 1D boolean indicator variable that indicates if a particular resource has been selected in the assignment solution. It has been straightforward to name the 1D variable. I have the following Map which holds the name of the resources and their experience levels. I use this Map to iterate the variable and name it as follows:

map<string, string> Map;       // The first string holds the name and the second string the experience level
IloNumVarArray Y(env);       // My 1D variable



map<string, string>::iterator Name;      // Iterator for the Map



for (Name = Map.begin(); Name != Map.end(); Name++)
{
                string getName = Name->first;
                char convertedName[100];
                strcpy_s(convertedName, getName.c_str());
               Y.add(IloNumVar(env, 0, 1, ILOINT, convertedName));
}

So how do I do the following for the 2D variable. It is of the form Xij where i is the Resource Name and j is the Task Name. I have declared the variable as follows:

IloArray<IloNumVarArray> X;

I have another Map which indicates the fit between i & j. It is:

Map<string, map<string, float>> fitMap; //first string is the resource name, second string is the` task name and the float is the fit value.

Any ideas will be very appreciated!

profilepic.png
manpreet 2 years ago


I have often found it easiest to just do the naming in a separate loop over all the variables in an array, so something like (apologies for the approximate syntax):

for (i=0; i<M; i++)
    for (j=0; j<N; j++)
        X[i][j].setName(resourceName[i] + "_" + taskName[j]);

Obviously the setName() calls could be folded into the loop(s) where you actually create the variables if that is more convenient

But I never use the naming of the variables to convey useful information other than for my own debugging etc. I would usually walk over the variables in my code and use the values from CPLEX to decide what to draw in a user interface, create reports etc. based on the solution


0 views   0 shares

No matter what stage you're at in your education or career, TuteeHub will help you reach the next level that you're aiming for. Simply,Choose a subject/topic and get started in self-paced practice sessions to improve your knowledge and scores.