Перейти к основному содержимому

Линейные выражения

Из переменных, определенных в модели, могут быть составлены выражения. Для выражений действуют следующие утверждения:

  • Выражения должны быть линейными, вида Σaixi + b. Перемножение переменных между собой не допускается;
  • Все компоненты выражений: переменные, коэффициенты и константы, должны быть целыми числами в диапазоне [-264, 264).

Способы определения линейных выражений

Во многих процедурах и функциях библиотеки О2 в качестве входных аргументов выступают "линейные выражения" или массивы из "линейных выражений". В качестве линейных выражений в таком случае могут передаваться:

  • Непосредственно переменные, определенные в модели, т.к. переменная - это частный случай линейного выражения;
  • Числовые значения, например число "5", т.к. константы - это частный случай линейного выражения, где все коэффициенты при переменных равны "0";
  • Строки, содержащие линейные выражения. Правила формирования описаны ниже;
  • Булевы выражения. При этом "ЛОЖЬ" будет интерпретирована как "0", а ИСТИНА как "1";
  • Объекты с типом "ЛинейноеВыражение", полученные с помощью методов менеджера линейных выражений (описан далее) или с помощью методов отдельного построителя выражений (описан далее).

Строковые определения выражений

При использовании строк для определения линейных выраженений допускается использовать:

  • имена переменных;
  • числовые литералы;
  • символы математических операций "+", "-" и "*", деление не допускается;
  • круглые скобки "(" и ")" для обозначения приоритета операций.
Пx = Модель.Переменная("x");
Пy = Модель.Переменная("y");

// устанавлиаем ограничение на значение линейного выражения
// 2x - 3(2 + 7y) + 15 = 45
Модель.Ограничения().ЗначениеРавно("2*x - 3*(2 + 7*y) + 15", 45);
Важно

Работа со строковыми выражениями требует дополнительных вычислительных ресурсов на их интерпретацию, поэтому при формировании больших моделей лучше формировать выражения методами менеджера выражений или построителя выражений, особенно если выражения формируются итеративно в циклах.

Менеджер выражений

Менеджер выражений позволяет создать линейное выражение из переменной, константы или уже имеющегося линейного выражения.

Менеджер выражений доступен через объект модели:

МенеджерВыражений = Модель.Выражения();

В менеджере выражений предусмотрены следующие методы для работы с выражениями:

Выражение

Преобразует указанное в аргументе выражение в объект с типом "ЛинейноеВыражение".

Пx = Модель.Переменная("x");
Пy = Модель.Переменная("y");

Выражение1 = Модель.Выражения().Выражение("2*x + 3*y + 5");
Выражение2 = Модель.Выражения().Выражение(467);
Выражение3 = Модель.Выражения().Выражение(Пx);

Константа

Преобразует указанное целое число в объект с типом "ЛинейноеВыражение".

Выражение = Модель.Выражения().Константа(467);

Терм

Создает линейное выражение, являющееся результатом домножения другого линейного выражения на указанный целочисленный коэффициент.

Пx = Модель.Переменная("x");
Пy = Модель.Переменная("y");

Терм1 = Модель.Выражения().Терм(Пx, 2);
Терм2 = Модель.Выражения().Терм(Пy, 3);
Терм3 = Модель.Выражения().Терм("x - 2*(3 + y)", 8);

Сумма

Создает линейное выражение, являющееся суммой указанных в аргументе линейных выражений.

Пx = Модель.Переменная("x");
Пy = Модель.Переменная("y");

Выражения = Новый Массив();
Выражения.Добавить(Пx);
Выражения.Добавить(Пy);
Выражения.Добавить(Модель.Выражения().Терм(Пy, 2));
Выражения.Добавить("x + 3*y");

Сумма = Модель.Выражения().Сумма(Выражения);

ВзвешеннаяСумма

Создает линейное выражение, являющееся суммой указанных в аргументе линейных выражений, домноженных на весовые коэффициенты. Коэффициенты должны быть целыми числами.

Пx = Модель.Переменная("x");
Пy = Модель.Переменная("y");

Выражения = Новый Массив();
Выражения.Добавить(Пx);
Выражения.Добавить(Пy);
Выражения.Добавить(Модель.Выражения().Терм(Пy, 2));
Выражения.Добавить("x + 3*y");

Коэффициенты = Новый Массив();
Коэффициенты.Добавить(3);
Коэффициенты.Добавить(1);
Коэффициенты.Добавить(3);
Коэффициенты.Добавить(5);

Сумма = Модель.Выражения().ВзвешеннаяСумма(Выражения, Коэффициенты);

Построитель выражений

Построитель выражений позволяет создавать линейные выражения инкрементально, например, добавляя слагаемые в цикле. Построитель выражений может быть создан через специальный метод менеджера выражений СоздатьПостроительВыражений(). После окончания формирования линейного выражения результирующее выражение может быть получено методом ПолучитьВыражение().

Построитель = Модель.Выражения().СоздатьПостроительВыражений();

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

В построителе выражений предусмотрены следующие методы:

Добавить

Добавляет указанное в аргументе выражение к уже накопленным данным.

// Имеем массив "Переменные", состоящий из переменных, ранее определенных в модели 

Построитель = Модель.Выражения().СоздатьПостроительВыражений();

Для Каждого Перменная Из Переменные Цикл
Построитель.Добавить(Перменная);
КонецЦикла;

Выражение = Построитель.ПолучитьВыражение();

Вычесть

Вычетает указанное в аргументе выражение из уже накопленных данных.

Умножить

Умножает накопленное в построителе линейное выражение на указанный в аргументе коэффициент. Коэффициент должен быть целым числом.

ДобавитьКонстанту

Добавляет константу к уже накопленному в построителе линейному выражению. Константа должна быть целым числом.

ДобавитьТерм

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

// Имеем массив "Переменные", состоящий из переменных, ранее определенных в модели 

Построитель = Модель.Выражения().СоздатьПостроительВыражений();

Для К = 0 По Переменные.ВГраница() Цикл
Перменная = Переменные[К];
Построитель.ДобавитьТерм(Перменная, К + 1);
КонецЦикла;

Выражение = Построитель.ПолучитьВыражение();

ДобавитьСумму

Добавляет к уже накопленному в построителе линейному выражению сумму из указанных в аргументе выражений.

ДобавитьВзвешеннуюСумму

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

ПолучитьВыражение

Возвращает итоговый объект с типом "ЛинейноеВыражение", соответствующий накопленным данным в построителе.

ИтоговоеВыражение = Построитель.ПолучитьВыражение();

Очистить

Очищает все данные, накопленные в построителе выражений.

Построитель.Очистить();