2014-09-12 7 views
0

У меня есть простая (я надеюсь) проблема, с которой я боролся весь день. Я пытаюсь назвать переменную двумерного решения в C++, используя технологию концерта. Моя модель представляет собой проблему с реализацией жизненного цикла - поэтому мне нужно индексировать мои переменные с фактическими именами ресурсов и задач, чтобы обеспечить решение лицам, принимающим решения. Это легко с помощью OPL с использованием кортежей. Однако меня путают с технологиями концерта. У меня есть две переменные решения (a) двузначная переменная boolean, которая указывает, какой ресурс был назначен для какой задачи, и (b) 1D логическая индикаторная переменная, которая указывает, был ли выбран конкретный ресурс в решении назначения. Непосредственно назвать 1D переменную. У меня есть следующая Карта, которая содержит название ресурсов и их уровни опыта. Я использую эту карту, чтобы перебирать переменную и назовите его следующим образом:Имя 2D-переменные CPLEX Concert Technology C++

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)); 
} 

Так как же я могу сделать следующее для переменной 2D. Он имеет вид Xij, где i - имя ресурса, а j - имя задачи. Я объявил переменную следующим образом:

IloArray<IloNumVarArray> X; 

У меня есть другая карта, которая указывает на соответствие между я & у. Это:

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. 

Любые идеи будут очень благодарны!

ответ

0

я часто обнаруживал, что проще просто сделать именование в отдельном цикле по всем переменным в массиве, так что-то вроде (извинениями для приближенного синтаксиса):

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

Очевидно SetName() вызовы могут быть сложены в циклы, где вы фактически создаете переменные, если это более удобно.

Но я никогда не использую имена переменных для передачи полезной информации, отличной от моей собственной отладки и т. д. Я бы обычно ходил над переменными в моем коде и использовать значения из CPLEX, чтобы решить, что рисовать в пользовательском интерфейсе, creat e и т. д. на основе решения

Смежные вопросы