Целочисленные и вещественные выражения

Описывает использование констант, данных, переменных решений и операторов в выражениях OPL.

Целочисленные выражения

Целочисленные выражения составляются из целочисленных констант, целочисленных данных, целочисленных переменных решений и стандартных целочисленных операторов, таких как +, -, *, div, mod (или %). Оператор div выполняет целочисленное деление (например, 8 div 3 == 2), а оператор mod или % выполняет деление с остатком. Кроме того, OPL поддерживает функцию abs, которая возвращает модуль значения аргумента, и встроенную константу maxint, которая представляет максимально допустимое целое число в OPL.

Обратите внимание, что выражения с большими целочисленными значениями могут вызвать переполнение. В следующем примере обнаруживается переполнение.

int a=maxint+2;
float b=infinity+2;

execute {
   writeln(a);
   writeln(b);
}

На вкладке Неполадки в IDE отображается сообщение об ошибке.

Снимок экрана, демонстрирующий ошибки переполнения в IDE

Большинство целочисленных выражений (таких как % и div) нельзя использовать в ограничениях из моделей CPLEX, однако они поддерживаются в моделях CP. См. также раздел Доступные ограничения при программировании в ограничениях.

Вещественные выражения

Вещественные выражения составляются из вещественных чисел, вещественных данных и переменных, а также операторов, таких как +, -, /, *. Кроме того, в языке OPL предусмотрена вещественная константа infinity, представляющая бесконечность, а также различные вещественные функции. Дополнительная информация приведена в разделе Функции OPL в кратком справочнике по языку.

Условные выражения

Условные выражения выглядят следующим образом:

(condition)?thenExpr : elseExpr

где condition - это основное условие без переменной решения. Если условие condition выполнено, то выбирается вариант thenExpr ; в противном случае выбирается вариант elseExpr.

Примеры

int value = ...; 
int signValue = (value>0) ? 1 : (value<0) ? -1 : 0;
int absValue = (value>=0) ? value : -value;

Дополнительная информация о числовых функциях приведена в разделе Summary table of OPL functions в кратком справочнике по языку.

Вычисление выражений

В число целочисленных выражений входят комбинаторные выражения. Например с помощью функции count можно подсчитать число вхождений конкретного значения в массиве переменных решений. Такое выражение применимо в контексте моделирования ограничений только в том случае, если ограничения входят в состав модели, обрабатываемой службой CP Optimizer (после оператора using CP;).

Ограничение

count(x, 2) == 3;

указывает, что массив переменных x должен содержать три переменных со значением 2.

Дополнительная информация приведена в разделе count в книге Краткий справочник по языку.