В основі комбінаторних методів є перебір можливих варіантів розв’язків поставленої задачі. Кожен з них характеризується певною послідовністю перебору варіантів та правилами виключення, що дають змогу ще в процесі розв’язування задачі виявити неоптимальні варіанти без попередньої їх перевірки. Відносна ефективність різних методів залежить від того, наскільки кожен з них уможливлює скорочення необхідного процесу перебору варіантів у результаті застосування правила виключення.
Розглянемо один із комбінаторних методів. Для розв’язування задач цілочислового програмування ефективнішим за метод Гоморі є метод гілок і меж. Спочатку, як і в разі методу Гоморі, симплексним методом розв’язується послаблена (без умов цілочисловості) задача. Потім вводиться правило перебору.
Нехай потрібно знайти хj – цілочислову змінну, значення якої хj=
в оптимальному плані послабленої задачі є дробовим. Очевидно, що в деякому околі даної точки також не існує цілочислових значень, тому відповідний проміжок можна виключити з множини допустимих планів задачі в подальшому розгляді. Таким проміжком є інтервал між найближчими до
цілочисловими значеннями. Можна стверджувати, що на інтервалі
цілих значень немає.
Наприклад, якщо
=2,7 дістаємо інтервал
, де, очевидно, немає хj, яке набуває цілого значення і оптимальний розв’язок буде знаходитися або в інтервалі
, або
. Виключення проміжку
з множини допустимих планів здійснюється введенням до системи обмежень початкової задачі додаткових нерівностей. Тобто допустиме ціле значення xj має задовольняти одну з нерівностей виду:
або
.
Дописавши кожну з цих умов до задачі з послабленими обмеженнями, дістанемо дві, не пов’язані між собою, задачі. Тобто, початкову задачу цілочислового програмування (6.1)-(6.4) поділимо на дві задачі з урахуванням умов цілочисловості змінних, значення яких в оптимальному плані послабленої задачі є дробовими. Це означає, що симплекс-методом розв’язуватимемо дві такі задачі:
перша задача:
(6.14)
за умов:
; (6.15)
; (6.16)
– цілі числа,
; (6.17)
, (6.18)
друга задача
(6.19)
за умов:
,
; (6.20)
; (6.21)
— цілі числа
; (6.22)
, (6.23)
де
– дробова компонента розв’язку задачі (6.1)-(6.4).
Наведені задачі (6.14)-(6.18) і (6.19)-(6.23) спочатку послаблюємо, тобто розв’язуємо з відкиданням обмежень (6.17) і (6.22). Якщо знайдені оптимальні плани задовольняють умови цілочисловості, то ці плани є розв’язками задачі (6.1)-(6.4). Інакше пошук розв’язку задачі триває. Для дальшого розгалуження вибираємо розв’язок задачі з більшим значенням цільової функції, якщо йдеться про максимізацію, і навпаки – з меншим значенням цільової функції в разі її мінімізації. Подальше розгалуження виконується доти, доки не буде встановлено неможливість поліпшення розв’язку. Здобутий останній план – оптимальний.
Розв’язування цілочислових задач методом гілок і меж можна значно прискорити. Очевидно, що кожна наступна задача, яку отримують в процесі розв’язування відрізняється від попередньої лише одним обмеженням. Тому за послідовного розв’язування задач немає сенсу розв’язувати їх симплексним методом спочатку. Досить буде почергово приєднати нові обмеження виду (6.18) і (6.23) до останньої симплекс-таблиці попередньої задачі та вилучити (в разі необхідності) непотрібні «старі» обмеження.
Геометрично введення додаткових лінійних обмежень виду (6.18) та (6.23) в систему обмежень початкової задачі означає проведення гіперплощин (прямих), що розтинають багатогранник (багатокутник) допустимих планів відповідної задачі лінійного програмування у такий спосіб, що уможливлюється включення в план найближчої цілої точки цього багатокутника (рис.6.4). Допустимо, що А – точка максимуму, тоді за методом гілок та меж багатокутник допустимих планів задачі ABCOD поділяється на дві частини прямими
та
+1, що виключає з розгляду точку А, координата якої
є не цілим числом.

Рисунок 6.4
Опишемо алгоритм методу гілок та меж:
1. Симплексним методом розв’язують задачу (6.1)-(6.3) (без вимог цілочисловості змінних).
Якщо серед елементів умовно-оптимального плану немає дробових чисел, то цей розв’язок є оптимальним планом задачі цілочислового програмування (6.1)-(6.4).
Якщо задача (6.1)-(6.3) не має розв’язку (цільова функція необмежена, або система обмежень несумісна), то задача (6.1)-(6.4) також не має розв’язку.
2. Коли в умовно-оптимальному плані є дробові значення, то вибирають одну з нецілочислових змінних
і визначають її цілу частину
.
3. Записують два обмеження, що відтинають нецілочислові розв’язки:
,
.
4. Кожну з одержаних нерівностей приєднують до обмежень початкової задачі. В результаті отримують дві нові цілочислові задачі лінійного програмування.
5. У будь-якій послідовності розв’язують обидві задачі.
У разі, коли отримано цілочисловий розв’язок хоча б однієї із задач, значення цільової функції цієї задачі зіставляють з початковим значенням. Якщо різниця не більша від заданого числа e, то процес розв’язування може бути закінчено. У разі, коли цілочисловий розв’язок одержано в обох задачах, то з розв’язком початкової зіставляється той, який дає краще значення цільової функції. Якщо ж в обох задачах одержано нецілочислові розв’язки, то для дальшого гілкування вибирають ту задачу, для якої здобуто краще значення цільової функції і здійснюють перехід до кроку 2.
Приклад 6.2. Розв’яжемо методом гілок і меж задачу з прикладу 6.1.
Розв’язання. Відкинувши умову цілочисловості, дістанемо розв’язок: х1=1, х2=
. Отже, допустиме ціле значення х2 має задовольняти одну з нерівностей
або
. Приєднуємо до початкової задачі окремо кожне з обмежень, нехтуючи умовою цілочисловості, і розв’язуємо по черзі обидві утворені задачі:

Для задачі І (з обмеженням
) оптимальним буде розв’язок
,
, а для задачі IІ (з обмеженням
) – розв’язок
,
. Оскільки цілочислового плану не знайдено, процес необхідно продовжити, узявши для дальшого розгалуження першу задачу, оптимальний план якої дає більше значення функціонала. Розв’язуємо задачу І, окремо приєднуючи до неї обмеження:
і
. Отримуємо такі дві задачі:

Розв’язком задачі ІІІ є план
,
, а задачі IV – план
,
. Обидва розв’язки є цілочисловими, проте краще значення цільової функції забезпечує розв’язок задачі IV. Тому оптимальним планом початкової цілочислової задачі буде
,
, що збігається з розв’язком, отриманим за методом Гоморі.
Схема процесу розв’язування задачі з прикладу 6.1 (рис.6.5) досить наочно пояснює назву методу гілок та меж. Початкова задача розділяється (гілкується) на дві простіші, і, якщо серед них не існує задачі з цілочисловим оптимальним розв’язком, то процес гілкування продовжується. Отже, всі розглянуті дії можна зобразити у вигляді «дерева»:

Рисyнок 6.5
Кожен елемент такого «дерева» – це певна задача, що має відповідний оптимальний план. Після одержання нецілочислового розв’язку послабленої (тобто без умови цілочисловості) початкової задачі ми перетворили її на дві інші з додатковими умовами. З них кращим виявився розв’язок задачі І, однак оскільки він був не цілочисловим, то ми продовжили процес гілкування. Задачу І введенням додаткових обмежень перетворили в задачу ІІІ та задачу IV. Оптимальні плани обох цих задач цілочислові, але план задачі IV дає більше значення функціонала, тому цілочисловим оптимальним планом початкової задачі є розв’язок задачі IV.
Самостійна робота №7 – Наближені методи розв’язування задачі цілочислового лінійного програмування
1. Наближені методи. Метод вектора спаду. Приклад розв’язку задачі цілочислового лінійного програмування методом вектора спаду [4, с.272-276].
2. Приклади розв’язку задачі цілочислового лінійного програмування методом Гоморі та методом гілок і меж [2, с.155-157], [4, с.159-160].
Примечания
1. ↑ Metacomco выпустила так называемую «evolution» версию оригинальной файловой системы Amiga, реализованной первой Amiga Corporation (бывшая Hi-Toro) в 1982-83/85. По правде говоря, Metacomco сделала кашу из ранних ФС, убивших ее простую и легкую структуру. Сперва OFS называлась просто Amiga File System. Название изменили с появлением «новой» Fast File System, созданной в 1987 для той же платформы.
2. ↑ Microsoft впервые представила FAT32 в Windows 95 OSR2 (OEM Service Release 2) и впоследствии в Windows 98.
3. ↑ IBM представила JFS с начальным релизом AIX версии 3.1 в 1990 году. Эта файловая система сейчас называется JFS1. Новая JFS (сейчас называемая JFS2), базирующаяся наLinux‐портах, была впервые применена в OS/2 Warp Server for e-Business в 1999 году.
[править]Ограничения
| Максимальная длина имён файлов
| Допустимые символы в названиях[1]
| Максимальная длина пути файла
| Максимальный размер файла
| Максимальный размер тома[2]
|
RT-11
| 6+3 символа в кодеRADIX50
| A-Z, 0-9, $ . % <пробел>
| 14 символов
| 33,554,432 байт (65536 * 512)
| 33,554,432 байт
|
V6FS
| 14 байт[3]
| Любые символы, кроме NUL и /[4]
| Нет установленных ограничений[5]
| 8MiB[6]
| 2TiB
|
V7FS
| 14 байт[3]
| Любые символы, кроме NUL и /[4]
| Нет установленных ограничений[5]
| 1GiB[7]
| 2TiB
|
FAT12
| 8+3 символов (255 байт для VFAT)[3]
| Любые символы ANSI (Unicode для VFAT), кроме NUL[3][4]
| Нет установленных ограничений[5]
| 32MiB
| 1MiB — 32MiB
|
FAT16
| 8+3 символов (255 байт для VFAT)[3]
| Любые символы ANSI (Unicode для VFAT), кроме NUL,[3][4]
| Нет установленных ограничений[5]
| 2GiB
| 16MiB — 2GiB
|
MFS
| 30 байт[3]
| Любые символы, кроме NUL и :[4]
| Нет установленных ограничений[5]
| ?
| ?
|
HFS
| 30 байт[3]
| Любые символы, кроме NUL и :[4]
| Нет установленных ограничений[5]
| ?
| ?
|
FAT32
| 255 байт[3]
| Любые символы Юникода, кроме NUL[3][4]
| Нет установленных ограничений[5]
| 4GiB
| 512MiB — 8TiB[8]
|
HPFS
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 4GiB
| 2TiB[9]
|
NTFS
| 255 символов
| Любые символы Юникода, кроме NUL, " / \ * ? < > | :
| 32 767 символов Юникода; каждая компонента пути (каталог или имя файла) — до 255 символов[5]
| 16 EiB[10]
| 16 EiB[10]
|
HFS+
| 255 символов[11]
| Любые символы Юникода, кроме NUL[4][12]
| ?
| 8EiB
| 8EiB
|
FFS
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 4GiB
| 256TiB
|
Amiga FFS
| 30 байт
| Любые символы, кроме NUL, / и :
| Нет установленных ограничений[5]
| 2GiB
| 4GiB
|
SFS
| 107 байт
| Любые символы, кроме NUL, / и :
| Нет установленных ограничений[5]
| 4GiB
| 128GiB
|
PFS3
| 31-106 байт[13]
| Любые символы, кроме NUL, / и :
| Нет установленных ограничений[5]
| 108GiB
| 2TiB
|
UFS1
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 4GiB — 256TiB
| 256TiB
|
UFS2
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 512GiB — 32PiB
| 1YiB
|
ext2
| 255 байт
| Любые символы, кроме NUL, /[4]
| Нет установленных ограничений[5]
| 16GiB — 2TiB[2]
| 2TiB — 32TiB
|
ext3
| 255 байт
| Любые символы, кроме NUL, /[4]
| Нет установленных ограничений[5]
| 16GiB — 2TiB[2]
| 2TiB — 32TiB
|
ext4
| 255 байт
| Любые символы, кроме NUL, /[4]
| Нет установленных ограничений[5]
| 16GiB — 16TiB[2]
| 1 EiB
|
ReiserFS
| 4032 байт/255 символов
| Любые символы, кроме NUL, /[4]
| Нет установленных ограничений[5]
| 8TiB[14]
| 16TiB
|
Reiser4
| ?
| ?
| Нет установленных ограничений[5]
| 8TiB on x86
| ?
|
XFS
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 9EiB[15]
| 9EiB[15]
|
JFS
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 8EiB
| 512TiB — 4PiB
|
JFS2
| 255 байт
| Любые символы Юникода, кроме NUL
| Нет установленных ограничений[5]
| 4PiB
| 32PiB
|
Be File System
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 12288 байт — 260GiB[16]
| 256PiB — 2EiB
|
AdvFS
| 255 символов
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 16TiB
| 16TiB
|
NSS
| 256 символов
| Depends on namespace used[17]
| Ограничивается только возможностями клиента
| 8TiB
| 8TiB
|
NWFS
| 80 байт[18]
| Depends on namespace used[17]
| Нет установленных ограничений[5]
| 4GiB
| 1TiB
|
ODS-5
| 236 байт[19]
| ?
| 4096 байт[20]
| 1TiB
| 1TiB
|
VxFS
| 255 байт
| Любые символы, кроме NUL[4]
| Нет установленных ограничений[5]
| 16EiB
| ?
|
UDF
| 255 байт
| Любые символы Юникода, кроме NUL
| 1023 байт[21]
| 16EiB
| ?
|
ZFS
| 255 байт
| Любые символы Юникода, кроме NUL
| Нет установленных ограничений[5]
| 16EiB
| 16EiB
|
Btrfs
| 255 байт
| Любые символы Юникода, кроме NUL и /
| ?
| 16EiB
| 16EiB
|
exFAT
| Неизвестно
| Любые символы Юникода, кроме NUL
| Нет установленных ограничений
| 16EiB
| 64 ZiB[22] в теории 512 TiB
|
| Максимальная длина имён файлов
| Допустимые символы в названиях[1]
| Максимальная длина пути файла
| Максимальный размер файла
| Максимальный размер тома[2]
|