Читайте также:
|
|
По умолчанию переменные LINGO имеют нижнюю границу, равную нулю, и верхнюю — бесконечности. Функция @FREE убирает нижнюю нулевую границу, позволяя переменной принимать отрицательные значения и снимая ограничение на знак. Синтаксис функции следующий:
@FREE(переменная)
При решении в LINGO явной модели диапазон значений, разрешенных для вычислений переменной является неограниченным. Однако, при решении оптимизационных моделей или задач с несколькими связанными уравнениями, LINGO вводит по умолчанию предположение, что вычисляемые переменные будут иметь только неотрицательные значения. Рассмотрим следующую модель:
MODEL:
1] 3 * Y + Z / X = -5;
2] X = 2;
3] Y * X + Z = 6;
END
Решением является X=2, Y=–4, Z=14. Однако, LINGO не может вычислить значение Y, поскольку оно отрицательное, и выдает сообщение об ошибке. Чтобы преодолеть эту трудность, необходимо использовать функцию @FREE, снимающую у Y ограничение на знак. Соответствующим образом исправленная модель из последнего примера будет:
MODEL:
1] 3 * Y + Z / X = -5;
2] X = 2;
3] Y * X + Z = 6;
4] @FREE (Y);
END
После решения модели LINGO выдаст следующее решение:
OPTIMUM FOUND AT STEP 2
OBJECTIVE VALUE =.000000000
VARIABLE VALUE
Y -4.000000
Z 14.00000
X 2.000000
ROW SLACK OR SURPLUS
1.0000000
2.0000000
3.0000000
Точно также, как это было только что показано для скалярных значений, вы можете с помощью функции @FREE изменять принятый по умолчанию диапазон ( и для атрибутов множеств. Следующий пример решения общих связанных уравнений иллюстрирует использование @FREE для множеств.
MODEL:
1]! Решатель системы линейных уравнений;
2] SETS:
3]! Размерность строк/столбцов;
4] RC /1..4/: X, B;
5]! множество элементов матрицы A;
6] MATRIX(RC, RC): A;
7] ENDSETS
8]
9]! Для каждой строки;
10] @FOR(RC(I):
11]! Сумма LHS должна быть равна RHS;
12] @SUM(RC(J): A(I, J) * X(J)) = B(I);
13]
14]! Снять ограничения на знак X;
15] @FREE(X));
16]
17] DATA:
18] B = 19, 26, 17, 40;
19] A = 6, 4, 7, 3,
20] 2, 9, 4, 1,
21] 1, 9, 3, 8,
22] 8, 6, 4, 2;
23]
24] ENDDATA
END
В строке 15 снято ограничение на знак переменных X. То есть они могут иметь любые вещественные значения как положительные, так и отрицательные. Как и в случае с @GIN, это может быть сделано применением функции @FREE к каждому элементу X. Заметим, что с этой целью оператор:
@FREE(X)
… расположен внутри области действия оператора @FOR. Если мы не используем оператор @FREE (или как показано ниже, оператор @BND), то LINGO не сможет найти допустимое решение.
VARIABLE VALUE
X(1) 4.0000000
X(2) 3.0000000
X(3) -2.0000000
X(4) -1.0000000
Дата добавления: 2015-11-16; просмотров: 48 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Бинарные целые переменные | | | Ввод из файлов с помощью @FILE |