Изменение длины массива при наборе номера. (IBM ILOG CPLEX OPL) - PullRequest
0 голосов
/ 30 апреля 2019

Теперь я пытаюсь создать массив, который изменит свою длину в соответствии с тем, что я набрал переменные.

Позвольте мне показать вам пример кода, который облегчит вам понимание.

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 или на другие. </p>

как и в случае ввода 'int ANum = 5;' => "Ar2[QRange] = [0.8, 1.1, 0.5, 2, 0.3]"

--------- Второй вопрос --------------------------
Как видите, «AR1 и AR2, AR3»
Я хотел бы объединить AR1 и AR2, поэтому создайте новый массив AR3.


Причина, по которой я это делаю, заключается в том, что количество оборудования регулярно меняется. Это означает, что каждый раз, когда я запускаю этот код для измененного количества оборудования, мне нужно вводить эти переменные. И для итерационного кода в разнесенных средах.

1 Ответ

3 голосов
/ 30 апреля 2019

Вы можете использовать один из следующих способов:

float Ar3[i in CRange] = ((i<=ANum) ? Ar1[i] : Ar2[i-ANum]);
...