bg051po001-3.3.04/40: „Изграждане · изследователи по...

16
Проект BG051PO001-3.3.04/40: „Изграждане на висококвалифицирани млади изследователи по съвременни информационни технологии за оптимизация, разпознаване на образи и подпомагане вземането на решенияПроектът се осъществява с финансовата подкрепа на Европейски Социален Фонд (2007-2013) и Република България - Министерство на образованието, младежта и науката по оперативна програма "Развитие на човешките ресурси" в направление Подкрепа за развитието на докторанти, пост-докторанти, специализанти и млади учениЛекция на тема: СПЕЦИФИЧНИ ОСОБЕНОСТИ ПРИ ФОРМУЛИРАНЕТО И РЕШАВАНЕТО НА ОПТИМИЗАЦИОННИ ЗАДАЧИ В СРЕДАТА НА LINGO 12.0” ст.н.с. II ст. д-р Даниела Борисова Институт по информационни технологии БАН 14.04.2010 г. София

Upload: others

Post on 18-Oct-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

Проект BG051PO001-3.3.04/40: „Изграждане на висококвалифицирани млади изследователи по съвременни информационни технологии за оптимизация,

разпознаване на образи и подпомагане вземането на решения”

Проектът се осъществява с финансовата подкрепа на Европейски Социален Фонд (2007-2013) и

Република България - Министерство на образованието, младежта и науката по оперативна програма "Развитие на човешките ресурси"

в направление “Подкрепа за развитието на докторанти, пост-докторанти, специализанти и млади учени”

Лекция на тема:

“СПЕЦИФИЧНИ ОСОБЕНОСТИ ПРИ ФОРМУЛИРАНЕТО И

РЕШАВАНЕТО НА ОПТИМИЗАЦИОННИ ЗАДАЧИ В СРЕДАТА НА

LINGO 12.0”

ст.н.с. II ст. д-р Даниела Борисова

Институт по информационни технологии – БАН

14.04.2010 г. София

Page 2: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

2

СПЕЦИФИЧНИ ОСОБЕНОСТИ ПРИ ФОРМУЛИРАНЕТО И РЕШАВАНЕТО

НА ОПТИМИЗАЦИОННИ ЗАДАЧИ В СРЕДАТА НА LINGO 12.0

ст.н.с. д-р Даниела Борисова – ИИТ-БАН

Фирмата LINDO Systems определя стандартите в оптимизационния софтуер в

продължение на повече от 21 години и е лидер в областта на софтуера за

математическа оптимизация. Тя предлага: LINGO (Linear, Integer, Nonlinear, Global

Optimization), What'sBest и LINGO API. Според Fortune 500, половината от фирмите

в тази класация използват продуктите на LINDO, като от първите 25, 23 използват

продуктите на LINDO.

LINGO е софтуерен инструмент, създаден за ефективно изграждане и

решаване на линейни, нелинейни и цeлочислени математически оптимизационни

модели.

В настоящата лекция ще бъдат разгледани основните моменти при

формулиране на математически модел в средата на LINGO – типове променливи,

оператори и функции в LINGO, задаване на целева функция, променливи и

ограничания, а вместо заключение – примерни модели на оптимизационни задачи

във формата на LINGO.

Типове променливи в LINGO

Всички променливи в LINGO модела се смятат за неотрицателни и непрекъснати,

освен ако не е посочено друго. Четири типа променливи могат да се използват за

описване на променливите:

• @GIN – положителна стойност, цяло число

• @BIN – двоична стойност (т.e. 0 или 1)

• @FREE – положителни или отрицателни реалната стойност

• @BND – стойност в рамките на определени граници

Общата форма за деклариране на променлива х използвайки някоя от тези

функции е @FUNCTION(X).

За деклариране на долна и горна граници на променливите синтаксиса на

@BND се задава чрез @BND(lowerBound, X, upperBound);

Page 3: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

3

Интерфейс на LINGO

Операциите в LINGO могат да се извършват чрез команди от менюта, от лентите с

инструменти, или чрез комбинации от клавиши. В основния прозорец на LINGO

има 5 менюта: File, Edit, LINGO, Window и Help меню.

File менюто съдържа следния списък от команди и съответни функционални

клавиши:

New (F2) отваря нов прозорец

Open (F3) отваряне на записан файл

Save (F4) запис на текущия модел

Save As (F5) запис на текущия модел в нов файл

Close (F6) затваряне на текущия модел

Print (F7) печат на съдържанието на текущия прозорец

Print Setup (F8) конфигуриране на принтер

Print Preview (Shift+F8) покозва съдържанието на текущия прозорец как би се отпечатало

Log Output (F9) отваряне на лог файл

Take Commands (F11) стартиране на скрипт, съдържащ са във файл

Import LINDO File (F12) конвертира LINDO файл в LINGO модел

Export File експортира модела в MPS или MPI формат

License дава възможност за лицензиране или обновяване на софтуера

Database User Info задава идентификация и парола за достъп до базиданни чрез функцията @ODBC()

Exit (F10) изход от програмата LINGO

Менюто Edit съдържа старндартни команди, идентични с други програми.

Page 4: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

4

Менюто LINGO съдържа следните команди:

Solve (ctrl+s) решаване на модела

Solution (ctrl+o) показва solution report прозореца за текущия модел

Range (ctrl+r) прави анализ на съдържанието на текущия прозорец

Options (ctrl+i) задаване настройки на софтуера

Generate генерира алгебрична форма на модела

Picture (ctrl+k) показва в графичен вид матрицата на модела

Debug (ctrl+d) проверка за грешки само за недопустими и неограничени модели

Model Statistics (ctrl+e) показва технически детайли на модела

Look (ctrl+l) показва formulation report на задачата в нов прозорец

Менюто Window съдържа старндартни команди, идентични с други програми.

Менюто Help съдържа следните команди:

Help Topics отваряне ръководството на LINGO

Register регистриране на версията на LINGO

AutoUpdate осъществява актуализация на софтуера

About LINGO показва информация за софтуера

Лентата с инструменти, разположена в горната част на основния LINGO

прозорец, съдържа много от същите команди, изброени по-горе. Тези команди

могат да бъдат достъпни само чрез използване на мишката, чрез кликане върху

иконата. Иконите и съответните команди, на които отговарят са показани както

следва.

Page 5: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

5

ОПЕРАТОРИ И ФУНКЦИИ В LINGO

LINGO предоставя широк спектър от оператори и функции, което го направи

полезен инструмент за решаване на проблеми. Някои от основните оператори и

функции саописани по-долу. Има три вида оператори, които LINGO използва:

аритметични, логични и релационни оператори.

Аритметични оператори:

• степенуване: ^

• умножение: *

• деление: /

• събиране: +

• изваждане: -

Логическите оператори се използват в определени функции, за определяне

верни/неверно условия:

#LT# TRUE ако левия аргумент е точно < от десния, ако не е - FALSE,

#LE# TRUE ако левия аргумент е ≤ от десния, ако не е - FALSE,

#GT# TRUE ако левия аргумент е точно > от десния, ако не е - FALSE,

#GE# TRUE ако левия аргумент е ≥ от десния, ако не е - FALSE,

Page 6: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

6

#EQ# TRUE ако и двата аргументи са равни, ако не са - FALSE,

#NE# TRUE ако и двата аргументи не са равни, ако са - FALSE,

#AND# TRUE ако и двата аргументи са TRUE, ако не са - FALSE,

#OR# FALSE ако и двата аргумента са FALSE, ако не са - TRUE,

#NOT# TRUE ако десния аргумент е FALSE, ако не е - FALSE.

LINGO използва 1 за TRUE и 0 за FALSE.

Релационните оператори се използват при определяне на ограниченията на

модела, както следва:

• равно: =

• по-малко или равно: <

• по-малко или равно: >

Няма строго по-малко (<) или строго по-голямо (>). Възможното представяне е

A + < B. От дългогодишния опит на фирамата са установили, че всеки добре

формулиран модел позволява всяко строго неравенство да бъде трансформилано в

по-малко или равно, респективно по-голямо или равно.

Списък с извадка на математически функции, които могат да бъдат

използвани в LINGO:

@ABS(X) – абсолютна стойност на X

@SIGN(X) – (-1) ако X е отрицателно и (+1) ако X е положително

@EXP(X) – изчислява eх

@LOG(X) – изчислява натурален логаритъм от X

@LOG10(X) – изчислява десетичен логаритъм от X

@SQRT(X) – корен квадратен от Х

@SIN(X) – синус от X, където X е в радиани

@COS(X) – косинус X

@TAN(X) – тангенс от X

LINGO съдържа и множество финансови, вероятностни и вход/изходни

функции. Те се използват обикновено в по-сложни модели, които са извън обхвата

на настоящата лекция.

Page 7: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

7

Създаване на LINGO модел

Всеки оптимизационен модел се състои от три части:

• целева функция – това е единствена формула, която описва точно това,

което модела трябва да оптимизира. За производството например, една

целева функция би могла да бъде минимизиране времето на производството

на даден продукт.

• променливи – това са количествата, които могат да бъдат променени за

достигане на оптимална стойност на целевата функция.

• ограничения – това са формулите, които определят количествените връзки,

параметрите на решението и изходните резултати, използвани като

индикатор за ефективността на решението, както и границите на стойностите

на променливите.

Правилно формулираната оптимизационна задача е половината от нейното

решаване. Нека разгледаме един прост модел за производството на два вида

бисквити може да се опише в средата на LINGO както следва:

model:

! Малка фирма за бисквити произвежда 2 вида - обикновени и декорирани бисквити, които се продават за $1 и $1,50 всяка съответно. Двама работници работят по 8 часа на ден и могат да произвеждат до 400 обикновени бисквити и 200 декорирани бисквитки. Времето за произвеждане на 1 обикновена бистквита е 1 минута, а за декорирана 3 минути. Каква комбинация от произвежданите два вида бисквити ще доведе до увеличаване на печалбата?; [obj] MAX = 1*Obiknoveni + 1.5*Decorirani; Obiknoveni < 400; Decorirani < 200; @gin(Obiknoveni); @gin(Decorirani); 1/60* Obiknoveni + 3/60* Decorirani <16; END

Моделът започва с ключовата дума „model:”, а за целевата функция се

използва ключовата дума [obj]. Командата END казва на LINGO, че въвеждането на

модела завършило. След като въведете командата END модела е готов да бъде

решен. Няколко други коментари, които трябва да се направят за този модел:

• Коментарите в модела се означават с удивителен знак (!) в началото на реда и

се визуализират в зелен цвят.

• Специфичните оператори и функции на LINGO се появяват в син цвят.

• Останалия текст се показва в черно.

Page 8: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

8

• Всеки запис в LINGO трябва да завърши с точка и запетая (;).

• За имена на променливите могат да се използват малки или главни букви и

трябва да започват с буква (A-Z). Други символи в името на променливата

могат да бъдат букви, цифри (0-9) или долно тире (_). Имената на

променливите могат да бъдат до 32 знака.

Решаване на LINGO модел

Веднъж въведен LINGO модела в LINGO Model прозореца може да бъде решаван

чрез активиране на бутона Solve от лентата за управление или чрез избиране LINGO

| Solve от менюто или чрез комбинацията от клавиши ctrl + s.

LINGO уведомява за всички възможни грешки. Подробна информация за

тези грешки може да се намери в менюто помощ – Error Messages. Прозорецът

LINGO Solver Status се появява след като не са намерени грешки.

Този прозорец дава информация за броя на нелинейните, целочислените и

общия брой променливи в модела; нелинейните и общия брой на ограниченията,

използвани в модела; броя на нелинейните и общия брой на ненулевите

коефициенти.

В прозореца Solver Status се дава информация за класифицирането на

модела (LP, QP, ILP, IQP, NLP, etc.), състоянието на текущото решение (local/global

optimum, feasible/infeasible, etc.), стойността на целта функция, допустимостта на

модела и броя итерации, необходими за решаване на модела, както е показано:

Page 9: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

9

Затраряйки Solver Status прозорецa на LINGO се показва Solution Report

прозореца.

Този прозорец показва стойността на всяка променлива, която води до оптималната

стойност на целевата функция.

Reduced cost за всяка променлива, която е включена в оптималното решение

винаги е равна на нула. За променливите, които не са включени в оптималното

решение, reduced cost показва колко може да се намали стойността на целевата

функция (за MAX проблем) или да се увеличи (за MIN проблем), ако една единица

от тази променлива бъде включена в решението. Например, в случай че reduced cost

на определена променлива е 5, то тогава оптималната стойност на MAX проблема

би намаляла с 5 единици, ако 1 единица на променливата се добави.

Slack or Surplus колона в Solution Report показва колко стегнато е

ограничението. Ако ограничението е напълно удовлетворено като равенство, то

slack/surplus е нула. Ако slack/surplus е позитивно – показва колко повече единици

от тази променлива може да бъде добавена преди ограничението да стане равенство.

Ако slack/surplus е отрицателно – ограничението е нарушено.

В Dual Price колоната се описва количеството до което стойността на

целевата функция може да увеличи, ако ограничението се увеличи с една единица.

Page 10: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

10

Модели в средата на LINGO 12.0

Пример 1: Фирма произвежда два вида бои – за вътрешно и за външно боядисване,

съдържащи два компонета М1 и М2. Основните данни за задачата са показани в

таблицата:

Разходи за 1 тон боя За външно

боядисване За вътрешно боядисване

Максимално възможен ежедневен разход на

компоненти Компонет K1 6 4 24 Компонет K2 1 2 6

Доход от 1 тон боя 5 4

Маркетинговия отдел на компанията е ограничил ежедневното производството

боята за въштершно боядисване до 2 т. и е поставил условие ежедневтото

производство на този вид боя да не надвишава производството на боя за външно

боядисване. Компанията би искала да се определи най-доброто съотношение на

между двата вида бои, така че да получи максимална печалба. Математичния

оптимизационен модел на тази задача в средата на LINGO 12.0 е:

model: [obj]max = 5*x1 + 4*x2; 6*x1 + 4*x2<24; x1 + 2*x2 <6; -x1 + x2 <1; x2<2; x1>0; x2>0; end

Пример 2: Автомобилен завод произвежда 3 модели автомобили, които преминават

последователно през 3 цеха. Мощностите на тези цехове са 300, 250 и 200

човекодни. В първия цех за монтажа на 1 автомобил от първия модел са

необходими 6 човекодни, за втория модел – 4, за третия модел – 2 човекодни. Във

втория цех са необходими 3, 4 и 5 човекодни, съответно, а в третия цех – по 3

човекодни за всеки модел. Печалбата на завода от продажбата на 1 автомобил от

всеки модел е съответно 15, 13 и 10 хиляди долара. Известно е, че всичките

произведени автомобили ще бъдат продадени. Какво трябва да бъде тяхното

оптимално производство?

Page 11: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

11

Решение: Нека означим с xi – количеството на произвежданите автомобили в

продължение на 1 декада (i=1,...n). В средата на LINGO задачата ще има вида:

model: [obj]max = 15*x1 + 13*x2 + 10*x3; 6*x1 + 4*x2 + 2*x3 <300; 3*x1 + 4*x2 + 5*x3 <250; 3*(x1+x2+x3)<200; @gin(x1); @gin(x2); @gin(x3); еnd

По аналогичен начин могат да се формулират различни оптимизационни модели,

отразяващи различни практически проблеми.

Литература:

1. LINDO Systems, http://www.lindo.com/

2. Linus Schrage, Optimization Modeling with LINGO, http://www.lindo.com/index.php?option=com_content&view=article&id=38&Itemid=24

3. Models Library, http://www.lindo.com/index.php?option=com_content&view=article&id=39&Itemid=25

Page 12: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

12

ПРИЛОЖЕНИЯ

1. ОПТИМИЗАЦИОНЕН МОДЕЛ -- Този модел определя ранкирането на Web-

страниците в Google, на базата на броя, свързани страници.

! Compute the Google Page rank of a set of connected pages; ! Keywords: Google, Page rank, World wide web; SETS: Page: x, deg; PXP( Page, Page); ENDSETS DATA: alpha = .95; ! 1-alpha = seed value for the page rank, e.g., every page has a rank of at least 1-alpha; ! The pages; Page = 1..10; ! The page i points to page j pairs; PXP= 1,10 2,6 3,10 4,5 5,3 6,1 6,3 6,4 7,2 8,2 9,7 10,9; ENDDATA SUBMODEL pagerank: ! Solve for the page rank. Page j has a high page rank if page i points to j, page i has a high page rank, and page i does not point to lots of pages; @FOR( Page(j): x(j) = (1-alpha) + alpha* @SUM(PXP(i,j)| i #NE# j: x(i)/deg(i)); ); ENDSUBMODEL CALC: ! Compute the outdegree, i.e., pages pointed to, of each page; @FOR( Page(i): deg(i) = 0); @FOR( PXP(i,j)| i #NE# j: deg(i) = deg(i) + 1; ); @SOLVE( pagerank); ! Optionally scale so ranks sum to a specified target, e.g. 1; CURSUM = @SUM( Page(i): x(i)); @FOR( Page(i): x(i) = x(i)/CURSUM ); ENDCALC

Page 13: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

13

2. ОПТИМИЗАЦИОНЕН МОДЕЛ -- Този модел определя разположението на

предавателни станции за мобилни телефони.

! Cell phone base station location model; ! Decide 1) Which locations should have a base transceiver station (BTS), 2) the coverage radius, or range, for each BTS. The coverage radius of a BTS can be controlled by the broadcasting power used at that BTS. Each BTS cannot have more demand assigned than its capacity. If DP j is within the range of BTS i, then j must be assigned to i. Similarly, if DP j is assigned to BTS i, then j must be within range of i.; ! Key words: Cell phone, Mobile phone, Network design, Facility location, Covering; SETS: BTS: ! Candidate base transceiver stations; CB, ! Cost of BTS i; R, ! Radius of standard coverage for station; Y; ! Y(i) = 1 if cell tower used at location i; DP: ! Demand points; DEM, ! Demand at point j, e.g., expected calls in progress; Z; ! Z(j) = 1, if j not assigned; BXD( BTS, DP): DIST, ! DIST(i,j) = distance from BTS i to DP j, e.g., in signal attenuation; X; ! X(i,j) = 1 if DP j assigned to BTS i. Could be assigned to more than 1; ENDSETS DATA: CAP = 125; ! Max demand that can be assigned to any cell, calls in progress; WNH = 10; ! Weight or cost on demand not handled; BTS = 1 2 3 4 5; ! The base stations (BTS); CB = 8 5 7 9 6; ! Cost of each; DP = 1 2 3 4 5 6 7 8 9 10 11 12; !Demand points (DP); DEM= 15 34 28 32 12 27 19 29 12 41 37 23; !Demand at each, expected calls in progress at any instant; DIST= ! Distance from each BTS to each DP. E.g., power needed at i to give acceptable signal at j; 0.781 0.781 1.616 2.571 0.640 0.640 1.552 2.532 1.487 1.487 2.052 2.865 1.456 1.523 2.126 2.953 0.566 0.721 1.649 2.631 0.721 0.849 1.709 2.668 1.942 1.253 1.170 1.780 1.603 0.608 0.412 1.404 1.836 1.082 0.985 1.664 2.550 1.581 0.707 0.707 2.550 1.581 0.707 0.707 2.915 2.121 1.581 1.581 2.953 2.126 1.523 1.456 2.631 1.649 0.721 0.566 2.668 1.709 0.849 0.721; ! Above data set corresponds to demand points being at the grid points of a (1..4) by (1..3) grid, with the 5 candidate BTS sites at (1.5, 1.6), (1.4, 2.4), (2.6, 2.1), (3.5, 1.5), (3.6, 2.4); ENDDATA SUBMODEL CHUZ_CELLS: ! Decision variables: Y(i) = 1 if a BTS is established at site i, else 0, X(i,j) = 1 if DP j is within the coverage range of i, else 0,

Page 14: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

14

R(i) = range or coverage radius of BTS at i, Z(j) = 1 if DP j is not within range of any BTS; ! Minimize weighted cost of the BTS installed and demand not handled; MIN = COSTBTS + WNH*SUMDNH; COSTBTS = @SUM( BTS(i): CB(i)*Y(i)); ! Cost of stations; SUMDNH = @SUM(DP(j): DEM(j)*Z(j)); ! Unassigned demand; ! Z(j) = 1 if DP j not in range of any BTS; @FOR( DP(j): Z( j) >= 1-@SUM( BXD(i,j): X(i,j)); ); ! Cannot assign too much demand to any BTS i. Any DP j within range of a BTS uses up capacity; @FOR( BTS(i): @SUM( BXD(i,j): DEM(j)*X(i,j)) <= CAP*Y(i); ); ! If BTS i not used, then radius must be 0; @FOR( BTS(i): R(i) <= RMAX*Y(i); @BIN( Y(i)); ); ! If DP j assigned to BTS i, then j must be within range of BTS i ; @FOR(BXD(i,j): R(i) >= DIST(i,j)*X(i,j); @BIN(X(i,j)); ); ! If DP j is within range BTS i, then j must be assigned to i; @FOR(BXD(i,j): R(i)- DIST(i,j) <= RMAX*X(i,j); ); ENDSUBMODEL CALC: ! Max radius one might need; RMAX = @MAX(BXD(i,j):DIST(i,j)); @SET('TERSEO', 2); ! Turn off default output; @SOLVE( CHUZ_CELLS); @WRITE(@NEWLINE(1),' Cell Network Design Report',@NEWLINE(1)); @WRITE( @FORMAT(COSTBTS, '12.2f'), '= Cost of cells, BTS.',@NEWLINE(1)); @WRITE( @FORMAT(WNH*SUMDNH, '12.2f'), '= Cost of demand points not covered.',@NEWLINE(1)); @WRITE(@NEWLINE(1),' Cell Radius',@NEWLINE(1)); @FOR( BTS(i) | Y(i) #GT# .5: @WRITE( @FORMAT(BTS(i),'10s'),' ', @FORMAT(R(i),'10.3f'), @NEWLINE(1)); ); @WRITE(@NEWLINE(1),' Cell to Demand Point Coverage',@NEWLINE(1)); @WRITE(' Cell Demand point covered',@NEWLINE(1)); @FOR( BXD(i,j) | X(i,j) #GT# .5: @WRITE( @FORMAT(BTS(i),'10s'),' ', @FORMAT(DP(j),'10s'), @NEWLINE(1)); ); ENDCALC

Page 15: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

15

3. ОПТИМИЗАЦИОНЕН МОДЕЛ -- Този модел цели да минимизира общата

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

MODEL:

! Quadratic assignment problem;

! Given transfers between flights/departments, and distance between gates/areas,

assign flights/depts to gates/areas to minimize total transfer cost;

! Keywords: Quadratic Assignment, Assignment, Layout Planning, Facility Layout;

SETS:

FLIGHT;

GATE;

GXG( GATE, GATE)| &1 #LT# &2: T; ! Inter gate times (symmetric);

FXF( FLIGHT, FLIGHT)| &1 #LT# &2: N; ! Transfers between flights;

FXG( FLIGHT, GATE): X; ! Flight to gate assignment variable;

ENDSETS

DATA:

! Assume number of flights/depts = number of gates/areas. If not add

dummy flights/depts to make it so;

FLIGHT = 1..6;

GATE = E3 E4 E5 F3 F4 F5; !Gates at terminal 2, O'Hare Airport;

T = 70 40 60 90 90 !Time/distance between gates/areas;

50 100 80 110

100 90 130

60 40

30;

N = 12 0 12 0 5 !No. units/people to transfer;

30 35 20 13 ! between flights/depts;

40 20 10

0 6

14;

ENDDATA

!--------------------------------------------------------;

! Warning: may be very slow for no. objects > 6;

SETS: ! Warning: this set gets big fast;

TGTG( FLIGHT, GATE, FLIGHT, GATE)| &1 #LT# &3: Y;

ENDSETS

! Variables:

X(b,j) = 1 if flight/dept b assigned to gate/area j,

Y(b,j,c,k) = 1 if X(b,j)*X(c,k) = 1;

! Min the cost of transfers * distance. Because only upper triangle of T is

stored, must break sum into 2 parts;

MIN = @SUM( TGTG( B, J, C, K)| J #LT# K: Y( B, J, C, K) * N( B, C) * T( J, K))

+ @SUM( TGTG( B, J, C, K)| J #GT# K: Y( B, J, C, K) * N( B, C) * T( K, J));

! Each flight, B, must be assigned to a gate;

@FOR( FLIGHT( B):

@SUM( GATE( J): X( B, J)) = 1; );

Page 16: BG051PO001-3.3.04/40: „Изграждане · изследователи по съвременни информационни технологии за оптимизация,

16

! Each gate, J, can receive at most one flight;

@FOR( GATE( J):

@SUM( FLIGHT( B): X( B, J)) = 1;

);

! Make the X's binary;

@FOR( FXG: @BIN( X););

! Force Y(B,J,C,K) = 1 if X(B,J) = 1 and X(C,K) = 1;

@FOR( FXG( C, K):

@FOR( GATE( J)| J #NE# K:

! If C is assigned to K, some B must be assigned to J...;

X( C, K) = @SUM( TGTG( B, J, C, K)| B #NE# C : Y( B, J, C, K))

+ @SUM( TGTG( C, K, B, J)| B #NE# C : Y( C, K, B, J)); );

@FOR( FLIGHT( B)| B #NE# C:

! and B must be assigned to some J;

X( C, K) = @SUM( TGTG( B, J, C, K)| J #NE# K : Y( B, J, C, K))

+ @SUM( TGTG( C, K, B, J)| J #NE# K : Y( C, K, B, J)); );

);

END

4. ОПТИМИЗАЦИОНЕН МОДЕЛ -- Този модел разглежда техника за преглед

и оценка на програми, PERT – Program Evaluation and Review Technique, т.е. техника за определяне на график в управлението на проекти.

MODEL:

SETS:

TASKS: TIME, ES, LS, SLACK;

PRED( TASKS, TASKS);

ENDSETS

DATA:

TASKS = @ODBC( 'PERTODBC', 'TASKS', 'TASKS');

PRED = @ODBC( 'PERTODBC', 'PRECEDENCE', 'BEFORE', 'AFTER');

TIME = @ODBC( 'PERTODBC');

@ODBC( 'PERTODBC', 'SOLUTION', 'TASKS','EARLIEST START', 'LATEST START')

= TASKS, ES, LS;

ENDDATA

@FOR( TASKS( J)| J #GT# 1: ES( J) = @MAX( PRED( I, J): ES( I) + TIME( I)));

@FOR( TASKS( I)| I #LT# LTASK: LS( I)=@MIN( PRED( I, J): LS( J) - TIME( I)); );

@FOR( TASKS( I): SLACK( I) = LS( I) - ES( I));

ES( 1) = 0;

LTASK = @SIZE( TASKS);

LS( LTASK) = ES( LTASK);

END