Вы находитесь на странице: 1из 34

Федеральное агентство по образованию

Государственное образовательное учреждение


высшего профессионального образования
Санкт-Петербургский государственный технологический институт
(Технический университет)

В.А.Холоднов, А.Г.Хайдаров, М.В.Сычева, М.Ю.Лебедева

ПРОГРАММНЫЙ ПРОДУКТ GAMS ДЛЯ РЕШЕНИЯ


ЗАДАЧ ОПТИМИЗАЦИИ СИСТЕМ

Учебное пособие

Санкт-Петербург
2007
GAMS Generalized Algebraic Modeling System

GAMS, язык для решения и оптимизации математических моделей (


также систем уравнений и эквилибриумных(равновесных) моделей)

GAMS позволяет описывать структуру оптимизируемой модели,


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

Основная идея GAMS заключалась в том, чтобы объединить идеи,


вытекающие из теории реляционной базы данных и математического
программирования. Кроме того была сделана попытка соединить эти идеи
таким образом, чтобы удовлетворить потребности стратегического
моделирования.
Теория реляционной базы данных обеспечивает структурную
композицию (интегрированную систему для ПЭВМ типа IBM PC,
объединяющую различные виды информации с использованием правил
иерархии) для развития организации основных данных и развития
трансформационных возможностей. Математическое моделирование
обеспечивает путь описания проблемы и различные методы ее решения.

При разработки системы GAMS придерживались следующих принципов:

• Пользователю должны были быть доступны все существующие


алгоритмические методы, при этом новая система не должна была изменить
представление пользователя о моделировании. Ввод новых методов или новая
реализация существующих методов должны были осуществляться без внесения
изменений в существующие модели. Линейные, нелинейные, смешанные
целочисленные, смешанные целочисленные нелинейные оптимизации и
смешанные дополнительные задачи могли бы подключаться без ущерба
структурной конструкции создаваемых моделей.
• Оптимизационная задача должна была иметь структуру независимую от
данных, которые она использует. Это разделение логики и данных позволяет
увеличивать задачу в размерах таким образом, что это не приводило к
увеличению в комплексности представления основной части модели
построенной на логике.
• Использование реляционных данных модели требует, чтобы
распределение ресурсов компьютера было автоматизированным. Это означает,
что большие и комплексные модели могут быть составлены таким образом,
чтобы пользователь не заботился о таких деталях, как размеры массивов или
объем памяти.
Документация к GAMS находится в файле userguide.pdf

2
GAMS это просто

С помощью GAMS можно легко решаются многие задачи. Допустим,


надо решить следующую задачку - максимизировать Z, в следующей системе из
3-х уравнений:

Z = 109*X1+90*X2+115*X3
X1+X2+X3 < 100
6*X1+4*X2+8*X3 < 500

Самое простое решение следующее:


(файл пример в INTRO.GPR называемый SIMPfarm.GMS)

Текст программы :
VARIABLES Z;
POSITIVE VARIABLES Xcorn , Xwheat , Xcotton;
EQUATIONS OBJ, land , labor;
OBJ.. Z =E= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =L= 100;
labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500;
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

3
Переменные (VARIABLES)

Переменные используются для хранения значений. Применяются в


основном в уравнениях для задания искомых величин.
Пример:

VARIABLES Z;
POSITIVE VARIABLES Xcorn , Xwheat , Xcotton;EQUATIONS
OBJ, land , labor;
OBJ.. Z =E=
109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =L= 100;
labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500;
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

GAMS требует объявления переменных для каждой задачи. В текущей


задаче мы имеем следующие переменные : Z, Xcorn , Xwheat , Xcotton .
Объявление о наличии переменно имеет следующий синтаксис:
VARIABLE <Имя переменной 1>,
 < Имя переменной 2>,
 …,
 < Имя переменной n>;

Обозначение POSITIVE вместе с VARIABLE значит, что при решении


значения этих переменных будут больше нуля, т.е. положительными:
Xcorn > 0 , Xwheat > 0, Xcotton > 0

Использование слова VARIABLES без модификатора POSITIVE (


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

4
Уравнения (EQUATIONS)

Уравнения используются для описания зависимостей между


переменными. При решении можно объединять в систему уравнений.
Пример:

VARIABLES Z;
POSITIVE VARIABLES Xcorn , Xwheat , Xcotton;
EQUATIONS OBJ, land , labor;
OBJ.. Z =E=
109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =L= 100;
labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500;
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

Объявление уравнений:
EQUATIONS <Имя уравнения 1>,
< Имя уравнения 2>,
…,
< Имя уравнения n>;

GAMS требует, чтобы каждое описываемое уравнение имело свое


уникальное имя (спецификатор). Затем уравнение описывается через две точки
(..).
В этом примере уравнения объявляются после ключевого слова
EQUATION.
Уравнения в этой программе:
o OBJ имя уравнения содержащего целевую функцию;
o Land имя для первого ограничивающего уравнения;
o Labor имя для второго ограничивающего уравнения;

Целевая функция всегда задается среди уравнений. В ней содержится


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

5
Применение символа «две точки» (..)

При задании уравнения этот символ отделяет имя задаваемого уравнения


от его содержания:
<Имя уравнения>..<Содержание уравнения>;

Пример:
VARIABLES Z;
POSITIVE VARIABLES Xcorn , Xwheat , Xcotton;
EQUATIONS OBJ, land , labor;
OBJ.. Z =E= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =L= 100;
labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500;
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

Уравнения в GAMS состоят из двух частей, которые разделяются двумя


точками:
1. Имя уравнения, рассматривалось на предыдущей странице.
2. Представление структуры уравнения.

Две части разделяются между собой двумя точками (..). Структура


уравнения задается с использованием спецификаторов:
o =E= обозначает равенство (=)
o =L= обозначает меньше или равно (<=)
o =G= обозначает больше или равно (>=).

Возможные структуры уравнения с использованием спецификаторов:


o Y =e= a0 + a1*X1 + a2*X2 + a3*X3
- переменная слева равна выражению справа (м.б. целевой функцией);
o a0 + a1*X1 + a2*X2 + a3*X3 =l= b0 + b1*Y1 + b2*Y2 + b3*Y3
- левая половина меньше или равна правой;
o a0 + a1*X1 + a2*X2 + a3*X3 =g= b0 + b1*Y1 + b2*Y2 + b3*Y3
- левая половина больше или равна правой;

Где
ai, bj – числовые коэффициенты
Xi, Yj – переменные;

6
Применение оператора MODEL

Оператор MODEL предназначен для связи отдельных уравнений в


систему и задания ей имени.

Пример:
…………………………………………
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

В нашем случае PROBLEM – имя системы из 3-х уравнений.


Синтаксис:
MODEL <Имя системы> /<Имя уравнения 1, Имя уравнения 2, … >/;

Самое распространенное использование приведено выше, где вместо


списка идет ключевое слово ALL, что означает, что в систему входят все
уравнения объявленные выше.
MODEL <Имя системы> /ALL/;

Т.е. наш пример можно записать и вот так.

MODEL FARM /obj, Land, labor/;

7
Зачем нужен SOLVE

Пример:
………………………………………
SOLVE PROBLEM USING LP MAXIMIZING Z;

Ключевое слово SOLVE дает инструкции GAMS начать решение системы


уравнений, имя которой вы указываете. Как можно догадаться, сначала
необходимо объявить эту модель, так как это сделано на предыдущей странице.
Синтаксис:
SOLVE <Имя системы уравнений>
USING <Метод решения> <Направления поиска> <Имя целевой переменной>;

Также в solve задается направлению поиска решения. Можно


максимизировать (MAXIMIZING) или минимизировать (MINIMIZING)
заданную в конце строки переменную. Эта переменная должна быть без
ограничения по знаку и эта переменная должна содержаться справа в целевой
функции.
Затем задается метод решения. Например линейного программирования
(“using LP”). Существует множество методов решения, такие как нелинейное
программирование “using nlp”, mixedinteger programs “using MIP” и другие.

8
Отделение операций в GAMS

GAMS требует завершать каждую отдельную операцию точкой с запятой.


Безусловно (;) очень важная часть синтаксиса. Их пропуск часто приводит к
синтаксическим ошибкам в программе, которые вы найдете в отчете
компилятора.

Пример:
VARIABLES Z;
POSITIVE VARIABLES Xcorn , Xwheat , Xcotton;
EQUATIONS OBJ, land , labor;
OBJ.. Z =E= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =L= 100;
labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500;
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

9
Порядок работы с GAMS

GAMS работает в две фазы:


Первая, использование текстового редактора и создание файла с GAMS
инструкциями;
Вторая фаза – обработка инструкций, выполнение вычислений, и создание
отчета по вычислениям.

Также существует два способа работы в GAMS.

 Традиционный – Модель пишется в текстовом редакторе, а далее она


поступает на вычисление в GAMS (gams.exe). Но теперь этот метод не для
вас.
 Современный – использование GAMS IDE, в котором есть графический
интерфейс, редактор с синтаксической подсветкой и кнопка запуска
написанной модели.

10
Работа с GAMS IDE

GAMS IDE – среда разработанная для написания программ для GAMS и


их запуска.
На картинке внизу пример набранной программы в GAMS IDE для
решения нашей системы, которая уже упоминалась много раз выше по тексту.
Так выглядит GAMS IDE в действии.

Рисунок «Среда разработки GAMS IDE»

Структура файлов проекта в GAMS такова: GPR – проект, содержащий в


себе набор файлов с нашими программами (*.GMS).

Важное примечание – в пути к проекту не должно быть русских букв, т.е.


в «Мои документы» не сохранять. Иначе не будет работать!!!

Откроем проект INTRO расположенный ../example/class. Последовательность


действий показана на рисунках ниже и рассказана в подписях к рисункам.

11
Рисунок «Открытие проекта»

1 Откройте файл simpfarm.gms

Рисунок «Открытие файла»


12
2 Расставьте окна как вам удобно

Рисунок «Программная среда»

3 Запустите нажатием кнопки (на рисунке находится под курсором)

Рисунок «Запуск программы»

4 Расположите окна поудобней, например, как на рисунке внизу (в правую


часть).

13
Рисунок «Компиляция программы»

5 Переместите в новом окне выделение на последнюю строчку и кликните


дважды на ней или клавиша Enter.

Рисунок «Получение результатов расчета»

6 В результате откроется файл simpfarm.LST, в котором можно найти


14
результаты вычисления.

Рисунок «Листинг расчетов»

15
Компиляция программы

Что происходит во время запуска программы на компиляцию.

GAMS 2.50.094 Copyright (C) 1988-1998 GAMS Development. All rights reserved
--- Starting compilation *** Проверка на правильность кода
--- SIMPFARM.GMS(9) 0 Mb ***(9) номер текущей строки
--- Starting execution *** Запуск файла
--- Generating model PROBLEM ***Настройка LP задачи
--- SIMPFARM.GMS(9) 1 Mb ***(9) номер текущей строки
---3 rows, 4 columns, and 10 non-zeroes.
***Размерность LP
--- Executing OSL
Work space allocated 0.09 Mb ***Результаты решения
Reading data...
Starting OSL...
Scale...
Presolve...
Crashing...
Primal Simplex...
Iter Objective Sum Infeasibilities
Postsolve...
Primal Simplex...
--- Reading solution for model PROBLEM
--- SIMPFARM.GMS(9) 0 Mb
*** Status: Normal completion ***Завершение работы

16
Поиск и исправление ошибок в коде

Файл с ошибками (simperr.gms)

Рисунок «Программа, содержащая ошибки»

После компиляции

Рисунок «Компиляция программы»

Щелкаете дважды на первую красную линию (ошибки выделены


красным) в результате чего, курсор перемещается к месту ошибки.

17
Рисунок «Исправление ошибок»

Ошибки допущенные в программе выше:


 Не хватает объявления переменной;
 Не хватает объявления уравнения;
 Отсутствует точка с запятой;

18
Анализ файла отчета (*.LST)

Проанализируем листинг файла отчета. Все уравнения в отчете начинаются с «--


--»

Рисунок «Представление уравнений в *.lst»

Для поиска результат решения нужно найти в листинге отчета слово solution,
под которым находится решение модели.

19
Рисунок «Результаты решения»

В таблице в колонке LEVEL содержится значения. LOWER и UPPER


обозначают нижнее и верхнее ограничение. Последняя колонка MARGINAL
характеризует точность.

20
Альтернативное представление

Попробуем использовать матрицы для задания коэффициентов в уравнениях.

Максимизировать cjXj
Дополнительные условия
aijXj ≤ bi для всех i
Xj > 0 для всех j

Максимизировать :
109*Xcorn + 90*Xwheat + 115*Xcotton
Причем : Xcorn + Xwheat + Xcotton ≤ 100 (land)
6*Xcorn + 4*Xwheat + 8*Xcotton ≤ 500 (labor)
Xcorn, Xwheat, Xcotton > 0 (положительные)

j = { corn wheat cotton }


i = { land labor }
Xj ={ Xcorn Xwheat Xcotton }
cj = {109 90 115 }
aij =
1 1 1
6 4 8
bi = { 100 500 }

21
Исследования суммирования

Предположим матрица xi содержим три элемента и нужно их


просуммировать.
Алгебраичное представление :
z = ∑Xj = X1 + X2 + X3

GAMS :
z = SUM(I, X(I));
Где i это множество
z скаляр или переменная
x(i) это переменная заданная через множество

Результат : Происходит автоматическая суммация для всех i (индексов).

22
Улучшенное алгебраическое представление модели

Что было :
VARIABLES Z;
POSITIVE VARIABLES Xcorn , Xwheat , Xcotton;
EQUATIONS OBJ, land , labor;
OBJ.. Z =E= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =L= 100;
labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500;
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

Новое представление (algebra.gms)


SET j /Corn,Wheat,Cotton/
i /Land ,Labor/;
PARAMETER c(j) /corn 109,
wheat 90,
cotton 115/
b(i) /land 100,
labor 500/;
TABLE a(i,j)
corn wheat cotton
land 1 1 1
labor 6 4 8;
POSITIVE VARIABLES x(j);
VARIABLES PROFIT;
EQUATIONS OBJective , constraint(i);
OBJective.. PROFIT=E= SUM(J,c(J)*x(J));
constraint(i).. SUM(J,a(i,J) *x(J)) =L= b(i);
MODEL RESALLOC /ALL/;
SOLVE RESALLOC USING LP MAXIMIZING PROFIT;

Замечание : GAMS не особенно почуствует разницу в этих двух разных


интерпретациях. Зато во второй можно легко увеличивать число уравнений (тем
более, что есть возможность чтения из внешнего файла).

23
Обозначение индексов (SET)

Выше мы использовали индексы i и j для связи переменных уравнения с


таблицей данных.
В GAMS индексы обозначаются как SET.
Объявление SET состоит из имени множества и списка элементов,
содержащихся в нем.

Основной формат объявления:


SET <имя множества> commentary to this set
/ <имя элемента 1> <определяющий текст>
<имя элемента 2> <определяющий текст>
... /;
Примеры :
SET j /x1,x2,x3/
i /r1 ,r2/;
SET PROCESS PRODUCTION PROCESSES /X1,X2,X3/;
SET commodities Crop commodities
/corn in bushels,
wheat in metric tons,
milk in hundred pounds/ ;

24
 Ввод данных

Выше нам необходимо задать данные для c(j), a(i,j), b(i). Существует три
способа ввода данных. Они представлены ключевыми словами :
PARAMETER, SCALAR и TABLE.

SCALAR используется для ввода одиночных значений, никак не


связанных с множествами.
Синтаксис :
scalar
Имя1 комментарии к первому /числовое значение /
Имя2 комментарии ко второму /числовое значение/
... ;

Примерчики использования :
scalar dataitem /100/;
scalar landonfarm total arable acres /100/;
scalars landonfarm /100/
pricecorn 1992 corn price per bushel /2.20/;

25
оператор PARAMETER

Parameter используется для задания элементов связанных с множествами.


В основном используются, когда данные представлены в одномерном массиве
(векторе), хотя возможна и многомерность.

Основной формат :
Parameter <имя>(<имя множества SET>) <комментарии>
/ <имя 1 эл-та множества> <его значение>,
<имя 2 эл-та множества> <его значение>,
........................................... /;

Примеры:
PARAMETER c(j) /x1 3.0,
x2 2.0,
x3 0.5/
b(i) /r1 10,
r2 3/;
PARAMETER
PRICE(PROCESS) PRODUCT PRICES
/X1 3,
X2 2,
X3 0.5/;
RESORAVAIL(RESOURCE) RESOURCE AVAILABLITY
/CONSTRAIN1 10 ,
CONSTRAIN2 3/;
Parameter multidim(i,j,k) three dimensional
/i1.j1.k1 100,
i2.j1.k20 /;

26
Ввод данных через TABLE

TABLE используется для ввода элементов, которые зависят от двух или


более множеств.

Основной формат представления :


Table <имя таблицы>(set1, set2 ... ) <комментарии>
set_2_элемент_1 set_2_ элемент _2
set_1_ элемент _1 значение_11 значение _12
set_1_ элемент _2 значение _21 значение _22;

Примеры :
TABLE a(i,j)
corn wheat cotton
land 1 1 1
labor 6 4 8;

TABLE RESOURUSE(RESOURCE,PROCESS) RESOURCE USAGE


Makechair Maketable Makelamp
plantcap 3 2 1.1
salecotrct 1 1;

Table fivedim(i,j,k,l,m) fivedimensional


l1.m1 l2.m2
i1.j1.k2 11 13
i2.j1.k11 6 -3
+ i3.m1 i2.m7
i1.j1.k2 1 3
i10.j1.k4 7 9;

Помните - положение элемента имеет значение!

27
Плохое моделирование (simple.gms)

VARIABLES Z;
POSITIVE VARIABLES Xcorn , Xwheat , Xcotton;
EQUATIONS OBJ, land , labor;
OBJ.. Z =E= 109 * Xcorn + 90 * Xwheat + 115 * Xcotton;
land.. Xcorn + Xwheat + Xcotton =L= 100;
labor.. 6*Xcorn + 4 * Xwheat + 8 * Xcotton =L= 500;
MODEL PROBLEM /ALL/;
SOLVE PROBLEM USING LP MAXIMIZING Z;

GAMS позволяет использовать имена для переменных, уравнений и др.


структурных до десяти символов. Структурные элементы также могут иметь
объясняющие комментарии, прикрепленные к ним.
GAMS также позволяет работать с распространенными алгебраическими
структурами. Пример выше не учитывает ничего и это действительно плохой
код для GAMS, поэтому рассмотрим улучшенный пример.

28
Улучшение модели – улучшенные имена (resalloc.gms)

SET PROCESS PRODUCTION PROCESSES


/makechair chair manufacture(X1),
maketable table manufacture(X2),
makelamp lamp manufacture(X3)/
RESOURCE TYPES OF RESOURCES
/plantcap Plant Capacity (CONSTRAIN1)
salecontrct Sales agreement limiting production
(CONSTRAIN2)/;
PARAMETER PRICE(PROCESS) PRODUCT PRICES BY PROCESS
/makechair 6.5, maketable 3, makelamp 0.5/
Yield(process) yields per unit of the process
/makechair 2, maketable 6, makelamp 3/
PRODCOST(PROCESS) COST BY PROCESS
/Makechair 10 ,Maketable 6, Makelamp 1/

TABLE RESOURUSE(RESOURCE,PROCESS) RESOURCE USAGE


Makechair Maketable Makelamp
plantcap 3 2 1
salecontrct 1 -1;

POSITIVE VARIABLES
PRODUCTION(PROCESS) ITEMS PRODUCED BY PROCESS;
VARIABLES PROFIT TOTALPROFIT;
EQUATIONS OBJT OBJECTIVE FUNCTION ( PROFIT )
AVAILABLE(RESOURCE) RESOURCES AVAILABLE ;
OBJT..
PROFIT =E= SUM(PROCESS,(PRICE(PROCESS)*yield(process)-
PRODCOST(PROCESS))*PRODUCTION(PROCESS));
AVAILABLE(RESOURCE)..
SUM(PROCESS,RESOURUSE(RESOURCE,PROCESS)*
PRODUCTION(PROCESS)) =L= RESORAVAIL(RESOURCE);

MODEL RESALLOC /ALL/;


SOLVE RESALLOC USING LP MAXIMIZING PROFIT;

29
Вычисление данных – в модели

PARAMETER
PRICE(PROCESS) PRODUCT PRICES BY PROCESS
/makechair 6.5, maketable 3, makelamp 0.5/
Yield(process) yields per unit of the process
/Makechair 2, maketable 6, makelamp 3/
PRODCOST(PROCESS) COST BY PROCESS
/Makechair 10 ,Maketable 6, Makelamp 1/
OBJT.. PROFIT=E=
SUM(PROCESS,(PRICE(PROCESS)*yield(process) -
PRODCOST(PROCESS))*PRODUCTION(PROCESS));

Уравнения задаются через две точки после имени. Вычисления


происходят каждый раз, когда происходит обработка строк:

SOLVE RESALLOC USING LP MAXIMIZING PROFIT;


price(“makechair”)=8;
SOLVE RESALLOC USING LP MAXIMIZING PROFIT;

При вначале в этой модели уравнения решаются с оригинальным


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

30
Вычисление данных – в коде

Данные вводятся не только как константы. Также данные могут быть


вычислены или изменены другими путями.
Пример (trnsport.gms)

Table distance(Source,Destinaton) dist in 1000 miles


new-york chicago topeka
seattle 2.5 1.7 1.8
san-diego 2.5 1.8 1.4;

Scalar prmilecst freight cost in $ per case per 1000


miles /90/
loadcost freight loading cost in $ per case /25/;
Parameter trancost(Source,Destinaton) transport cost in
dollars per case ;
trancost(Source,Destinaton) =
loadcost + prmilecst * distance(Source,Destinaton);
Costsum .. totalcost =e=
sum((Source,Destinaton), trancost(Source,Destinaton)*
transport(Source,Destinaton));

Т.о. GAMS позволяет управлять данными. Отслеживайте динамические и


нединамические вычисления. Вычисления в прошлом примере выполняются
только однажды. Вычисления в уравнениях модели выполняются каждый раз
при повторном решении.

31
Отображение вычисленных данных

GAMS позволяет выводить массивы данных


Основной формат : display <имя элемента>;

Пример (trnsport.gms)
Введи :
display trancost;
В результате в trnsport.LST файле добавится:

---- 24 PARAMETER TRANCOST transport cost in dollars


per case

New York Chicago Topeka


Seattle 250.000 178.000 187.000
San Diego 250.000 187.000 151.000

Вы также можете контролировать точность при выводе

option decimals=0;
display trancost;

Что приведет к следующим изменениям:

---- 26 PARAMETER TRANCOST transport cost in dollars


per case

New York Chicago Topeka


Seattle 250 178 187
San Diego 250 187 151

32
Установка на компьютер и запуск GAMS IDE

Рисунок «Начало установки»

1. Запускаем файл для установки : setup_gams.exe


2. Выбор места установки (желательно отсутствие русских букв в пути)
3. Выбираем Full installation (установка всего что есть ~126 Мб)
4. Можно поменять имя, которое будет отображаться списке программ на
кнопке «пуск»
5. Оставляем галочку – создание ярлыка на рабочем столе
6. Проверяем информацию по установке и нажимаем Install
7. Ждем копирования файлов
8. На вопрос : Хотите ли вы скопировать файл лицензии? Отвечаем
отрицательно.
9. Нажимаем Finish

Использование GAMS IDE

Рисунок «Ярлык gamside»

План действий:
1. Установка на компьютер
2. Запуск программы
3. Открытие существующего или создание нового проекта
4. Запуск проекта кнопкой Run GAMS (F9)
Посмотреть LST-файл
33
Поиск текста

В IDE существует возможность поиска или замены текста. Можно


использовать как диалог так и поле ввода сверху.

Рисунок «Поиск в GAMS»

Наберите цель вашего поиска (в том месте, где набрано “target” на


рисунке выше)

Нажмите для поиска в текущем файле

Нажмите для поиска в директории, где лежит ваш проект.


Также можно использовать поиска и замену через дополнительное окно с
дополнительными опциями

Рисунок «Окно расширенного поиска»

34