Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Использование других функций поэлементной обработки множеств с условиями

Создание источника пользовательских данных | Экспортирование данных из LINGO | Закладка I N T E R F A C E | ЗАКЛАДКА GENERAL SOLVER | Закладка NONLINEAR SOLVER | ЗАКЛАДКА INTEGER SOLVER | Функции импорта файлов | Вероятностные функции | Другие функции | Пример для Windows |


Читайте также:
  1. a) Использование Past Indefinite является обязательным с глаголами, которые
  2. a. Дисметаболические и токсико-метаболические нарушения функций ЦНС
  3. DXM в других субкультурах
  4. F65.6 Множественные расстройства сексуального предпочтения
  5. I. В каждом ряду определите слово, отличающееся от других слов по смысловому признаку.
  6. I. ИСПОЛЬЗОВАНИЕ КРИСТАЛЛОВ
  7. II. Самостоятельная работа (повторение) по вопросам темы № 11 «Множественность преступлений».

Функциями поэлементной обработки множеств (ФПЭМ) являются @FOR, @SUM, @MIN и @ MAX. Синтаксис всех этих функций следующий:

 

ФПЭМ(множество (список индексов) | квалификатор_условия: выражение);

 

… где и список_индексов и квалификтор_условия являются не обязательными. Важно помнить, что вы можете использовать в выражении имя множества и имена атрибутов, любые другие переменные или любые операции, выполняемые над ними. Напрример,

 

@SUM(WIDGETS: VALUE);

 

вернет выражение для суммы атрибутов VALUE для всех элементов множества WIDGETS. Функция @MIN с теми же аргументами вернет наименьшее значение VALUE среди элементов множества WIDGETS, а функция @MAX с теми же аргументами вернет наибольшее значение.

Так же, как и @FOR, все остальные функции поэлементной обработки множеств могут использовать условные выражения.

Нижеприведенная модель планирования расписания на следующей странице иллюстрирует использование условных выражений в функции @SUM. В этой задаче требуется присутствие на работе определенное количество людей в каждый из дней недели. Каждый служащий работает в течение пяти последовательных дней. Решение задачи должно дать нам количество людей, начинающих работу в каждый из дней недели (количество нанимаемых в этот день рабочих), чтобы удовлетворить недельную потребность при минимальных затратах.

В задаче количество служащих, необходимых для обеспечения работы в каждый из дней, хранится в атрибуте NEED. Результат будет помещен в атрибут START. Каждый элемент NEED и START соответствует дням недели. Неделя начинается с Monday (понедельник) и заканчивается в Sunday (воскресенье).


MODEL:

1]! задача планирования расписания:

2] каждый сотрудник занят пять последовательных дней и свободен два дня. Матрица коэффициентов этого ограничения:

4] 1 1 1 1 1

5] 1 1 1 1 1

6] 1 1 1 1 1

7] 1 1 1 1 1

8] 1 1 1 1 1

9] 1 1 1 1 1

10] 1 1 1 1 1

11] эта матрица используется в операторах с условиями

12] в строках 22 - 27;

13] SETS:

14] DAYS / MON, TUE, WED, THU, FRI, SAT, SUN/:

15] NEED, START;

16] ENDSETS

17]

18]! Целевая функция;

19] MIN = @SUM(DAYS: START);

20]

21]! Ограничения;

22] @FOR(DAYS(I):

23]! Сумма по всем сотрудника, начинающий в J – й день,

24] которые работают в день I;

25] @SUM(DAYS(J) |

26] (J #GT# I+2) #OR# (J #LE# I #AND# J #GT# I-5):

27] START(J)) >= NEED(I););

28]

29] DATA:

30] NEED = 18, 16, 15, 16, 19, 14, 12;

31] ENDDATA

END

Строки 22–27 устанавливают ограничения: в каждый из дней, сумма сотрудников, работающих в этот день, должна быть больше или равна (напомним, что оператор >= в LINGO означает больше или равно) необходимого в этот день количества работников. Условие

 

(J #GT# I+2) #OR# (J #LE# I #AND# J #GT# I-5)

 

… используется в функции @SUM таким образом, что мы не принимаем в расчет два дня, в течение которых каждый сотрудник отдыхает.


Решение приведено ниже:

 

OPTIMUM FOUND AT STEP 7

SOLUTION OBJECTIVE VALUE = 22.0000000

 

VARIABLE VALUE REDUCED COST

NEED(MON) 18.00000.0000000

NEED(TUE) 16.00000.0000000

NEED(WED) 15.00000.0000000

NEED(THU) 16.00000.0000000

NEED(FRI) 19.00000.0000000

NEED(SAT) 14.00000.0000000

NEED(SUN) 12.00000.0000000

START(MON) 8.000000.0000000

START(TUE) 2.000000.0000000

START(WED) 2.000000.0000000

START(THU) 4.000000.0000000

START(FRI) 3.000000.0000000

START(SAT) 3.000000.0000000

START(SUN).0000000.0000000

ROW SLACK OR SURPLUS DUAL PRICE

1 22.00000 1.000000

2.0000000 -.2000000

3.0000000 -.2000000

4.0000000 -.2000000

5.0000000 -.2000000

6.0000000 -.2000000

7.0000000 -.2000000

8.0000000 -.2000000

 

В соответствии со значением целевой функции, приведенным в верхней части отчета, следует нанять 22 сотрудника. Результат, размещенный в атрибуте START, говорит о том, что для этого решения в понедельник (MON) должны начать работу 8 сотрудников, во вторник (TUE) — 2 и т.д. Поскольку каждый сотрудник работает следующие пять (включая день начала работы), требование, записанное в атрибуте NEED (потребность), выполняется. Например, атрибут NEED определяет, что в пятницу (Friday) требуется 19 сотрудников. Их действительно будет 19, составляя сумму из тех, кто начал работу в понедельник, вторник, среду и четверг. Можете проверить это условие для каждого из дней недели.

Дальнейшее описание функций поэлементной обработки множеств можно найти в главе 7 «Функции LINGO».


Дата добавления: 2015-11-16; просмотров: 50 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Доступ к элементам множества — функция @FOR| Плотное производное множество: TRAN.LNG

mybiblioteka.su - 2015-2024 год. (0.008 сек.)