Изменение длины массива при наборе номера.(IBM ILOG CPLEX OPL)
Сейчас я пытаюсь сделать массив, который изменит их длину на то, что я набрал переменные.
Позвольте мне показать вам пример кода, который поможет вам понять.
int ANum = 3; // Number of Equipment A
int BNum = 2; // Number of Equipment B
int QNum = 8; // Number of Equipment Q
range ARange = 1..ANum;
range BRange = 1..BNum;
range CRange = 1..(ANum+BNum);
range QRange = 1..QNum;
float Ar1[ARange] = [1.3, 5, 3]
float Ar2[BRange] = [0.9, 2.2]
float Ar3[CRange] = [Ar1[ARange], Ar2[BRange]] <== "This is Error"
float Ar4[QRange] = [0.8, 1.1, 0.5, 2, 0.3, 1.8, 1.1, 0.6]
----------Первый вопрос-------------------------------
В этом случае мы можем видеть массив "Ar4".
То, что я хочу, это когда я изменяю переменную "QNum" на (<= 8), например) 5 или 3 или другое. Ar2 автоматически меняет свою длину на 5 или 3 или на другие.
вроде как, если набрано 'int ANum = 5;' => "Ar2[QRange] = [0.8, 1.1, 0.5, 2, 0.3]"
--------- Второй вопрос --------------------------
Как видите, "AR1 и AR2, AR3"
Я хотел бы объединить AR1 и AR2, поэтому создайте новый массив AR3.
Причина, по которой я это делаю, заключается в том, что количество оборудования регулярно меняется. Это означает, что каждый раз, когда я запускаю этот код для измененного количества оборудования, мне нужно вводить эти переменные. И для итерационного кода на средах разнесения.
1 ответ
Один из способов, которым вы можете воспользоваться:
float Ar3[i in CRange] = ((i<=ANum) ? Ar1[i] : Ar2[i-ANum]);