Пример работы процесса
Четыре ограничения (3) можно проинтерпретировать на этапе генерации Н-сети, и тогда нижние и верхние границы x и y станут равными 0 и 100 соответственно. Таким образом, на первом шаге поцесса потоковых вычислений имеем. Функция проверки корректности (обозначим ее PRDint) проверяет, чтобы нижняя граница Н-числа не превосходила верхнюю. Операции для таких Н-чисел определяются в соответствии… Читать ещё >
Пример работы процесса (реферат, курсовая, диплом, контрольная)
Поясним работу процесса удовлетворения ограничений для Н-моделей на примере достаточно простой системы из двух линейных уравнений с двумя целочисленными неизвестными:
x + y =12;
(2).
2 * x =y;
Предположим, что значения x и y ограничены следующими неравенствами:
0 x 100; 0 y 100. (3).
Множество объектов X данной модели содержит две целочисленные переменные (x, y), множество ограничений R — два уравнения и четыре неравенства.
Для определения соответствующей Н-модели требуется выбрать некоторый вид Н-расширения целого числа. Пусть недоопределенное целое число (Н-число) будет представлено Н-расширением Interval (см. раздел 1). Функция присваивания (обозначим ее PRint) реализует следующее правило изменения значений Н-числа: нижняя граница может только увеличиваться, а верхняя только уменьшаться.
Функция проверки корректности (обозначим ее PRDint) проверяет, чтобы нижняя граница Н-числа не превосходила верхнюю. Операции для таких Н-чисел определяются в соответствии с правилами интервальной математики [21].
Так как множество X содержит две переменные типа Н-число, множество функций присваивания (W) и множество функций проверки корректности (C) содержат по два элемента:
W = { PRint(x), PRint(y) }; C = { PRDint(x), PRDint(y) };
Множество функций интерпретации уравнений (2) состоит из четырех элементов (f1 — f4):
f1: y 12 — x; f2: x 12 — y;
f3: y 2 * x; f4: x y / 2;
Согласно правилам интервальной арифметики, семантика функций интерпретации (f1— f4) представляется следующим образом:
f1: [y Lo, y Up] [12 — x Up, 12 — x Lo];
f2: [x Lo, x Up] [12 — y Up, 12 — y Lo];
f3: [y Lo, y Up] [min {2 * x Lo, 2 * x Up }, max { 2 * x Lo, 2 * x Up }];
f4: [x Lo, x Up] [min {x Lo / 2, x Up / 2 }, max { x Lo / 2, x Up / 2 }];
Четыре ограничения (3) можно проинтерпретировать на этапе генерации Н-сети, и тогда нижние и верхние границы x и y станут равными 0 и 100 соответственно. Таким образом, на первом шаге поцесса потоковых вычислений имеем.
x = [0,100]; y = [0,100];
В табл. 1 приведена последовательность шагов исполнения потокового процесса для данной задачи. В таблице предполагается, что на каждом шаге исполняется первая функция из множества активных функций (она отделена от остальных символом `|'). На первом шаге итерации исполняется функция f1. В результате работы этой функции получаем значение y = [-8, 12]. После этого вызывается функция присваивания PRint (y). Текущее значение y равно [0, 100], новое [-88, 12]. Функция присваивания вырабатывает значение [0, 12] и присваивает его y. Как видим, у переменной y изменилась только верхняя граница (так как новая нижняя граница (-88) меньше текущей (0)). Изменение значения y в целом все-таки произошло (Флаг = да), поэтому вызывается функция проверки корректности PRDint (y). Условие корректности для y (0 12) не нарушается, и процесс исполнения Н-модели продолжается, т. е. происходит активация функций интерпретации f2 и f4, для которых y является входным аргументом.
Ввиду того, что эти функции уже входят в множество активных функций, их повторная активация не происходит. Далее исполняется следующая функция (f2) из очереди.
Вычисления заканчиваются тогда, когда нижняя и верхняя границы как x, так и y становятся равными друг другу. Это произойдет при значениях xLo и xUp равными 8, а yLo и yUp равными 4. При таких значениях исполнение любой функции f1 — f4 не изменяет значения своего результата и множество активных функций становится пустым.
Таблица 1. Протокол исполнения Н-модели.
N. | Активные функции. | Н-значения текущее | новое. | Флаг. | Добавить функции. | |
f1 | f2 —f4. | y=[0,100] | [0,12]. | да. | f2, f4. | ||
f2 | f3, f4. | x=[0,100] | [0,12]. | да. | f1, f3. | ||
f3 | f4, f1. | y=[0,12] | [0,12]. | нет. | |||
f4 | f1. | x=[0,12] | [0,6]. | да. | f1, f3. | ||
f1 | f3. | y=[0,12] | [6,12]. | да. | f2, f4. | ||
f3 | f2, f4. | y=[6,12] | [6,12]. | нет. | |||
f2 | f4. | x=[0,6] | [0,6]. | нет. | |||
f4 |. | x=[0,6] | [3,6]. | да. | f1, f3. | ||
f1 | f3. | y=[6,12] | [6,9]. | да. | f2, f4. | ||
f3 | f2, f4. | y=[6,9] | [6,9]. | нет. | |||
f2 | f4. | x=[3,6] | [3,6]. | нет. | |||
f4 |. | x=[3,6] | [3,4]. | да. | f1, f3. | ||
f1 | f3. | y=[6,9] | [8,9]. | да. | f2, f4. | ||
f3 | f2, f4. | y=[8,9] | [8,8]. | да. | f2, f4. | ||
f2 | f4. | x=[3,4] | [4,4]. | да. | f1, f3. | ||
f4 | f1, f3. | x=[4,4] | [4,4]. | нет. | |||
f1 | f3. | y=[8,8] | [8,8]. | нет. | |||
f3 |. | y=[8,8] | [8,8]. | нет. | |||