Добавление массивов в OPL-Cplex

Представьте, что у меня есть массивы, как показано ниже.

int a[1..4]=[1,2,3,4];
int b[1..2]=[5,6]

1) Если мне нужно создать массив c, как показано ниже (1 строка и 6 столбцов)

int c[1..6]=[1,2,3,4,5,6] 

2) ЕСЛИ мне нужно создать 2D-массив, используя более двух массивов. Например: объединить более 2, 1D массивов и создать массив (2 строки x 3 столбца)

int d [1..2] [1..3] = [[1,2,3], [4,5,6]]

Не могли бы вы посоветовать, как я могу получить выходные данные от Cplex.


person suresh_chinthy    schedule 06.05.2020    source источник


Ответы (1)


Прямой ответ на ваш вопрос таков:

int a[1..4]=[1,2,3,4];
int b[1..2]=[5,6];

int c[i in 1..6] = (i <= 4) ? a[i] : b[i - 4];
int d[i in 1..2][j in 1..3] = c[(i - 1) * 3 + j];

main {
  writeln(thisOplModel.c);
  writeln(thisOplModel.d);
}

Однако для c вам может быть лучше использовать наборы. Они обеспечивают операцию объединения.

person Daniel Junglas    schedule 06.05.2020
comment
привет @DanielJunglas, мы не можем использовать append для создания этого вывода. И если вы можете предоставить мне источник, который я могу изучить о конкатенации, используя (пример: (i ‹= 4)? a [i]: b [i - 4]) эти синтаксис был бы отличным. Я не мог найти места, где руководство пользователя OPL сообщало бы об этих вещах. Спасибо. - person suresh_chinthy; 09.05.2020
comment
Да, для объединения вы также можете использовать int c[0..5] = append(a, b). Синтаксис, который я использовал в своем примере для конкатенации, - это просто тернарный оператор ?:. Этот оператор указан здесь ibm.com/support/knowledgecenter/SSSA5P_12.9.0/, но я не думаю, что есть явный пример, поскольку это стандартная операция, такая же, как + или -. - person Daniel Junglas; 11.05.2020