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

Бинарные целые переменные

Функции импорта файлов | Вероятностные функции | Другие функции | Пример для Windows | Доступ к элементам множества — функция @FOR | Использование других функций поэлементной обработки множеств с условиями | Плотное производное множество: TRAN.LNG | Разреженное производное множество — пример 2 | Условие принадлежности элементов множеству — Пример 1 | Условие принадлежности элементов множеству — Пример 2 |


Читайте также:
  1. Double x1, mas[5], p1; //здесь объявлены вещественные переменные x1, p1
  2. Internal variables (переменные) of consumer behavior
  3. Арифметические переменные
  4. Бинарные деревья.
  5. Бинарные оппозиции К. Леви-Строса
  6. Глава 4. Простые (линейные) программы. Операторы ввода-вывода. Переменные величины

 

Бинарная целая переменная — называемая также переменной 0/1 — является частным случаем целочисленной переменной, значениями которой могут быть только 0 или 1. Она часто используются как индикатор для включения или исключения некоторого количества.

Ниже приведен пример задачи о производстве нескольких изделий из некоторых составляющих, в которой 0/1-переменная используется именно таким образом. Вы являетесь менеджером по производству предприятия со сложной схемой производства. Ваша новейшая модель METEOR приносит наибольшую прибыль на единицу изделия по сравнению с любой другой производимой вами моделью и наименьшими затратами по ее наладке. Может быть вам ничего другого и не надо производить … или все же надо?

Эта модель имеется в поддиректории «Samples» под именем PRODMIX.LNG. Как и раньше, мы сначала покажем всю модель, и после того, как вы с ней ознакомитесь, вернемся к началу и объясним ее.


 

PRODMIX.LNG

MODEL:

1]SETS:

2] PRODUCT/ROCKET,METEOR,STREAK,COMET,JET,BIPLANE /

3]: PROFIT,QTY,SETUP,BUILD;

4] RESOURCES/STEEL,COPPER,PLASTIC,RUBBER,GLASS,PAINT/

5]: AVAIL;

6] RXP(RESOURCES, PRODUCT): USAGE;

7]ENDSETS

8]

9][MAX] MAX = @SUM(PRODUCT(I):

10] PROFIT(I) * QTY(I) - SETUP(I) * BUILD(I));

11]@FOR(RESOURCES(I):

12] @SUM(PRODUCT(J):USAGE(I,J)*QTY(J))<=AVAIL(I));

13]

14]@FOR(PRODUCT(I):

15] QTY(I) <= 1000 * BUILD(I);

16] @BIN(BUILD(I));

17] @GIN(QTY(I)));

18]

19]DATA:

20]! ROCKET METEOR STREAK COMET JET BIPLANE;

21]

22]PROFIT= 30 45 24 26 24 30;

23] SETUP= 35 20 60 70 75 30;

24]

25]AVAIL =!STEEL; 800

26]!COPPER; 1160

27]!PLASTIC; 1780

28]!RUBBER; 1050

29]!GLASS; 1360

30]!PAINT; 1240;

31]

32]USAGE =!STEEL; 1 4 0 4 2 0

33]!COPPER; 4 5 3 0 1 0

34]!PLASTIC; 0 3 8 0 1 0

35]!RUBBER; 2 0 1 2 1 5

36]!GLASS; 2 4 2 2 2 4

37] PAINT; 1 4 1 4 3 4;

38]

39]ENDDATA

END

Многое вам к этому моменту уже знакомо. В секции SETS нет ничего нового, но обратите внимание, что в множестве, названном PRODUCT (изделия), имеется атрибут с именем BUILD. Он введен как переменная типа «0/1-индикатор», иногда называемая «переключателем», то есть DUILD(I), будет равно 1, если продукт производится, и 0 — если нет.

В целевой функции сообщается системе LINGO, что необходимо минимизировать сумму произведений PROFIT (прибыль единицы изделия) на количество QTY произведенных изделий для каждого PRODUCT за вычетом начальных затрат SETUP, умноженных на переменную BUILD. Безусловно, если переменная BUILD равна нулю (изделие не производится), то начальные затраты SETUP должны быть исключены:


[MAX] MAX = @SUM(PRODUCT(I):

PROFIT(I) * QTY(I) - SETUP(I) * BUILD(I));

 

В следующем операторе ограничения требуется, чтобы сумма используемых (USAGE) для каждого элемента ресурсов (RESOURCES), умноженных на количество QTY каждого из производимых PRODUCT, была меньше или равна наличного запаса (AVAILability) этого ресурса:

@FOR(RESOURCES(I):

@SUM(PRODUCT(J): USAGE(I, J) * QTY(J)) <= AVAIL(I));

Теперь посмотрим на ограничение, которое обязывает переменную BUILD принимать значения только 0 или 1:

 

@FOR(PRODUCT(I):

QTY(I) <= 1000 * BUILD(I);

@BIN(BUILD(I));

@GIN(QTY(I)));

Когда количество QTY производимого изделия PRODUCT не равно нулю, единственный способ, которым LINGO может удовлетворить ограничению, это положить BUILD также не равным нулю. Число 1000 выбрано потому, что оно соответствует максимально возможному количеству, которое может быть произведено. Точно также, когда количество QTY равно нулю, BUILD тоже будет установлено в ноль, поскольку коэффициент SETUP (первоначальные затраты) в целевой функции, на который умножается BUILD, отрицателен.

BUILD принудительно устанавливается либо в ноль, либо в единицу посредством:

@BIN(BUILD(I));

Последняя строка заставляет количество каждого из космических аппаратов быть целым. Как и в случае задачи составления штатного расписания, какая-то часть космического аппарата сама по себе ничего не стоит.

Заметим, что когда функции @BIN или @GIN находятся внутри скобок, принадлежащих оператору @FOR, то они применяются ко всем элементам множества PRODUCT.

Ниже приведена часть решения, демонстрирующая принцип, что «не следует быть чрезмерно жадным». Такой привлекательный и красивый Meteor исключен из списка, оказавшись просто пустым звуком.

 

VARIABLE VALUE REDUCED COST

QTY(ROCKET) 96.00000 -30.00000

QTY(METEOR).0000000 -45.00000

QTY(STREAK) 195.0000 -24.00000

QTY(COMET).0000000 -26.00000

QTY(JET) 191.0000 -24.00000

QTY(BIPLANE) 94.00000 -30.00000

BUILD(ROCKET) 1.000000 35.00000

BUILD(METEOR).0000000 20.00000

BUILD(STREAK) 1.000000 60.00000

BUILD(COMET).0000000 70.00000

BUILD(JET) 1.000000 75.00000

BUILD(BIPLANE) 1.000000 30.00000

ROW SLACK OR SURPLUS DUAL PRICE

MAX 14764.00 1.000000


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


<== предыдущая страница | следующая страница ==>
Обобщенные целочисленные переменные| Освобожденные» переменные и простые границы

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